1.iptables和netfilter說明框架
[1]netfilter/iptables組成Linux平臺下的包過濾防火牆,iptables是用戶空間的管理工具,netfilter是內核空間的包處理框架。tcp
2.數據包處理流程函數
這個仍是很簡單的,首先數據包進入PREROUTING鏈,以後根據路由決策進入INPUT(本機)仍是FORWARD(轉發),進入INPUT後會繼續進入OUTPUT鏈,最後都走到POSTROUTING鏈。工具
另外,若是加入各類規則以後,則數據包進入某個鏈以後,還要順序執行鏈上的規則,若是匹配某個規則,則根據匹配的規則來處理數據包(例如ACCEPT、DROP或者REJECT),若是都不匹配則使用默認的策略處理數據包。spa
3.表、鏈、規則命令行
理論上,只要在鏈上添加規則就能夠了,這樣每一個鏈上就有一個規則鏈表,只要數據包到鏈上以後,順序檢查這些規則就能夠了。實現中又根據規則的功能的不一樣,又分爲了四張表,即raw、mangle、nat、filter(優先級raw > mangle > nat > filter)。最終,數據包依次進入鏈中進行處理,而後根據每一個鏈上的表的優先級,依次執行每一個鏈上的表(裏面的規則)。關於錶鏈的關係,其實這個很簡單,實際使用時以表做爲入口,就是根據規則的功能添加規則到特定的表中,而後再把這個規則放到鏈上,另外就是一個表上的規則只存在固定的幾個鏈上,例如raw表的規則只能在PREROUTING和OUTPUT鏈。3d
filter表 :負責包過濾功能代理
nat表 :負責地址轉換code
mangle表:修改數據包的TOS、TTL,和爲數據包設置標記,用來實現Qos調整以及策略路由功能blog
raw表 :主要用來關閉鏈接跟蹤,即配置參數時使用-j NOTRACK
4.iptables工具用法
-t table 指定表名,默認爲"filter"表 -A chain 向鏈上追加規則 -D chain 從鏈上刪除規則 -L [chain] 列出鏈上的規則,這個打印的是規則列表,即把規則參數放到一個表格中 -S [chain] 打印鏈上的規則,這個打印的是規則的命令行參數,例如-A INPUT -s 127.0.0.1/32 -d 127.0.0.1/32 -j ACCEPT -F [chain] 清除鏈上的規則 -P chain target 設置指定鏈的策略,也就是默認策略 -v verbose mode,用做輸出命令,表示詳細輸出 -p proto 規則指定的協議,proto能夠爲tcp、udp、icmp、all。 -s address[/mask] 源地址[掩碼]。 -d address[/mask] 目的地址[掩碼]。 -i input name 匹配報文入接口 -o output name -j target 規則匹配後跳轉到的目標,也就是動做,由於在內核函數中,匹配某個條件後,使用goto的方式跳轉到下一個流程,因此是jump target。 target能夠爲ACCEPT、DROP、REJECT、SNAT、DNAT、REDIRECT、NOTRACK、LOG 擴展匹配項: --src-range from[-to] 匹配源IP的範圍 --dst-range from[-to] 匹配目的IP的範圍 --mark value[/mask] 匹配標記,而不是打標記,和匹配IP地址同樣有掩碼。 這些只是經常使用的選項,基本每條規則都要用到,主要的目的是實際用。
例子:
[1]iptables -P INPUT DROP //設置鏈的策略
[2]iptables -A INPUT -i eth0 -s 10.0.1.1 -j DROP //阻止某個IP地址
[3]iptables -t mangle -A PREROUTING !-d 10.0.1.1 -p tcp -j TPROXY --on-port 10000 --on-ip 0.0.0.0 --tproxy-mark 0x1/0x1 //對非目的地址10.0.1.1,而且標記匹配0x1/0x1的報文,透明代理到0.0.0.0:10000地址