1. 程式人生 > >linux下 iptables配置防火牆

linux下 iptables配置防火牆

netfilter的工作原理

我們以系統預設的表為“filter”為例進行講解。該表中包含了INPUT、 FORWARD和OUTPUT 3個鏈。每一條鏈中可以有一條或數條規則,每一條規則都是這樣定義的“如果資料包頭符合這樣的條件,就這樣處理這個資料包”。當一個數據包到達一個鏈時,系統就會從第一條規則開始檢查,看是否符合該規則所定義的條件: 如果滿足,系統 根據該條規則所定義的方法處理該資料包;如果不滿足則繼續檢查下一條規則。最後,如果該資料包不符合該鏈中任一條規則的話,系統就會根據該鏈預先定義的策略(policy)來處理該資料包。當有資料包進入系統時,系統首先根據路由表決定將資料包發給哪一條鏈,則可能有以下三種情況:
(1)如果資料包的目的地址是本機,則系統將資料包送往INPUT鏈,如果通過規則檢查,則該包被髮給相應的本地程序處理;如果沒通過規則檢查,系統就會將這個包丟掉;
(2)如果資料包的目的地址不是本機,也就是說,這個包將被轉發,則系統將資料包送往FORWARD鏈,如果通過規則檢查,則該包被髮給相應的本地程序處理;如果沒通過規則檢查,系統就會將這個包丟掉;
(3)如果資料包是由本地系統程序產生的,則系統將其送往OUTPUT鏈,如果通過規則檢查,則該包被髮給相應的本地程序處理;如果沒通過規則檢查,系統就會將這個包丟掉。

1、iptables有關的重要名詞解釋

netfilter提供了一系列的表,每個表由若干條鏈組成,而每條鏈又是由一條或數條規則組成。下面介紹一下在應用iptables會碰到的一些名詞。
(1)規則:設定過濾資料包的具體條件,如IP地址、埠、協議、網路介面等。
(2)動作:當netfilter檢測資料包符合制定的規則後,則會對該資料包進行相應的處理,處理的方式如下:

動作 說明
ACCEPT 允許資料包通過
DROP 丟棄資料包
REJECT 丟棄資料包並返回錯誤資訊
LOG 將符合該規則的資料寫入日誌
QUEUE 傳送給應用程式處理該資料包

(3)鏈:資料包在傳遞過程中,不同情況下所要遵循的規則組合形成了鏈。鏈可以分為內建鏈和使用者自定義鏈。我們常用的是內建鏈,它一共有5個鏈,如下所示:

鏈名 相關的動作
PREROUTING 資料包進入路由表之前
INPUT 通過路由表後目的地為本機
FORWARD 通過路由表後,目的地不為本機
OUTPUT 由本機產生,向外轉發
POSTROUTIONG 傳送到網絡卡介面之前

(4)表:Netfileter根據處理資料的需要設計了三張表,表名分別是filter(該表為netfilter預設的表)、nat和mangle,這三張表的相關功能及分別對應的內建鏈如下所示:

表名 作用 內建鏈
filter netfilter預設的表,用於過濾設定 INPUT、FORWARDING、OUTPUT
nat 完成地址轉換 ORWARDING、OUTPUT、POSTROUTIONG
mangle 用在資料包特殊變更操作 全部的內建鏈
3、iptables的基本語法格式及分析

iptables的基本語法格式如下:
iptables [-t table] command [match] -j [target/jump ]
–t引數來設定對哪一張表生效,預設是filter表。如果是要對nat操作,則需要註明-t nat。
Command告訴程式該做什麼,如:插入、或刪除一個規則。如-A是代表在所選擇的鏈的最後新增一條規則;而-D則是從所選的鏈中刪除規則。
Match是用來指定過濾資料包所參照的條件。如源IP地址、網路介面、埠、協議型別等。如-p tcp代表針對TCP協議;-s 10.0.0.1是指標對源地址
為10.0.0.1的資料包;-i eth0是針對本地所使用的eth0網路介面。
Target/jump:通過對資料包與所有規則的匹配結果,核心將做出相應的處理動作。如-j ACCEPT表示當資訊包與具有ACCEPT目標的規則完全匹配時會被接受(允許它前往目的地)。