iptables簡介
netfilter/iptables(簡稱為iptables)組成Linux平臺下的包過濾防火墻,與大多數(shù)的Linux軟件一樣,這個包過濾防火墻是免費的,它可以代替昂貴的商業(yè)防火墻解決方案,完成封包過濾、封包重定向和網(wǎng)絡(luò)地址轉(zhuǎn)換(NAT)等功能。
iptables基礎(chǔ)
規(guī)則(rules)其實就是網(wǎng)絡(luò)管理員預(yù)定義的條件,規(guī)則一般的定義為“如果數(shù)據(jù)包頭符合這樣的條件,就這樣處理這個數(shù)據(jù)包”。規(guī)則存儲在內(nèi)核空間的信息 包過濾表中,這些規(guī)則分別指定了源地址、目的地址、傳輸協(xié)議(如TCP、UDP、ICMP)和服務(wù)類型(如HTTP、FTP和SMTP)等。當數(shù)據(jù)包與規(guī) 則匹配時,iptables就根據(jù)規(guī)則所定義的方法來處理這些數(shù)據(jù)包,如放行(accept)、拒絕(reject)和丟棄(drop)等。配置防火墻的 主要工作就是添加、修改和刪除這些規(guī)則。
iptables和netfilter的關(guān)系:
這是第一個要說的地方,Iptables和netfilter的關(guān)系是一個很容易讓人搞不清的問題。很多的知道iptables卻不知道netfilter。其實iptables只是Linux防火墻的管理工具而已,位于/sbin/iptables。真正實現(xiàn)防火墻功能的是netfilter,它是Linux內(nèi)核中實現(xiàn)包過濾的內(nèi)部結(jié)構(gòu)。
iptables的規(guī)則表和鏈:
表(tables)提供特定的功能,iptables內(nèi)置了4個表,即filter表、nat表、mangle表和raw表,分別用于實現(xiàn)包過濾,網(wǎng)絡(luò)地址轉(zhuǎn)換、包重構(gòu)(修改)和數(shù)據(jù)跟蹤處理。
鏈(chains)是數(shù)據(jù)包傳播的路徑,每一條鏈其實就是眾多規(guī)則中的一個檢查清單,每一條鏈中可以有一 條或數(shù)條規(guī)則。當一個數(shù)據(jù)包到達一個鏈時,iptables就會從鏈中第一條規(guī)則開始檢查,看該數(shù)據(jù)包是否滿足規(guī)則所定義的條件。如果滿足,系統(tǒng)就會根據(jù) 該條規(guī)則所定義的方法處理該數(shù)據(jù)包;否則iptables將繼續(xù)檢查下一條規(guī)則,如果該數(shù)據(jù)包不符合鏈中任一條規(guī)則,iptables就會根據(jù)該鏈預(yù)先定 義的默認策略來處理數(shù)據(jù)包。
規(guī)則表:
1.filter表——三個鏈:INPUT、FORWARD、OUTPUT
作用:過濾數(shù)據(jù)包內(nèi)核模塊:iptables_filter.
2.Nat表——三個鏈:PREROUTING、POSTROUTING、OUTPUT
作用:用于網(wǎng)絡(luò)地址轉(zhuǎn)換(IP、端口) 內(nèi)核模塊:iptable_nat
3.Mangle表——五個鏈:PREROUTING、POSTROUTING、INPUT、OUTPUT、FORWARD
作用:修改數(shù)據(jù)包的服務(wù)類型、TTL(生存時間)、并且可以配置路由實現(xiàn)QOS(服務(wù)質(zhì)量)內(nèi)核模塊:iptable_mangle(別看這個表這么麻煩,咱們設(shè)置策略時幾乎都不會用到它)
4.Raw表——兩個鏈:OUTPUT、PREROUTING
作用:決定數(shù)據(jù)包是否被狀態(tài)跟蹤機制處理內(nèi)核模塊:iptable_raw
(這個是REHL4沒有的,不過不用怕,用的不多)
規(guī)則鏈:1.INPUT——進來的數(shù)據(jù)包應(yīng)用此規(guī)則鏈中的策略
2.OUTPUT——外出的數(shù)據(jù)包應(yīng)用此規(guī)則鏈中的策略
3.FORWARD——轉(zhuǎn)發(fā)數(shù)據(jù)包時應(yīng)用此規(guī)則鏈中的策略
4.PREROUTING——對數(shù)據(jù)包作路由選擇前應(yīng)用此鏈中的規(guī)則
(記??!所有的數(shù)據(jù)包進來的時侯都先由這個鏈處理)
5.POSTROUTING——對數(shù)據(jù)包作路由選擇后應(yīng)用此鏈中的規(guī)則
(所有的數(shù)據(jù)包出來的時侯都先由這個鏈處理)
規(guī)則表之間的優(yōu)先順序:
Raw——mangle——nat——filter
規(guī)則鏈之間的優(yōu)先順序(分三種情況)
第一種情況:入站數(shù)據(jù)流向
從外界到達防火墻的數(shù)據(jù)包,先被PREROUTING規(guī)則鏈處理(是否修改數(shù)據(jù)包地址等),之后會進行路由選擇(判斷該數(shù)據(jù)包應(yīng)該發(fā)往何處),如果數(shù)據(jù)包 的目標主機是防火墻本機(比如說Internet用戶訪問防火墻主機中的web服務(wù)器的數(shù)據(jù)包),那么內(nèi)核將其傳給INPUT鏈進行處理(決定是否允許通 過等),通過以后再交給系統(tǒng)上層的應(yīng)用程序(比如Apache服務(wù)器)進行響應(yīng)。
第二沖情況:轉(zhuǎn)發(fā)數(shù)據(jù)流向
來自外界的數(shù)據(jù)包到達防火墻后,首先被PREROUTING規(guī)則鏈處理,之后會進行路由選擇,如果數(shù)據(jù)包的目標地址是其它外部地址(比如局域網(wǎng)用戶通過網(wǎng) 關(guān)訪問QQ站點的數(shù)據(jù)包),則內(nèi)核將其傳遞給FORWARD鏈進行處理(是否轉(zhuǎn)發(fā)或攔截),然后再交給POSTROUTING規(guī)則鏈(是否修改數(shù)據(jù)包的地 址等)進行處理。
第三種情況:出站數(shù)據(jù)流向
防火墻本機向外部地址發(fā)送的數(shù)據(jù)包(比如在防火墻主機中測試公網(wǎng)DNS服務(wù)器時),首先被OUTPUT規(guī)則鏈處理,之后進行路由選擇,然后傳遞給POSTROUTING規(guī)則鏈(是否修改數(shù)據(jù)包的地址等)進行處理。