下面的內容要求具有對TCP/IP,路由,防火牆及包過濾的基本概念的了解。
在第一部分已經解釋過,filter表和三個鉤子進行了掛接,因此提供了三條鏈進行數據過濾。所有來自於網絡,並且發給本機的數據報會遍歷INPUT規則鏈。所有被轉發的數據報將僅僅遍歷FORWARD規則鏈。最後,本地發出的數據報將遍歷OUTPUT鏈。
向規則鏈中插入規則
Linux2.4提供了一個簡潔強大的工具"iptables"來插入/刪除/修改規則鏈中的規則。這裡並不對iptalbes進行詳細的介紹,而只是討論它的主要的一些特性:
該命令實現對所有的ip表進行處理,當前包括filter,nat及mangle三個表格,及以後擴展的表模塊。
該命令支持插件來支持新的匹配參數和目標動作。因此對netfilter的任何擴展都非常的簡單。僅僅需要編寫一個完成實際目標動作處理的模塊和iptalbes插件(動態連接庫)來添加所需要的一切。
它有兩個實現:iptables(IPV4)及ip6tables。兩者都基於相同的庫和基本上相同的代碼。
基本的iptables命令
一個iptables命令基本上包含如下五部分:希望工作在哪個表上、希望使用該表的哪個鏈、進行的操作(插入,添加,刪除,修改)、對特定規則的目標動作、匹配數據報條件。
基本的語法為:
iptables -t table -Operation chain -j target match(es)
例如希望添加一個規則,允許所有從任何地方到本地smtp端口的連接:
iptables -t filter -A INPUT -j ACCEPT -p tcp --dport smtp
當然,還有其他的對規則進行操作的命令如:清空鏈表,設置鏈缺省策略,添加一個用戶自定義的鏈....
基本操作:
-A 在鏈尾添加一條規則;
-I 插入規則;
-D 刪除規則
-R 替代一條規則;
-L 列出規則。
基本目標動作,適用於所有的鏈:
ACCEPT 接收該數據報;
DROP 丟棄該數據報;
QUEUE 排隊該數據報到用戶空間;
RETURN 返回到前面調用的鏈;
Foobar 用戶自定義鏈。
基本匹配條件,適用於所有的鏈:
-p 指定協議(tcp/icmp/udp/...);
-s 源地址(ip address/masklen);
-d 目的地址(ip address/masklen);
-i 數據報輸入接口;
-o 數據報輸出接口;
除了基本的操作,匹配和目標還具有各種擴展。
iptables的數據報過濾匹配條件擴展
有各種各樣的數據包選擇匹配條件擴展用於數據包過濾。這裡僅僅簡單的說明來讓你感受擴展匹配的強大之處。
這些匹配擴展給了我們強大的數據報匹配手段:
TCP匹配擴展能匹配源端口,目的端口,及tcp標記的任意組合,tcp選項等;
UPD匹配擴展能匹配源端口和目的端口;
ICMP匹配擴展能匹配ICMP類型;
MAC匹配擴展能匹配接收到的數據的mac地址;
MARK匹配擴展能匹配nfmark;
OWNE匹配擴展(僅僅應用於本地產生的數據報)來匹配用戶ID,組ID,進程ID及會話ID;
LIM99v擴展匹配用來匹配特定時間段內的數據報限制。這個擴展匹配對於限制dos攻擊數據流非常有用;
STATE匹配擴展用來匹配特定狀態下的數據報(由連接跟蹤子系統來決定狀態),可能的狀態包括:
INVALID (不匹配於任何連接);
ESTABLISHED (屬於某個已經建立的鏈接的數據報);
NEW (建立連接的數據報);
RELATED (和某個已經建立的連接有一定相關的數據報,例如一個ICMP錯誤消息或FTP數據連接);
TOS匹配擴展用來匹配IP頭的TOS字段的值。
iptables的數據報過濾目標動作擴展
LOG 將匹配的數據報傳遞給syslog()進行記錄
ULOG 將匹配的數據適用用戶空間的log進程進行記錄
REJECT 不僅僅丟棄數據報,同時返回給發送者一個可配置的錯誤信息
MIRROR 互換源和目的地址以後重新傳輸該數據報