iptables原理及應用

IPTABLES

       基於內核的防火牆,裏面有raw,mangle,net,filter四個表,它們的優先級依次降低,也就是raw最高,匹配的時候是從raw開始的

 

1,     iptables有四張表

   raw,mangle,net,filter

 

2,規則鏈-chain

存放防火牆規則的地方

默認有五種規則鏈:

→ PREROUTING:路由選擇之前處理

→ FORWARD:處理轉發的數據包

→ INPUT:處理入站的數據包

OUTPUT:處理出站的數據包

→ POSTROUTING:路由選擇之後處理

3,表和規則鏈對應的關係:

   filter :INPUT,FORWARD, OUTPUT

      nat   : PREROUTING(DNAT), POSTROUTING(SNAT),OUTPUT

      mangle : PREROUTING, POSTROUTING, FORWARD, INPUT,OUTPUT

      raw   : PREROUTING, OUTPUT


4,數據報文流程:

跟本機內部進程通信:

進入:PREROUTING,INPUT

出去:OUTPUT, POSTROUTING


5,基本語法:

            iptables [-t TABLE] COMMANDCHAIN  CRETIRIA -j TARGET

             iptables [ -t 表名 ] 選項 [ 鏈名 ] [ 條件 ] [ -j 目標操作 ]

 

          鏈:

                    -Fflush, 清空規則鏈;

                    -Nnew, 自建一條鏈

                    -X: delete, 刪除一條自定義的空鏈

                    -Zzero,計數器歸零

                                     -Ppolicy,設置默認策略,對filter表來講,默認規則爲ACCEPTDROP

                             -E:重命名自定義鏈

 

      表:-t TABLE:

                     nat, mangle, raw, filter

         不指定表的時候默認爲filter

         不指定鏈,默認爲對應表的所有鏈

                除非設置默認策略,否則必須指定匹配條件

                 選項/鏈名/目標操作用大寫字母,其餘都小寫

 

        鏈中的規則:

                -A 在鏈尾增加一條規則

                -I  在鏈頭增加一條規則,或者指定序號增加

                -D  刪除鏈內指定序號(或內容)的一條規則

                -R  替換一條規則

 

       

            查詢:

                -L

                    -n:數字格式顯示主機地址和端口;

                    -v:詳細格式,-vv,-vvv

                    --line-numbers:顯示規則編號

 

pkts bytes  target    prot opt in        out         source  destination           

包數 字節數 目標     協議  流入的接口  流出的接口   源地址       目標地址

                   

              -x: exactly,不要對計數器的計數結果做單位換算,而顯示其精確值



匹配條件:

通用匹配

-s 地址:指定報文源IP地址匹配的範圍;可以是IP,也可以是網絡地址;可使用!取反;--src, --source

-d 地址:指定報文目標IP地址匹配的範圍;--dst,--destination

-p 協議:指定匹配報文的協議類型,一般有三種tcp, udpicmp;

-iINTERFACE: 數據報文流入的接口;PREROUTING,INPUT, FORWARD

-o INTERFACE: 數據報文流出的接口;OUTPUT,FORWARD, POSTROUITING


擴展匹配

隱式擴展:當使用-p{tcp|udp|icmp}中的一種時,可以直接使用擴展專用選項;

                                                -ptcp:

                                            --sport PORT[-PORT]: 指定源端口

                                                 --dport PORT[-PORT]: 指定目標端口

                                                 --tcp-flags


                                                -pudp:

                                                         --sport

                                                         --dport

                                                         -p icmp [-m icmp]

                                                         --icmp-type

                                                                   0:echo-reply, ping響應

                                                                   8:echo-request, ping請求


顯式擴展:必須明確說明使用哪個模塊進行擴展,而後才能使用其擴展專用選項;

                                                -mstate –state

                                               multiport: 多端口匹配

可用於匹配非連續或連續端口;最多指定15個端口

                         --source-ports, --sportsport[,port,port:port]

                                                         --destination-ports,--dports

                                                         --ports

例:

# iptables -I INPUT -d 172.16.31.30 -p tcp -m multiport--dports 22,80 -j ACCEPT

        # iptables -IOUTPUT -s 172.16.31.30 -p tcp -m multiport --sports 22,80 -j ACCEPT

 

                     iprange: 匹配指定範圍內的地址;匹配一段連續的地址而非整個網絡時有用;

                           取反([!] --src-ragneIP[-IP]

取反([!] --dst-range

 

  例:# iptables -A INPUT -d 172.16.31.30 -p tcp --dport 23-m iprange --src-range 172.16.31.30-172.16.31.100 -j ACCEPT

         # iptables -AOUTPUT -s 172.16.31.30 -p tcp --sport 23 -m iprange --dst-range 172.16.31.1-172.16.31.100-j ACCEPT

   

              string:字符串匹配,能夠檢測報文應用層中的字符串

             --algo {kmp|bm}

                             --string"STRING"

                             --hex-string"HEX_STRING": HEX_STRING爲編碼成16進制格式的字串;

例:# iptables -I OUTPUT -m string --algo kmp --string"hello" -j DROP

 

           time: 基於時間做訪問控制

                --datestartYYYY[-MM][-DD[Thh[:mm[:ss]]]]

                                       --datestop

--timestart hh:mm[:ss]

                                  --timestop hh:mm[:ss]

--weekdays day[,day]

                                                             Mon, Tue,

例:# iptables -I INPUT -d 172.16.31.30 -p tcp --dport 80-m time --timestart 08:00 --timestop 18:00 --weekdays Mon,Tue,Thu,Fri -j REJECT

 

         connlimit: 連接數限制,對每IP所能夠發起併發連接數做限制

                  [!] --connlimit-above [n]

例:iptables -A INPUT -d 172.16.100.7 -p tcp --dport 22 -mconnlimit --connlimit-above 2 -j DROP

 

        limit: 速率限制

              --limitn[/second|/minute|/hour|/day]

                              --limit-burst n

例:# iptables -A INPUT -d 172.16.100.7 -p icmp --icmp-type8 -m limit --limit 20/minute --limit-burst 5 -j ACCEPT

 

        state: 狀態檢查

            --state

例:iptables -A INPUT -m state--state NEW -p tcp ! --syn -j DROP

 

       iptables狀態跟蹤

           NEW,請求建立連接的包、完全陌生的包

                 ESTABLISHED,將要或已經建立連接的包

                 RELATED,與已知某個連接相關聯的包

                 INVALID,無對應連接,以及連接無效的包

                  UNTRACKED,未跟蹤狀態的包

 

            SNAT源地址轉換

                  做完路由選擇後,針對來自局域網、即將從外網接口發出去的數據包,將其源IP地址修改爲公網地址

例:# iptables -t nat -A POSTROUTING -s 172.16.0.0/16 -o eth1 -j SNAT --to-source 1.1.1.1

          MASQUERADE --- 地址僞裝

                  外網接口的IP地址不固定的情況

               將SNAT規則改爲MASQUERADE

               對於ADSL撥號連接

         例:iptables -t nat -A POSTROUTING -s 172.16.0.0/24 -o eth1 -jMASQUERADE

 

 

                     DNAT目標地址轉換

       例:宣佈WEB

            # iptables-t nat -A PREROUTING -i eth1 -d 1.1.1.1 -p tcp --dport 80 -j DNAT--to-destination 172.16.31.30

     

            開機後自動加載已保存的規則
                                       # iptables-save > /etc/sysconfig/iptables

 

 


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