netfilter/iptables學習

  1. netfilter/iptables學習 
  2. 1、鏈和表 
  3. 表:filter:用於過濾的時候 
  4.     nat:用於做nat的時候 
  5. 鏈:INPUT:位於filter表,匹配目的IP是本機的數據包 
  6.     FORWARD:位於filter表,匹配穿過本機的數據包 
  7. PREROUTING:位於nat表,用於修改目的地址(DNAT) 
    POSTROUTING:位於nat表,用於修改源地址(SNAT) 
  1. 2、iptables語法結構: 
  2. iptables [-t 要操作的表] <操作命令> [要操作的鏈] [規則號碼] [匹配條件] [-j 匹配到以後的動作] 
  3. 操作命令:(-A -I -D -R -P -F) 
  4. 查看命令:(-[vxn]L) 
  5. -A <鏈名>:APPEND,追加一條規則。 
  6. 如:iptables -t filter -A INPUT -j DROP   在filter表的INPUT鏈中,匹配所有訪問本機IP的數據包,匹配到的丟棄。 
  7.  
  8. -I <鏈名> [規則號碼]:INSERT,插入一條規則 
  9. 如:iptables -I INPUT 3 -j DROP    在filter表的INPUT鏈中插入一條規則,插入成第三條。 -t filter可不寫,默認是filter表 
  10.  
  11. -D  <鏈名> <規則號碼|具體規則內容>:DELETE,刪除一條規則。 
  12. 如:iptables -D INPUT 3    刪除filter表INPUT鏈中第三條規則,不管是啥東東。 
  13.     iptables -D INPUT -s 192.168.0.1 -j DROP   刪除filter表INPUT鏈中匹配“-s 192.168.0.1 -j DROP”規則,不論位置。 
  14.  
  15. -R <鏈名> <規則號碼> <具體規則內容>:REPLACE,替換一條規則 
  16. 如:iptables -R INPUT 3 -j ACCEPT   替換filter表中INPUT鏈的第三條規則內容替換爲"-j ACCEPT" 
  17.  
  18. -P <鏈名> <動作>:POLICY,設置某個鏈的默認規則。 
  19. 如:iptables -P INPUT DROP    設置filter表IPUT鏈的默認規則爲DROP,當數據包未被規則列表中的任何規則匹配到時,按此默認規則處理。*:此處是唯一的匹配動作前不加-j的情況。 
  20.  
  21. -F [鏈名]:FLUSH,清空規則 
  22. 如:iptables -F INPUT     清空filter表INPUT鏈的所有規則。 
  23.     iptables -t nat -F PREROUTING     清空nat表PREROUTING鏈中所有的規則。在設置了默認規則DROP後,使用-F一定要小心。 
  24.  
  25. -L [鏈名]:LIST,列出規則。 
  26.     v:顯示詳細信息,包括每條規則的匹配包數量和匹配字節數。 
  27.     x:在v的基礎上,禁止自動單位換算。(K,M) 
  28.     n:只顯示IP地址和端口號碼,不顯示域名和服務名稱。 
  29. 如:iptables -L   粗略列出filter表所有鏈及所有規則。 
  30.     iptables -t nat -vnL  用詳細方式列出nat表的所有鏈和規則,只顯示IP地址和端口號 
  31.     iptables -t nat -vxnL PREROUTING     用詳細方式列出nat表的PREROUTING鏈的所有規則及詳細數字,不反解。 
  32.  
  33. 3、匹配條件 
  34. 流入、流出接口(-i,-o) 
  35. 來源、目的地址(-s,-d) 
  36. 協議類型(-p) 
  37. 來源、目的端口(--sport,--dport) 
  38.  
  39. (1)、按網絡接口匹配。 
  40. 如:-i eth0    匹配是否從網絡接口eth0進來 
  41.     -o eth0    匹配是否從網絡接口eht0出去 
  42.  
  43. (2)、 
  44. 匹配來源地址: -s [匹配來源地址]  來源地址可以是IP,net,domain,也可以爲空 
  45. 如:-s 192.168.0.1    匹配來自192.168.0.1的數據包。 
  46.     -s 192.168.1.0/24 匹配來自192.168.1.0/24網絡的數據包。 
  47.     -s www.abc.com    匹配來自域名www.abc.com網絡的數據包。 
  48.  -d [匹配目的地址]  目的地址可以使IP,NET,domain,也可以爲空。 
  49. 如:-d 202.131.78.220  匹配去往202.131.78.220的數據包。 
  50.     -d 202.131.0.0/16  匹配去往202.131.0.0/16網絡的數據包。 
  51.     -d www.abc.com     匹配去往域名www.abc.com的數據包。 
  52.  
  53. (3)、按協議類型匹配。 
  54. -p <匹配協議類型>  協議類型可以是tcp,udp,icmp等,也可以爲空。 
  55. 如:-p tcp 
  56.     -p udp 
  57.     -p icmp --icmp-type 類型 
  58.  
  59. (4)、按來源目的端口匹配。 
  60.  --sport <匹配源端口>    源端口可以是個別端口,也可以是端口範圍。 
  61. 如:--sport 1000        匹配源端口是1000的數據包。 
  62.     --sport 1000:3000   匹配源端口是1000-3000的數據包(含1000,3000) 
  63.     --sport :3000       匹配源端口是3000以下的數據包(含3000) 
  64.     --sport 1000:       匹配源端口是1000以上的數據包(含1000) 
  65.  --dport <匹配目的端口>   目的端口可以是個別端口,也可以是端口範圍。 
  66. 如:--dport 80           匹配目的端口是80的數據包 
  67.     --dport 6000:8000    匹配目的端口是6000-8000的數據包(包含6000-8000) 
  68.     --dport :3000        匹配目的端口是3000以下的數據包(含3000) 
  69.     --dport 1000:        匹配目的端口是1000以上的數據包(含1000) 
  70. 注:--sport 和 --dport必須配合-p參數使用。 
  71.  
  72. 匹配應用舉例: 
  73. -p udp --dport 53           匹配網絡中目的端口是53的udp協議數據包 
  74. -s 10.1.0.0/24 -d 172.17.0.0/16      匹配來自10.1.0.0/24去往172.17.0.0/16的所有數據包 
  75. -s 192.168.0.1 -d www.abc.com -p tcp --dport 80     匹配來自192.168.0.1,去往www.abc.com的80端口的tcp協議數據包。 
  76. 條件越多,匹配越細緻,匹配範圍越小。 
  77.  
  78. 4、動作 
  79. ACCEPT 
  80. DROP 
  81. SNAT 
  82. DNAT 
  83. MASQUERADE 
  84.  
  85. -j ACCEPT  通過,允許數據包通過本鏈而不攔截它。 
  86. 如:iptables -A INPUT -j ACCEPT   允許所有訪問本機的IP數據包通過。類似cisco中ACL裏面的permit 
  87.  
  88. -j DROP    丟棄,阻止數據包通過本鏈而丟棄它。類似cisco中ACL裏面的deny 
  89. 如:iptables -A FORWARD -s 192.168.80.39 -j DROP    阻止來源地址爲192.168.80.39的數據包通過本機。 
  90.  
  91. -j DNAT --to IP[-IP] [:端口-端口] (nat表的PREROUTING鏈)    目的地址轉換。DNAT支持轉換爲單IP,也支持轉換到IP地址池(一組連續的IP地址) 
  92. 如:iptables -t nat -A PREROUTING -i ppp0 -p tcp --dport 80 -j DNAT --to 192.168.0.1    把從ppp0進來的藥訪問tcp/80的數據包目的地址轉爲192.168.0.1 
  93.     iptables -t nat -A PREROUTING -i ppp0 -p tcp --dport 81 -j DNAT --to 192.168.0.2:80 
  94.     iptables -t nat -A PREROUTING -i PPP0 -P tcp --dport 80 -j DNAT --to 192.168.0.1-192.168.0.10 
  95.  
  96. -j SNAT --to IP[-IP] [:端口-端口](nat表中的POSTROUTING鏈)    源地址轉換。SNAT支持轉換爲單IP,也支持轉換到IP地址池(一組練習的IP地址) 
  97. 如:iptables -t nat -A POSTROUTING -s 192.168.0.0/24 -j SNAT --to 1.1.1.1    將內網192.168.0.0、24的源地址改爲1.1.1.1,用於nat 
  98.     iptables -t nat -A POSTROUTING -S 192.168.0.0/24 -J SNAT --TO 1.1.1.1-1.1.1.10 
  99.  
  100. -j MASQUERADE       動態源地址轉換。(動態IP的情況下使用) 
  101. 如:iptables -t nat -A POSTROUTING -S 192.168.0.0/24 -j MASQUEREADE    將源地址是192.168.0.0/24的數據包進行地址僞裝。 
  102.  
  103. 5、附加模塊。 
  104. 按包狀態匹配。(state) 
  105. 按來源mac匹配(mac) 
  106. 按包速率匹配(limit) 
  107. 多端口匹配(multiport) 
  108.  
  109. (1)、-m state --state 狀態 
  110. 狀態:NEW、RELATED、ESTABLISHED、INVALID 
  111. NEW:有別於tcp的syn 
  112. ESTABLISHED:連接態。 
  113. RELATED:衍生態,與conntrack關聯(ftp) 
  114. INVALID:不能被識別屬於哪個連接或沒有任何狀態。 
  115. 如:iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT 
  116.  
  117. (2)、-m mac --mac-source MAC    匹配某個MAC地址 
  118. 如:iptables -A FORWARD -m mac --mac-source xx:xx:xx:xx:xx:xx -j DROP    阻斷來自某MAC地址的數據包通過本機。 
  119.   注:報文在經過路由後,數據包中原有的MAC信息會被替換,所以在路由後的iptables中使用mac模塊是沒有意義的。 
  120.  
  121. (3)、-m limit --limit 匹配速率 [--burst 緩衝數量]     用一定的速率去匹配數據包 
  122. 如:iptables -A FORWARD -d 192.168.0.1 -m limit --limit 50m/s -j ACCEPT 
  123.     iptables -A FORWARD -d 192.168.0.1 -j DROP 
  124. 注:limit英語上看是限制的意思,但實際上只是按一定速率去匹配,要想限制的話後面要再跟一條DROP 
  125.  
  126. (4)、multiport 
  127. -m multiport <--sports|--dports|--ports> 端口1[,端口2,..,端口n]  一次性匹配多個端口,可以匹分源端口,目的端口或不指定端口。 
  128. 如:iptables -A INPUT -P tcp -m multiport --dports 21,22,25,80,110 -j ACCEPT   匹配到達本機端口的21,22,25,80,110的數據包通過。 必須於-p參數一起使用。 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章