iptables 學習筆記

                               iptables 學習筆記web

1. ipatales表:
  filter: 用於過濾的時候。
  nat   : 用於作NAT的時候。
  mangle: 用於修改封包內容。
   鏈: 
   INPUT:      位於filter表,匹配目的ip是本機的數據包
   FORWARD:    位於filter表,匹配穿過本機的數據包。
   PREROUTING:位於nat表,用於修改目的地址(DNAT)
   POSTROUTING:位於nat表,用於修改源地址(SNAT)
2.iptables語法格式:
   iptables [-t 要操做的表]<操做命令>[要操做的鏈][規則號碼][匹配條件][-j匹配到之後的動做]
【操做命令】:( -A -I -D -R -P -F)
   查看命令(-[vnx]L)
   (1)-A <鏈名>
        APPEND,追加一條規則(放到最後)
        例:iptables -t filter -A INPUT  -j DROP
   (2)-I<鏈名>[規則號碼]
    INSERT,插入一條規則
        例:iptables -I INPUT -j DROP #在filter表的INPUT 鏈裏插入一條規則(插入成第一條)
            iptables -I INPUT 3 -j DROP #在filter鏈裏插入一條規則(插入成第三條)
   (3)-D<鏈名><規則號碼|具體規則內容>
        DELETE,刪除一條規則
        例:iptables -D INUT 3 #刪除filter表INPUT鏈中的第三條規則(無論它的內容是什麼)
            iptables -D INPUT -s 192.168.0.2 -j DROP (按內容匹配)#刪除filter表INPUT鏈中的內容"-s 192.168.0.2 -j DROP"的規則
   (4)-R <鏈名><規則號碼><具體規則內容>
        REPLACE,替換一條規則
        例; iptables -R INPUT 3 -j ACCEPT
   (5)-P <鏈名><動做> POLICY ,設置某個鏈的默認規則
        例:iptables -P INPUT DROP #設置filter表INPUT 鏈的默認規則DROP
    (6)-F[鏈名]FLUSH,清空規則
        例; iptables -F INPUT #清空filter 表INPUT鏈中的全部規則
        iptables -t nat -F PREROUTING #清空nat表PREROUTING鏈中的全部規則
   (6)-L[鏈名]LIST,列出規則
        v:顯示詳細信息,包括每條規則的匹配包數量和匹配字節數。
        x:在v的基礎上,禁止自動單位換算(k,M)
        n:只顯示ip地址和端口號碼,不顯示域名和服務名稱。
        例:iptables -L #粗略出filter表全部鏈全部規則。
          iptables -t nat -vnL #用詳細方式列出nat表全部鏈的全部規則,只顯示ip地址和端口號
          iptables -t nat -vxnL PREROUTING #用詳細方式列出nat表PREROUTING鏈的全部規則以及詳細數字
【匹配條件】
       匹配條件:
               流入,流出接口 (-i ,-o)
               來源,目的地址 (-s,-d)
               協議類型       (-p)
               來源,目的端口(--sport,--dport)
   (1),按網絡接口匹配
          -i <匹配數據進入網絡接口>
        例: iptables -A INPUT -i eth0 -j ACCEPT
             iptables -A INPUT -i eth0 -s 192.168.100.1  -j ACCEPT #容許這個網段數據從eth0 進入
   (2),按源地址目的地址匹配
             -s<匹配來源地址>
              能夠是IP ,NET,DOMAIN,也能夠(任何地址)
        例:iptables -A INPUT -s 192.168.10.0/24 -j ACCEPT         #容許來自這個網段的數據進入
              -d<匹配目的地址>
               可使IP ,NET,DOMAIN,也能夠空
        例:iptables -A INPUT -d 192.168.10.1 -j DROP             #拒絕去往這個網段的數據包
   (3)按協議類型匹配    
            -p <匹配協議類型>
                可使TCP,UDP,ICMP等,能夠是空
             -p    tcp
             -p    udp
             -p    icmp    --icmp-type 類型
        例:iptables -A INPUT -s 192.168.1.0/24 -p tcp -j ACCEPT   #容許來源這個網段的數據用tcp傳輸數據
   (4)按來源目的的端口匹配
           --sport<匹配源端口> 能夠是個別端口,能夠是端口範圍
           --sport 1000                 匹配源端口是1000的數據包
           --sport 1000:2000            匹配端口1000-2000的數據包(含1000,3000)
           --sport :3000                匹配源端口3000如下的數據包(含3000)
           --sport 1000:               匹配源端口是1000如下的數據包(1000)
             
        例: iptables -A INPUT -s 192.168.11.0/24 -p tcp --sport 1000 -j ACCEPT   #容許來源這個網段的數據使用tcp的1000端口上傳輸數據      
            iptables -A INPUT -s 192.168.33.0/24 -p tcp --sport 1000:2000 -j ACCEPT
            --dport<匹配目的的端口>能夠是個別端口,也能夠是端口範圍
            --dport 80                  匹配目的端口是80的數據包
            --dport 1000:2000           匹配目的端口是1000-2000的數據包(含1000,2000)
            --dport :3000               匹配目的端口是3000如下的數據包(含3000)
            --dport 1000:               匹配目的的端口是1000如下的數據包(含1000)
        例: iptables -A INPUT -s 192.168.6.0/24 -p tcp --dport 80 -j ACCEPT    #容許去往這個網段的數據使用tcp的80端口上傳輸數據
           注意: --sport 和 --dport 必須配合-p參數使用
【動做(處理方式)】
             動做:ACCEPT,DROP,SNAT,DNAT,MASQUERADE
    (1)-j ACCEPT     經過,容許數據包經過本鏈
      例: iptabes -A INPUT -j ACCEPT  #容許全部訪問本機ip的數據包經過
    (2)-j DROP 丟棄,阻止數據包經過本鏈而丟棄
      例: iptables -A FORWARD -s 192.168.69.34 -j DROP
    (3)-j DNAT
            -j DNAT --to IP[-IP][:端口-端口](nat表的PREROUTING鏈)
        #目的地址轉換,DNAT 支持轉換單ip,也支持轉換到IP地址池(一組連續的IP地址) 
            例: 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
    (4)-j SNAT
          -j SNAT --to IP[-IP][:端口-端口](nat表的POSTROUTING鏈)
       源地址轉換,SNAT支持轉換單ip,也支持轉換到ip地址池(一組連續的IP地址)
          例:iptables -t nat -A POSTROUTING -s 192.168.0.0/24 -j SNAT --to 192.168.8.1 #將內網192.168.0./24 的源地址改成192.168.8.1 ,用於NAT
             iptables -t nat -A POSTROUTING -s 192.168.0.0/24 -j SNAT --to 1.1.1.1-1.1.1.10
    (5)-j MASQUERADE  #動態源地址轉換(動態ip的狀況下使用)
        例:iptables -t nat -A POSTROUTING -s 192.168.0.0/24 -j MASQUERADE #將源地址192.168.0.0/24的數據包進行地址假裝
【附加模塊】
             1.按包狀態匹配(state)
             2.按來源MAC匹配(mac)
             3.按包速率匹配(limit)
      4.多端口匹配(multiport)
   (1)state
    -m state --state 狀態
    狀態: NEW ,RELATED,ESTABLISHED,INVALID
          NEW:有別於tcp的syn
          ESTABLISHED:鏈接態
          RELATED:衍生態,與conntrack關聯(FTP)
          INVALID:不能被識別屬於哪一個鏈接或沒有任何狀態
      例: iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
   (2)mac
     -m mac --mac-source MAC #匹配某個MAC地址
      例:iptables -A FORWARD -m mac --mac-source xx:xx:xx:xx:xx:xx -j DROP #阻斷來自某個MAC地址的數據包,經過本機。
      注意:報文通過路由後,數據包中原有的mac信息會被替換,因此在路由後iptables中使用mac模塊式沒有意義的。
    (3)limit
     -m limit --limit 匹配速率[--burst緩衝數量]用必定速率去匹配數據包
      例: iptables -A FORWARD -d 192.168.0.1 -m limit --limit 50/s -j ACCEPT
          iptables -A FORWARD -d 192.168.0.1 -j DROP
      注意: limit 英語上看是限制的意思,但實際上只是按必定速率去匹配而已,要想限制的話後面再跟一條DROP
     (4)multiport
       -m mutiport <--sports|--dports|--ports>端口1[端口2,..端口n] #一次性匹配多個端口,能夠區分源端口,目的端口或不指定端口
       例: iptables -A INPUT -p tcp -m multiport --dports 21,22,25,80,110 -j ACCEPT
       注意: 必須與-p參數一塊兒使用
【實例分析】
          1.單服務器的防禦
          2.如何作網關
          3.如何限制內網用戶
          4.內網如何作對外服務器
          5.鏈接追蹤模塊
   (1)單服務器的防禦
     弄清對外服務對象
     書寫規則
            網絡接口lo的處理
            狀態監測的處理
            協議+端口的處理
     實例:一個普通的web服務器
           iptables -A INPUT -i lo -j ACCEPT
           iptables -A INPUT -p tcp -m multiport --dports 22,80 -j ACCEPT
           iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
           iptables -P INPUT DROP
       注意:確保規則順序正確,弄清邏輯關係,學會使用-vnL
   (2)如何作網關
        弄清網絡拓撲
        本機上網
        設置nat
               啓用路由轉發
               地址假裝SNAT/MASQUERADE
        實例:ADSL 撥號上網的拓撲
               echo "1" >/proc/sys/net/ipv4/ip_forward
               iptables -t nat -A POSTROUTING -s 192.168.1.0/24 -o ppp0 -j MASQUERADE
   (3)如何限制內網用戶
               過濾位置filer 表FORWARD鏈
               匹配條件 -s -d -p --s/dport
               處理動做 ACCEPT DROP
          實例:
              iptables -A FORWARD -s 192.168.0.8 -j DROP
              iptables -A FORWARD -m mac --mac-source 34:12:44:42:56:23 -j DROP
              iptables -A FORWARD -d bbs.chinaunix.net -j DROP
   (4)內網如何作對外服務器
              服務器協議(TCP/UDP)
              對外服務端口
              內部服務器私網IP
              內部真正服務端口
           實例:
              iptables -t nat -A PREROUTING -i ppp0 -p tcp --dport 80 -j DNAT --to 192.168.1.2
              iptables -t nat -A PREROUTING -i ppp0 -p tcp --dport 81 -j DNAT --to 192.168.1.3:80
   (5)鏈接追蹤模塊
     modprode ip_nat_ftp 
     iptables -A INPUT -p tcp --dport 21 -j ACCEPT
     iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
     iptables -P INPUT DROP 
必添加項:
       echo "1" >/proc/sys/net/ipv4/ip_forward
       echo  "1">/proc/sys/net/ipv4/tcp_syncookies
       echo "1" >proc/sys/net/ipv4/icmp_ignore_bogus_error_responses 
       modprode ip_nat_ftp
相關文章
相關標籤/搜索