linux下的防火牆(iptables / netfilter)--我的學習記錄

什麼是防火牆?

    工作於主機或網絡的邊緣,對於進出的報文根據事先定義的規則作檢查,將那些能夠被規則所匹配到的報文作出相應處理的組件。


centos6.6上的防火牆組件:

    netfilter:過濾器,內核中工作在tcp/ip網絡協議棧上的框架


    iptables:過濾規則的編寫工具,定義的規則通過內核接口直接送至內核,立即生效,但不會永久有效;果期望有永久有效,需要保存至配置文件中,此文件還開機時加載和由用戶手工加載;iptables可以自動實現規則語法檢查。


netfilter在TCP/IP協議棧上定義了5個卡點(鉤子函數)來控制報文:

    

 hooks function(鉤子函數): 

     prerouting: 進入本機後路由功能發生之前

     input:到達本機內部

     output: 由本機發出

     forward: 由本機轉發

     postrouting:路由功能發生之後,即將離開本機之前


    根據報文的分類,要經過的卡點如下:

    到本機內部:prerouting,input
    由本機發出:output,postrouting
    由本機轉發:prerouting,forward,postrouting


功能表:

    過濾功能:filter表

            卡點:input ,forward,output

    

    修改功能:net表:修改報文的源地址和目標地址。

            卡點:prerouting,output,postrouting

            mangle表:修改報文IP,TCP報文首部的某些信息。

            卡點:prerouting,postrouting,input,output,forward

    

    追蹤功能:raw表

            卡點:prerouting,output


    優先級(由高到低):raw --> mangle --> nat --> filter(最常用)



基本格式:

    iptables [-t TABLE] SUBCOMMAND CHAIN CRETERIA -j TARGET

        -t TABLE:

            默認爲filter, 共有filter, nat, mangle, raw四個可用;


SUBCOMMAND(子命令):

    wKioL1VcAi-SyZtQAAHzR1xCaZ4155.jpgwKiom1VcBWygd7WKAAB8bBWuROY484.jpgwKiom1VcBYbDMEETAAD8aA4NakI832.jpg

CRETERIA: 匹配條件

wKiom1VcBEqgncahAAFhyLWukQ0900.jpg

擴展匹配:

    隱式擴展:如果在通用匹配上使用-p選項指明瞭協議的話,則使用-m選項指明對其協議的擴展就變得可有可無了;    

        tcp: 

             --dport PORT[-PORT]

             --sport

             --tcp-flags LIST1 LIST2

                 LIST1: 要檢查的標誌位;

                 LIST2:在LIST1中出現過的,且必須爲1標記位;而餘下的則必須爲0; 

                  例如:--tcp-flags syn,ack,fin,rst syn

                  --syn:用於匹配tcp會話三次握手的第一次;

         udp:

              --sport

              --dport

         icmp:

              --icmp-types

                  8: echo request

                  0:echo reply

    顯式擴展:必須指明使用的擴展機制;

         -m 模塊名稱(每個模塊會引入新的匹配機制);

        

         想知道有哪些模塊可用:

         rpm -ql iptables

        小寫字母,以.so結尾;


    multiport擴展:以離散定義多端口匹配;最多指定15個端口;

     專用選項:

         --source-ports, --sports PORT[,PORT,...]

         --destination-ports, --dports PORT[,PORT,...]

         --ports PORT[,PORT,...]

    

     例子:

     iptables -I INPUT 1 -d 172.16.100.11 -p tcp -m multiport --dports 22,80,443 -j ACCEPT

     iptables -I OUTPUT 1 -s 172.16.100.11 -p tcp -m multiport --sports 22,80,443 -j ACCEPT


    iprange擴展:指定連續的ip地址範圍;在匹配非整個網絡地址時使用;


     專用選項:

         [!] --src-range IP[-IP]

         [!] --dst-range IP[-IP]


     示例:

     iptables -A INPUT -d 172.16.100.11 -p tcp --dport 23 -m iprange --src-range 172.16.100.1-172.16.100.100 -j ACCEPT

     iptables -A OUTPUT -s 172.16.100.11 -p tcp --sport 23 -m iprange --dst-range 172.16.100.1-172.16.100.100 -j ACCEPT


    string擴展:檢查報文中出現的字符串,與給定的字符串作匹配;

     專用選項:

         --algo {kmp|bm}    :兩種字符串匹配算法

         --string "STRING"

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

     示例:

     iptables -I OUTPUT 1 -s 172.16.100.11 -p tcp --sport 80 -m string --string "sex" --algo kmp -j REJECT


    time擴展:基於時間區間做訪問控制

     專用選項:

         --datestart YYYY[-MM][-DD][hh[:mm[:ss]]]  :開始日期

         --dattestop :停止日期

         --timestart:開始時間

         --timestop:停止時間

         --weekdays DAY1[,DAY2,...]:控制每週的周幾

     示例:

     # iptables -R INPUT 1 -d 172.16.100.11 -p tcp --dport 80 -m time --timestart 08:30 --timestop 18:30 --weekdays Mon,Tue,Thu,Fri -j REJECT


    connlimit擴展:基於連接數作限制;對每個IP能夠發起的併發連接數作限制;

     專用選項:

          --connlimit-above [n]

     示例:

     # iptables -I INPUT 2 -d 172.16.100.11 -p tcp --dport 22 -m connlimit --connlimit-above 5 -j REJECT


    limit擴展:基於發包速率作限制;

     專用選項:令牌桶算法

         --limit  n[/second|/minit|/hour|/day]

         --limit-burst n

     示例:        

     iptables -R INPUT 3 -d 172.16.100.11 -p icmp --icmp-type 8 -m limit --limit 10/minute --limit-burst 5 -j ACCEPT


TARGET:

     -j: jump,跳轉目標

         內置目標:

              ACCEPT:接受

              DROP:丟棄

              REJECT:拒絕    

              自定義鏈:

    

    未完。。。。。

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