防火牆(Firewall)、網(wǎng)址轉(zhuǎn)換(NAT)、數(shù)據(jù)包(package)記錄、流量統(tǒng)計,這些功能全是Linux核心裡的Netfilter子系統(tǒng)所提供的,而iptables是控管Netfilter的唯一工具程式。iptables的介面很可能是Linux有史以來最精緻的,它使得Linux成為最有彈性的網(wǎng)路過濾系統(tǒng)。iptables將許多組繁復(fù)的規(guī)則集成組織成容易控管的形式,以便管理員可以進(jìn)行分組測試,或關(guān)閉、啟動某組規(guī)則集。
iptable能夠為Unix、Linux和BSD個人工作站創(chuàng)建一個防火墻,也可以為一個子網(wǎng)創(chuàng)建防火墻以保護(hù)其它的系統(tǒng)平臺。iptable只讀取數(shù)據(jù)包頭,不會給信息流增加負(fù)擔(dān),也無需進(jìn)行驗證。要想獲得更加好的的安全性,可以將其和一個代理服務(wù)器(比如sqiud)相結(jié)合。
每當(dāng)有人緊急要求你開放或關(guān)閉特定通訊端口(為了讓某種重要的網(wǎng)路通訊能通過防火牆,或是阻擋某種攻擊),或是請你在防火牆設(shè)置某種功能,本文將能協(xié)助你盡速解決問題。本文以直接的語法和務(wù)實的范例,幫助你記憶iptables的各種用法,並提供一些適當(dāng)?shù)囊庖姡屇愕姆阑馉澅M可能保持安全。我們將iptables的選項分成「防火牆」、「流量統(tǒng)計」、「NAT」三類,以適合實務(wù)查詢的方式編排,幫助管理員在最短時間內(nèi)找到相關(guān)選項的語法和說明。
操作范例如下:
讓我們來一個簡單的iptables命令:
iptables -t nat -A PREROUTING -i ethl -p tcp - -dport 80
-j DNAT - - to -destination 192.168.1.3:8080
(表1)是解釋這個iptables命令的意義。
▓ 概念
Linux核心的包處理流程中,共設(shè)置了五個(魚鉤)攔截點(hook points),分別是PREROUTING、INPUT、FORWARD、POSTROUTING以及OUTPUT。內(nèi)建鏈結(jié)只能作用在這些攔截點;你可以針對個別攔截點設(shè)置一系列處理規(guī)則,每條規(guī)則各代表一次影響(或監(jiān)測)包處理流程的機(jī)會。
*************************************
▓ 訣竅
我們??吹胶芏嗾f明文件有著『...nat表格的PREROUTING串鏈...』這樣的說法,隱喻著鏈結(jié)是屬于表格。然而,鏈結(jié)與表格兩者之間並沒有統(tǒng)屬關(guān)系,最多只有隱諱的關(guān)聯(lián)性而已。鏈結(jié)(chains)的真正含意是「包(package)徑路上的攔截點」而表格(tables)則是象征「處理效果」。然而,為了措詞上的方便,本文仍免不了出現(xiàn)『...某表格的某鏈結(jié)...』之類的說法請讀者注意。
*************************************
※ 圖1、2、3分別展示了表格與鏈結(jié)的三種有效組合,以及各種組合所象征的包處理流程。其中《圖l》是包經(jīng)過「網(wǎng)址轉(zhuǎn)換系統(tǒng)」(NAT)的流程,相關(guān)鏈結(jié)是作用於nat表格。
※ 圖2: 是包流經(jīng)「包過濾系統(tǒng)」的流程,相關(guān)鏈結(jié)是作用于filter(過濾)表格。
※ 圖3: 是包流經(jīng)「包內(nèi)容調(diào)整系統(tǒng)」的流程,相關(guān)鏈結(jié)是作用于mangle表格。
表2》說明五種攔截點(鏈結(jié))的作用,以及各攔截適合處理的包類型。
注解:
混雜模式(promiscuous mode):Ethernet網(wǎng)卡的一種特殊作業(yè)模式,在此模式下,即使目的地MAC位址不是指向自己的Ethernet包,也會被收下來。Ethernet網(wǎng)卡通常是在非混雜模式下作業(yè),也就是只接受MAC指向自己的Ethernet包。
*************************************
訣竅
好奇的讀者,可從核心原始程式的/usr/include/linux/netfilter_ipv4.h標(biāo)頭檔查出各攔截點的定義;它們的名稱類似NF-IP_FORWARD、NF_IP_LOCAL_{IN,OUT}、和NF_IP_{PRE,POST}_ROUTING。
*************************************
規(guī)則應(yīng)該設(shè)置於哪個表格的哪個鏈結(jié),取決於規(guī)則本身的功能性,以及包的性質(zhì)。比方說,若你要設(shè)置的一條用於過濾離境包的規(guī)則,則應(yīng)該將該規(guī)則設(shè)置於「filter表格」(因為功能性是「過濾」)的「OUTPUT鏈結(jié)」(因為包性質(zhì)是「離境包」)雖然要離境的包,其最后一關(guān)應(yīng)該是at表格的POSTROUfING鏈結(jié)(參閱《表4》與《表6》),但由於nat表格管不到POSTROUTING鏈結(jié),所以你不能將出境包過濾規(guī)則設(shè)置在那裡。
表格(Tables)
iptables內(nèi)建三個表格:filter、mangle以及nat每個表格都被預(yù)先設(shè)置了一或多個代表各攔截點的鏈結(jié)(請參閱《表2》、《圖1》、《圖2》、《圖3》)。這三個內(nèi)建篩表的作用,請參閱《表3》。
iptables將適當(dāng)?shù)逆溄Y(jié)設(shè)置於上述三個內(nèi)建表格,當(dāng)系統(tǒng)收到包時,便依據(jù)包的來源(本機(jī)行程或網(wǎng)絡(luò))來源主機(jī)的位址、目的地位址來判斷包的性質(zhì)(穿越、輸入、輸出、繞回),然后依照包的性質(zhì),分別以《表4》到《表7》所列的程式之一來處理該類包。
*************************************
訣竅
圖1-3只是個別相關(guān)功能的示意流程,而非包的實際旅程。表4-7所描述的順序,才是包真正的旅程。
*************************************
鏈結(jié)(Chains)
每個表格都預(yù)設(shè)了相關(guān)攔截點的鏈結(jié),當(dāng)系統(tǒng)剛開機(jī)時,所有鏈結(jié)都是空的:為此,回復(fù)iptables套件另外提供了兩個輔助工具 – iptables-save與iptables-restore - 可供你儲存、回復(fù)所有規(guī)則(參閱《輔助工具》)。每個鏈結(jié)各代表一個攔截點,《表2》是各攔截點的說明,《表3》列出各表格預(yù)設(shè)的鏈結(jié)。
除了內(nèi)建鏈結(jié)之外,你也可以建立自己的鏈結(jié)來組織你的規(guī)則。
若包能通過鏈結(jié)裡的每一條規(guī)則而下受影響,最后將由鏈結(jié)的政策(policy)決定包的命運。內(nèi)建連接只能以「內(nèi)建目標(biāo)」(參閱《表8》) - ACCEPT與DROP – 為政策:預(yù)設(shè)政策為ACCEPT所有自訂鏈結(jié)的政策都固定是RETURN,不能改變。
如果要為內(nèi)建鏈結(jié)制定更復(fù)雜的政策,或是希望自訂連接改用RETURN之外的其它政策,唯一辦法是在鏈結(jié)末端添加一條通適規(guī)則(任何包都符合條件的規(guī)則),並將你要的任何目標(biāo)設(shè)定於該規(guī)則。
你不能直接修改已經(jīng)設(shè)置到鏈結(jié)裡的現(xiàn)有規(guī)則,如果發(fā)現(xiàn)某規(guī)則有誤,唯一辦法是刪除掉舊規(guī)則(使用-D)、然后將正確的新規(guī)則加回去(使用-A或-I)。
包(package)的流程
當(dāng)包流經(jīng)鏈結(jié)時,必須依序通過該鏈結(jié)裡每一條規(guī)則的檢驗。若包符合某條規(guī)則的「篩選條件」(match),則將包交給該規(guī)則的「目標(biāo)」(target)來處理,否則,就繼續(xù)由同鏈結(jié)裡的下一條規(guī)則予以檢驗。倘若包順利通過鏈結(jié)裡的所有規(guī)則(不符合任何規(guī)則的篩選條件),則以鏈結(jié)的「政策」(policy,參閱《鏈結(jié)(Chains)》來決定其去向。
包實際會經(jīng)過哪些鏈結(jié),取決於包本身的性質(zhì)(轉(zhuǎn)交、輸入、輸出、繞回),《表4》到《表7》分別列出各種性質(zhì)的包的旅程順序?!秷D1》《圖2》和《圖3》是單看特定篩表時,包如何通過該篩表各鏈結(jié)的詳細(xì)流程。
<附錄)描繪filter過濾表格的詳細(xì)處理流程。
注解: Package : "包","套件"或稱呼"封包"
Chain : "鏈結(jié)"或稱呼"串鏈"
To be continued...........
(http://www.fanqiang.com)