歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux綜合 >> Linux資訊 >> 更多Linux >> 解讀Linux2.4的netfilter功能框架(中)

解讀Linux2.4的netfilter功能框架(中)

日期:2017/2/27 14:17:14   编辑:更多Linux
  下面的內容要求具有對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 互換源和目的地址以後重新傳輸該數據報



Copyright © Linux教程網 All Rights Reserved