《電子技術(shù)應(yīng)用》
您所在的位置:首頁(yè) > 通信與網(wǎng)絡(luò) > 業(yè)界動(dòng)態(tài) > Linux內(nèi)核防火墻netfilter的原理和應(yīng)用

Linux內(nèi)核防火墻netfilter的原理和應(yīng)用

2009-09-16
作者:毛新宇

  摘? 要: 在分析ipchains缺陷的基礎(chǔ)上,著重介紹了Linux2.4版內(nèi)核防火墻netfilter的結(jié)構(gòu)框架、數(shù)據(jù)包的處理過(guò)程及配置工具iptables,并給出在Linux環(huán)境下使用iptables構(gòu)建防火墻的實(shí)例。

  關(guān)鍵詞: 防火墻? Linux? netfilter

?

  近年來(lái),Linux作為高性能的網(wǎng)絡(luò)操作系統(tǒng)得到了迅速發(fā)展,而Linux內(nèi)核中所內(nèi)嵌的防火墻起著重要作用。在Linux1.1版中使用的防火墻是從BSD UNIX中移植過(guò)來(lái)的ipfw;在Linux2.0版中則為ipfwadm;在Linux2.2版中為ipchains;而在新的2.4版中則是netfilter。

1?ipchains的缺陷

  Linux2.2版內(nèi)核防火墻ipchains提供了基本的防火墻功能(如包過(guò)濾、地址偽裝、透明代理等),得到廣泛的應(yīng)用。但是,ipchains也存在如下問(wèn)題。

  (1)ipchains處理數(shù)據(jù)包的方式復(fù)雜(如IP偽裝和NAT)。NAT和ipchains是作為2個(gè)獨(dú)立的Linux項(xiàng)目各自開(kāi)發(fā)的,后來(lái)才結(jié)合在一起使用,二者配合使用比較復(fù)雜。

  (2)輸入鏈描述整個(gè)進(jìn)入IP層的規(guī)則,它不區(qū)分?jǐn)?shù)據(jù)包是以該主機(jī)為目的地還是通過(guò)該主機(jī)中轉(zhuǎn),混淆了input鏈和forward鏈。forward鏈只負(fù)責(zé)處理中轉(zhuǎn)的數(shù)據(jù)包,但它總跟在input鏈的后面。要區(qū)別進(jìn)入的數(shù)據(jù)包和中轉(zhuǎn)的數(shù)據(jù)包,就必須編寫(xiě)復(fù)雜的規(guī)則,效率就會(huì)下降。forward鏈和output鏈之間也存在同樣的問(wèn)題。

  (3)ipchains沒(méi)有提供傳遞數(shù)據(jù)包到用戶空間的接口,任何對(duì)數(shù)據(jù)包進(jìn)行處理的代碼都必須在內(nèi)核空間運(yùn)行,而內(nèi)核編程復(fù)雜,對(duì)內(nèi)核的穩(wěn)定性構(gòu)成威脅。

  (4)透明代理實(shí)現(xiàn)復(fù)雜,必須查看每個(gè)數(shù)據(jù)包判斷是否有專門(mén)處理該地址的Socket。

  (5)ipchains沒(méi)有采用開(kāi)放型結(jié)構(gòu),用戶不能直接擴(kuò)展ipchains的功能。

  為了解決這些問(wèn)題,用戶需要一個(gè)開(kāi)放的、擴(kuò)展性好的內(nèi)核防火墻。Linux2.4版提供了netfilter內(nèi)核防火墻,它采用更完善的框架結(jié)構(gòu),具有許多新功能,如完整的動(dòng)態(tài)NAT、基于用戶和MAC地址的過(guò)濾、真正基于狀態(tài)的過(guò)濾等。netfilter還實(shí)現(xiàn)了擴(kuò)展過(guò)濾規(guī)則而不必修改內(nèi)核。

2?netfilter的工作原理

2.1 netfilter的框架結(jié)構(gòu)

  netfilter是Linux2.4內(nèi)核中實(shí)現(xiàn)包過(guò)濾、NAT和包處理等的功能模塊,它已在IPv4、IPv6和DECnet等網(wǎng)絡(luò)協(xié)議棧中被實(shí)現(xiàn)。主要包括以下3部分。

  (1)Hook函數(shù):netfilter為每種網(wǎng)絡(luò)協(xié)議(如IPv4、IPv6等)提供了一套Hook函數(shù),如IPv4就有5個(gè)Hook函數(shù)。每個(gè)Hook函數(shù)分別定義了數(shù)據(jù)包進(jìn)入?yún)f(xié)議棧的檢查點(diǎn),當(dāng)數(shù)據(jù)包流過(guò)檢查點(diǎn)時(shí),協(xié)議棧將數(shù)據(jù)包和相關(guān)的Hook函數(shù)的標(biāo)號(hào)作為參數(shù)來(lái)調(diào)用netfilter框架。

  (2)注冊(cè):內(nèi)核的任一模塊均可對(duì)每種協(xié)議的一個(gè)或多個(gè)Hook函數(shù)進(jìn)行注冊(cè),實(shí)現(xiàn)鏈接。當(dāng)數(shù)據(jù)包通過(guò)netfilter時(shí),netfilter檢查是否有模塊對(duì)該協(xié)議和Hook函數(shù)注冊(cè),若已注冊(cè),則將數(shù)據(jù)包傳給這些模塊處理。這些模塊就可以檢查、修改、丟棄或指示netfilter將該數(shù)據(jù)包傳送至用戶空間的隊(duì)列。

  (3)用戶空間隊(duì)列:傳送至用戶空間隊(duì)列的數(shù)據(jù)包是異步處理的,隊(duì)列中的數(shù)據(jù)包通過(guò)Hook函數(shù)被發(fā)送到用戶空間,在用戶空間中用戶進(jìn)程可以檢查、修改數(shù)據(jù)包,還可以將該數(shù)據(jù)包通過(guò)離開(kāi)內(nèi)核的同一Hook函數(shù)重新注入到內(nèi)核中。這樣,內(nèi)核中就沒(méi)有用戶自編的代碼,有利于內(nèi)核的穩(wěn)定。

2.2 netfilter的數(shù)據(jù)包處理流程

  與ipchains相比,netfilter區(qū)分了數(shù)據(jù)包的類型。netfilter的數(shù)據(jù)包處理過(guò)程如圖1所示。數(shù)據(jù)包進(jìn)入netfilter后,首先進(jìn)行校驗(yàn)和、完整性檢查;然后通過(guò)路由,確定數(shù)據(jù)包的類型,否則將數(shù)據(jù)包傳給輸入鏈,如果目的地址不是本機(jī),則將數(shù)據(jù)包傳給轉(zhuǎn)發(fā)鏈;本地進(jìn)程產(chǎn)生的數(shù)據(jù)包只經(jīng)過(guò)輸出鏈,經(jīng)路由轉(zhuǎn)發(fā)出去。每條鏈中可設(shè)1條或數(shù)條規(guī)則。當(dāng)一個(gè)數(shù)據(jù)包到達(dá)一條鏈時(shí),系統(tǒng)會(huì)從第一條規(guī)則開(kāi)始檢查。若符合規(guī)則,則按規(guī)則定義的方法處理;若不符合,則繼續(xù)檢查下一條規(guī)則。如果該數(shù)據(jù)包不符合該鏈中任何一條規(guī)則,系統(tǒng)則按該鏈預(yù)先定義的策略來(lái)處理。

?

?

  下面以IPv4為例,說(shuō)明數(shù)據(jù)包的處理流程及Hook函數(shù)在netfilter中的位置。在IPv4中Hook函數(shù)的位置如圖2所示。

?

?

  5個(gè)Hook函數(shù)分別是:(1)Hook1,NF_IP_ROUTING。(2)Hook2,NF_IP_LOCAL_IN。(3)Hook3,NF_IP_FORWARD。(4)Hook4,NF_IP_POST_ROUNTING。

  (5)Hook5,NF_IP_LOCAL_OUT。

  當(dāng)一個(gè)數(shù)據(jù)包進(jìn)入netfilter時(shí),首先由Hook1進(jìn)行目的地址轉(zhuǎn)換;然后經(jīng)路由,將此數(shù)據(jù)包發(fā)往本機(jī)進(jìn)程或轉(zhuǎn)發(fā)至其他主機(jī)。發(fā)往本機(jī)進(jìn)程前,數(shù)據(jù)包要進(jìn)入Hook2進(jìn)行輸入包過(guò)濾;如果是轉(zhuǎn)發(fā)至其他主機(jī),則數(shù)據(jù)包要進(jìn)入Hook3進(jìn)行轉(zhuǎn)發(fā)包過(guò)濾,再進(jìn)入Hook4進(jìn)行源地址轉(zhuǎn)換,最后發(fā)出本機(jī);如果數(shù)據(jù)包由本地進(jìn)程產(chǎn)生,則先進(jìn)入Hook5進(jìn)行輸出包過(guò)濾,然后經(jīng)路由進(jìn)入Hook4。這5個(gè)Hook函數(shù)運(yùn)行結(jié)束后,將返回以下4個(gè)結(jié)果之一:

  (1)NF_DROP,丟棄此數(shù)據(jù)包。(2)NF_ACCEPT,允許此數(shù)據(jù)包繼續(xù)傳遞。(3)NF_STOLEN,Hook函數(shù)接收此數(shù)據(jù)包,不再繼續(xù)傳遞。(4)NF_QUEUE,將此數(shù)據(jù)包放入用戶空間隊(duì)列。

2.3 iptables的使用

??? iptables是用來(lái)配置netfilter過(guò)濾規(guī)則的工具。在使用iptable命令之前必須加載netfilter內(nèi)核模塊,最簡(jiǎn)單的方法是使用mod probe命令:mod probe ip_tables。

  利用iptables可以實(shí)現(xiàn)數(shù)據(jù)包過(guò)濾(Filter表)、數(shù)據(jù)包處理(Mangle表)和網(wǎng)絡(luò)地址轉(zhuǎn)換(NAT表)功能。內(nèi)核模塊可注冊(cè)一個(gè)新的規(guī)則表(table),并規(guī)定數(shù)據(jù)包經(jīng)過(guò)指定的規(guī)則表,以實(shí)現(xiàn)用戶所需的功能。iptables通過(guò)插入、刪除和修改規(guī)則鏈中的規(guī)則,可以對(duì)所有的IP表進(jìn)行處理,包括Filter表、Mangle表和NAT表等。它支持插件以匹配新的參數(shù)和目標(biāo)動(dòng)作。因此對(duì)netfilter的擴(kuò)展就很簡(jiǎn)單,僅需編寫(xiě)一個(gè)完成目標(biāo)動(dòng)作的處理模塊和iptables插件(動(dòng)態(tài)鏈接庫(kù))。以上3種數(shù)據(jù)包的處理功能都是基于netfilter的Hook函數(shù)和IP表,它們是相互獨(dú)立的模塊,都被集成到netfilter提供的框架內(nèi)。

  iptables命令基本包括以下5部分:(1)工作在哪個(gè)表上(Filter、Mangle、NAT)。(2)使用該表的哪條鏈(input、output、forward)。(3)進(jìn)行的操作(插入、添加、刪除、修改)。(4)對(duì)特定規(guī)則的目標(biāo)動(dòng)作。(5)匹配數(shù)據(jù)包的條件。

3?應(yīng)用舉例

  使用iptables工具建立一個(gè)簡(jiǎn)單的包過(guò)濾防火墻。

3.1 物理結(jié)構(gòu)

  防火墻主機(jī)采用雙宿主機(jī)形式,eth0為外部網(wǎng)絡(luò)接口,eth1為內(nèi)部網(wǎng)絡(luò)接口,主機(jī)操作系統(tǒng)采用RedHat7.1(Linux2.4內(nèi)核)。防火墻要求:允許內(nèi)部主機(jī)瀏覽外部網(wǎng)頁(yè);允許外部主機(jī)瀏覽內(nèi)部Web服務(wù)器;可以阻攔某些非法攻擊。現(xiàn)假設(shè)內(nèi)部網(wǎng)絡(luò)IP為202.206.230.00~25;Web服務(wù)器地址為202.206.230.75:80;DNS服務(wù)器地址為212.112.20.132。

3.2 防火墻的配置

3.2.1 系統(tǒng)設(shè)置

  以root用戶身份登錄,在/etc/rc.d/目錄下創(chuàng)建rc.firewall文件,執(zhí)行命令“chmod 700 rc.firewall”。更改文件屬性,防止其他用戶對(duì)其訪問(wèn)。再編輯/etc/rc.d/rc.local文件,在末尾加上sh/etc/rc.d/rc.firewall,這樣在開(kāi)機(jī)時(shí)能自動(dòng)執(zhí)行該腳本。

3.2.2 配置步驟

  (1)清除所有鏈的規(guī)則

  # !/bin/sh

  /sbin/iptables-F

  (2)設(shè)置防火墻默認(rèn)規(guī)則

  默認(rèn)規(guī)則就是當(dāng)數(shù)據(jù)包不匹配鏈上的任何規(guī)則時(shí)所采取的策略,此處采用禁止一切的默認(rèn)策略,即:如果某個(gè)數(shù)據(jù)包沒(méi)有規(guī)則與之匹配,則該數(shù)據(jù)包將被禁止。

  /sbin/iptables-P INPUT DROP

  /sbin/iptables-P OUTPUT DROP

  /sbin/iptables-P FORWARD DROP

  (3)設(shè)置服務(wù)器的包過(guò)濾規(guī)則

  由于服務(wù)器/客戶機(jī)是雙向交互的,所以既要設(shè)置數(shù)據(jù)包出去的規(guī)則,又要設(shè)置數(shù)據(jù)包進(jìn)來(lái)的規(guī)則。

  ①允許對(duì)內(nèi)部網(wǎng)服務(wù)器訪問(wèn)。下面的一條規(guī)則是指:允許目的地址是內(nèi)部網(wǎng)Web服務(wù)器且采用TCP協(xié)議的數(shù)據(jù)包通過(guò)。

  /sbin/iptables-A FORWARD-p tcp - d

            202.206.230.75 - -dport 80-i eth0- j ACCEPT

  /sbin/iptables-A FORWARD-p tcp - s

            202.206.230.75 - -sport80-o eth0- j ACCEPT

  ②允許域名解析。對(duì)外部網(wǎng)服務(wù)器訪問(wèn)應(yīng)先開(kāi)放域名解析服務(wù)。域名服務(wù)器的端口為53,該規(guī)則是:允許目的地址是DNS服務(wù)器且采用UDP協(xié)議的數(shù)據(jù)包通過(guò)。

  /sbin/iptables-A FOREARD-p udp- -dport 53 - d

            212.112.20.132 - o eth0-j ACCEPT

  /sbin/iptables-A FORWARD-p udp- -sport53 - s

            212.112.20.132 - i eth0- j ACCEPT

  ③允許對(duì)外部網(wǎng)服務(wù)器訪問(wèn)。該規(guī)則是:允許目的端口為80、采用TCP協(xié)議,來(lái)自內(nèi)部網(wǎng)地址的數(shù)據(jù)包通過(guò)。

  /sbin/iptables-A FORWARD-p tcp-s 202.206.230.00

           /25- -dport 80- o eth0-j ACCEPT

  /sbin/iptables-A FORWARD-p tcp- d 202.206.230.00

           /25 - -sport 80 -i eth0-j ACCEPT

  (4)阻攔非法攻擊

  ①防止IP碎片攻擊:接收所有的IP碎片,但對(duì)單位時(shí)間內(nèi)通過(guò)的IP碎片數(shù)量進(jìn)行限制,只允許每秒通過(guò)100個(gè)IP碎片。

  /sbin/iptables-A FORWARD-f-m limit- -limit

           100/s- -limit-burst 100-j ACCEPT

  ②防止ping攻擊:ping是基于ICMP協(xié)議的一個(gè)常用網(wǎng)絡(luò)工具,但黑客常常利用它進(jìn)行攻擊(如Ping Flooding、Ping of death等),所以必須對(duì)它的使用加以限制。允許每秒通過(guò)一個(gè)ICMP包,默認(rèn)觸發(fā)條件是5個(gè)包。

  /sbin/iptables-A FORWARD-p icmp-m limit- -limit1/s - j ACCEPT

  通過(guò)以上的步驟,可以建立一個(gè)較完整的防火墻。只對(duì)外開(kāi)放有限的端口,同時(shí)又允許用戶進(jìn)行網(wǎng)絡(luò)訪問(wèn),并且還可以阻攔一些非法攻擊。在此基礎(chǔ)上,讀者還可以根據(jù)需要對(duì)防火墻進(jìn)行其他設(shè)置,如開(kāi)放FTP服務(wù)和電子郵件服務(wù)等。

4? 結(jié)束語(yǔ)

  netfilter是目前Linux各版本中較完善和強(qiáng)大的防火墻子系統(tǒng),而且它兼容以前的ipfwadm和ipchains,并針對(duì)舊版本存在的缺陷進(jìn)行了改進(jìn),使之更簡(jiǎn)便、易用。由于Linux的高效、免費(fèi)的特點(diǎn),其在服務(wù)器領(lǐng)域得到越來(lái)越廣泛的應(yīng)用。因此Linux防火墻子系統(tǒng)netfilter作為一種實(shí)現(xiàn)網(wǎng)絡(luò)安全的手段,也得到了廣泛的應(yīng)用。

?

參考文獻(xiàn)

1? Ziegler R.Linux防火墻.北京:人民郵電出版社,2000

2? Rodrigues C.Introduce to Netfilter.http://www.gis.net/~craigr/netfilter,2001

3? Satchell S T,Clifford H B.Linux IP協(xié)議棧源代碼分析.北京:機(jī)械工業(yè)出版社,2000

4? Bandel D A.Linux安全開(kāi)發(fā)工具.北京:電子工業(yè)出版社,2000

本站內(nèi)容除特別聲明的原創(chuàng)文章之外,轉(zhuǎn)載內(nèi)容只為傳遞更多信息,并不代表本網(wǎng)站贊同其觀點(diǎn)。轉(zhuǎn)載的所有的文章、圖片、音/視頻文件等資料的版權(quán)歸版權(quán)所有權(quán)人所有。本站采用的非本站原創(chuàng)文章及圖片等內(nèi)容無(wú)法一一聯(lián)系確認(rèn)版權(quán)者。如涉及作品內(nèi)容、版權(quán)和其它問(wèn)題,請(qǐng)及時(shí)通過(guò)電子郵件或電話通知我們,以便迅速采取適當(dāng)措施,避免給雙方造成不必要的經(jīng)濟(jì)損失。聯(lián)系電話:010-82306118;郵箱:aet@chinaaet.com。
主站蜘蛛池模板: 久久精品站 | 一级黄色网 | 成人网视频免费播放 | 精品在线视频一区 | 午夜影院一区二区三区 | 在线日韩三级 | 久久久午夜视频 | 色香婷婷 | 国产小视频在线免费观看 | 国产一国产一级毛片视频 | 2021入口一二三四麻豆 | 欧美日韩国产手机在线观看视频 | 成人短视频网站 | 久久综合精品不卡一区二区 | 日本三级唾液浓厚在线观看 | 日日天天夜夜 | 久草视频精品在线 | 亚洲色图综合 | 日韩经典在线观看 | 青青草成人免费 | 福利片在线播放 | 久久精品香蕉视频 | 欧美日批 | 99精品免费 | 国产成人精品永久免费视频 | 国产成人18黄禁网站免费观看 | 在线免费观看中文字幕 | 久久er国产精品免费观看2 | 欧美午夜在线观看 | 国产欧美日韩一区二区三区在线 | 国产成人精品亚洲一区 | jizz精品| 日韩黄色免费观看 | 欧美日韩精品在线 | 国产精品国产精品国产三级普 | 日本欧美一区二区三区视频 | 精品久久久久免费极品大片 | 神马午夜嘿嘿 | 亚洲 午夜在线一区 | 欧美日韩国产高清视频 | 国产一级一级毛片 |