一、IPTABLES的簡介
1. 簡介
IPTABLES/netfilter(http://www.netfilter.org) 其實大多數人都認為iptables是linux系統上的一個服務,其實不是的. 我們linux系統上的服務比如說httpd服務在啟動起來的時候,是不是在後台啟動一個相應的服務進程且在網卡上監聽一個端口,而iptables卻不然,那麼iptables到底是什麼呢?其實iptables只是一個工具而已.我們的linux系統有用戶空間,和內核空間,而iptables有兩個組件,一是netfilter, netfilter組件只是用來過濾防火牆規則,及作出相應的處理機制的,它是集成在內核中的一部分,也就是說它是工作在內核空間的,那麼大家都知道用戶是不可能直接跟內核空間打交道的,那麼netfilter只是工作在內核空間對規則進行處理的,那麼規則從何而來呢? 是從iptables的第二個組件iptables而來的,我們上面說了IPTABLES只是一個工作在用戶空間的一個工具而已,那麼用戶就使用這個工具的一個命令來跟工作在內核空間中的netfiter組件打交道的.其實IPTABLES防火牆就是這樣的.
二、IPTABLES的表和鏈
IPTABLES常用的表和鏈有三個filter表 nat表 mangle表, 和五個鏈 INPUT鏈 OUTPUT鏈 FORWARE鏈 POSTROUTING鏈 PREROUTING鏈, 下面來介紹下它們的各個功能呢個功能,
1.filter表
filter表主要是過濾數據包的,IPTABLES幾乎所有的數據包過濾都在此表中實現的,filter表也是IPTABLES中默認的表,此表中還包含三個鏈如下
1.1 INPUT鏈
過濾所有的目標地址是本機的數據包
1.2 OUTPUT鏈
過濾所有從本機出去的數據包
1.3 FORWORD鏈
過濾所有從本機路過的數據包
2.nat表
nat表主要是用於做網絡地址轉換的(NAT) 在IPTABLES中可以做SNAT(源地址轉換),DNAT(目標地址轉換),PNAT(即跟SNAT差不多,不一樣的是SNAT的源地址是固定的,而PNAT的源地址是不固定的,當使用ppp 或pppoe的方式連接互聯網的時候一般適應這中) 。 nat表中包含兩個鏈如下
2.1 PREROUTING鏈
在數據包到達防火牆的時候改變目標地址 DNAT應用於此鏈.
2.2 OUTPUT鏈
可以改變本地產生的數據包的目標地址
2.3 POSTROUTING鏈
在數據包離開防火牆的時候改變源地址,SNAT應用於次鏈
3. mangle表
mangle表主要是修改數據包頭部信息的,此表中包含以下5條鏈
3.1 PREROUTING鏈,
在數據包進入防火牆之後,也稱為路由前,
3.2 POSTROUTING鏈,
在數據包確定目標地址後,也稱為路由後,
3.3 OUTPUT鏈
從本機出去的時間包路由前
3.4 INPUT鏈
數據包進入本機後,路由後
3.5 FORWARD鏈
第一次路由判斷之後,最後一次路由判斷之前改變數據包