iptables和netfilter

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地址

相關文章
相關標籤/搜索