iptables詳解

Iptabels是與Linux內核集成的包過濾防火牆系統,幾乎所有的linux發行版本都會包含Iptables的功能。如果 Linux 系統連接到因特網或 LAN、服務器或連接 LAN 和因特網的代理服務器, 則Iptables有利於在 Linux 系統上更好地控制 IP 信息包過濾和防火牆配置。

netfilter/iptables過濾防火牆系統是一種功能強大的工具,可用於添加、編輯和除去規則,這些規則是在做信息包過濾決定時,防火牆所遵循和組成的規則。這些規則存儲在專用的信 息包過濾表中,而這些表集成在 Linux 內核中。在信息包過濾表中,規則被分組放在我們所謂的鏈(chain)中。

雖然netfilter/iptables包過濾系統被稱爲單個實體,但它實際上由兩個組件netfilter 和 iptables 組成。

netfilter 組件也稱爲內核空間(kernelspace),是內核的一部分,由一些信息包過濾表組成,這些表包含內核用來控制信息包過濾處理的規則集。

iptables 組件是一種工具,也稱爲用戶空間(userspace),它使插入、修改和除去信息包過濾表中的規則變得容易。

優點

netfilter/iptables的最大優點是它可以配置有狀態的防火牆。有狀態的防火牆能夠指定並記住爲發送或接收信息包所建立的連接的狀態。防火牆可以從信息包的連接跟蹤狀態獲得該信 息。在決定新的信息包過濾時,防火牆所使用的這些狀態信息可以增加其效率和速度。這裏有四種有效狀態,名稱分別爲 ESTABLISHED 、 INVALID 、 NEW 和 RELATED 。

狀態 ESTABLISHED指出該信息包屬於已建立的連接,該連接一直用於發送和接收信息包並且完全有效。 INVALID 狀態指出該信息包與任何已知的流或連接都不相關聯,它可能包含錯誤的數據或頭。狀態 NEW 意味着該信息包已經或將啓動新的連接,或者它與尚未用於發送和接收信息包的連接相關聯。最後, RELATED 表示該信息包正在啓動新連接,以及它與已建立的連接相關聯。

netfilter/iptables的另一個重要優點是,它使用戶可以完全控制防火牆配置和信息包過濾。您可以定製自己的規則來滿足您的特定需求,從而只允許您想要的網絡流量進入系統。

另外,netfilter/iptables是免費的,這對於那些想要節省費用的人來說十分理想,它可以代替昂貴的防火牆解決方案。

原理

iptables的原理主要是對數據包的控制,看下圖:



(1) 一個數據包進入網卡時,它首先進入PREROUTING鏈,內核根據數據包目的IP判斷是否需要轉發出去。

(2) 如果數據包就是進入本機的,它就會沿着圖向下移動,到達INPUT鏈。數據包到了INPUT鏈後,任何進程都會收到它。本機上運行的程序可以發送數據包,這些數據包會經 過OUTPUT鏈,然後到達POSTROUTING鏈輸出。

(3)如果數據包是要轉發出去的,且內核允許轉發,數據包就會如圖所示向右移動,經過 FORWARD鏈,然後到達POSTROUTING鏈輸出。

規則、表和鏈

1.規則(rules)

規則(rules)其實就是網絡管理員預定義的條件,規則一般的定義爲“如果數據包頭符合這樣的條件,就這樣處理這個數據包”。規則存儲在內核空間的信息包過濾表中,這些規則分別指定了源地址、目的地址、傳輸協議(如TCP、UDP、ICMP)和服務類型(如HTTP、FTP和SMTP)等。當數據包與規則匹配時,iptables就根據規則所定義的方法來處理這些數據包,如放行(accept)、拒絕(reject)和丟棄(drop)等。配置防火牆的主要工作就是添加、修改和刪除這些規則。

2.鏈(chains)

鏈(chains)是數據包傳播的路徑,每一條鏈其實就是衆多規則中的一個檢查清單,每一條鏈中可以有一條或數條規則。當一個數據包到達一個鏈時,iptables就會從鏈中第一條規則開始檢查,看該數據包是否滿足規則所定義的條件。如果滿足,系統就會根據該條規則所定義的方法處理該數據包;否則iptables將繼續檢查下一條規則,如果該數據包不符合鏈中任一條規則,iptables就會根據該鏈預先定義的默認策略來處理數據包。

3.表(tables)
表(tables)提供特定的功能,iptables內置了4個表,即raw表、filter表、nat表和mangle表,分別用於實現包過濾,網絡地址轉換和包重構的功能。


(1)RAW表

只使用在PREROUTING鏈和OUTPUT鏈上,因爲優先級最高,從而可以對收到的數據包在連接跟蹤前進行處理。一但用戶使用了RAW表,在 某個鏈上,RAW表處理完後,將跳過NAT表和 ip_conntrack處理,即不再做地址轉換和數據包的鏈接跟蹤處理了.

(2)filter表

主要用於過濾數據包,該表根據系統管理員預定義的一組規則過濾符合條件的數據包。對於防火牆而言,主要利用在filter表中指定的規則來實現對數據包的過濾。Filter表是默認的表,如果沒有指定哪個表,iptables 就默認使用filter表來執行所有命令,filter表包含了INPUT鏈(處理進入的數據包),RORWARD鏈(處理轉發的數據包),OUTPUT鏈(處理本地生成的數據包)在filter表中只能允許對數據包進行接受,丟棄的操作,而無法對數據包進行更改

(3)nat表

主要用於網絡地址轉換NAT,該表可以實現一對一,一對多,多對多等NAT 工作,iptables就是使用該表實現共享上網的,NAT表包含了PREROUTING鏈(修改即將到來的數據包),POSTROUTING鏈(修改即將出去的數據包),OUTPUT鏈(修改路由之前本地生成的數據包)

(4)mangle表

主要用於對指定數據包進行更改,在內核版本2.4.18 後的linux版本中該表包含的鏈爲:INPUT鏈(處理進入的數據包),RORWARD鏈(處理轉發的數據包),OUTPUT鏈(處理本地生成的數據包)POSTROUTING鏈(修改即將出去的數據包),PREROUTING鏈(修改即將到來的數據包)

3、規則表之間的優先順序:

Raw——mangle——nat——filter

規則鏈之間的優先順序(分三種情況):

第一種情況:入站數據流向

從外界到達防火牆的數據包,先被PREROUTING規則鏈處理(是否修改數據包地址等),之後會進行路由選擇(判斷該數據包應該發往何處),如果數據包 的目標主機是防火牆本機(比如說Internet用戶訪問防火牆主機中的web服務器的數據包),那麼內核將其傳給INPUT鏈進行處理(決定是否允許通 過等),通過以後再交給系統上層的應用程序(比如Apache服務器)進行響應。

第二衝情況:轉發數據流向

來自外界的數據包到達防火牆後,首先被PREROUTING規則鏈處理,之後會進行路由選擇,如果數據包的目標地址是其它外部地址(比如局域網用戶通過網 關訪問QQ站點的數據包),則內核將其傳遞給FORWARD鏈進行處理(是否轉發或攔截),然後再交給POSTROUTING規則鏈(是否修改數據包的地 址等)進行處理。

第三種情況:出站數據流向

防火牆本機向外部地址發送的數據包(比如在防火牆主機中測試公網DNS服務器時),首先被OUTPUT規則鏈處理,之後進行路由選擇,然後傳遞給POSTROUTING規則鏈(是否修改數據包的地址等)進行處理。


iptables是採用規則堆棧的方式來進行過濾,當一個封包進入網卡,會先檢查 Prerouting,然後檢查目的IP判斷是否需要轉送出去,接着就會跳到INPUT 或 Forward 進行過濾,如果封包需轉送處理則檢查 Postrouting,如果是來自本機封包,則檢查 OUTPUT 以及Postrouting。過程中如果符合某條規則將會進行處理,處理動作除了 ACCEPT、REJECT、DROP、REDIRECT 和MASQUERADE 以外,還多出 LOG、ULOG、DNAT、SNAT、MIRROR、QUEUE、RETURN、TOS、TTL、MARK等,其中某些處理動作不會中斷過濾程序,某些處理動作則會中斷同一規則鏈的過濾,並依照前述流程繼續進行下一個規則鏈的過濾(注意:這一點與ipchains不同),一直到堆棧中的規則檢查完畢爲止。透過這種機制所帶來的好處是,我們可以進行復雜、多重的封包過濾,簡單的說,iptables可以進行縱橫交錯式的過濾(tables)而非鏈狀過濾(chains)。ACCEPT 將封包放行,進行完此處理動作後,將不再比對其它規則,直接跳往下一個規則鏈(nat:postrouting)。

那麼如何使用iptables在以上流程中控制對數據包的處理行爲呢?當然是使用iptables與其相關的參數了

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章