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目標的規則完全匹配時會被接受(允許它前往目的地)。