iptables使用方法

iptables規則編寫的通用格式:
        iptables [-t table] COMMAND CHAIN [-m matchname] [per-match-options] -j targetname [per-target-options]


-t table:指定選擇執行哪個表的功能,可以選擇的表包括:raw,mangle,nat及filter,如果省略此選項,則表示使用默認表——filter表;

-m matchname:通常是配置顯式擴展的匹配條件時,必須書寫;如果省略則表示要配置基本匹配條件或隱式擴展匹配條件;

-j targetname:指定所有匹配條件的數據包的處理動作;


-t table:

    COMMAND
        鏈:-P, -N, -E, -X, -F
        規則:-A, -I, -D, -Z, -R, -L


    COMMAND:
        鏈的操作命令;

            -P, --policy chain target
                用於定義指定鏈的默認策略;通常有兩種動作選擇,即:ACCEPT和DROP;
            -N, --new-chain chain
                創建一條新的自定義的規則鏈;新建的鏈上的規則必須要被內建鏈上的規則調用才能生效;
            -X, --delete-chain [chain]

                刪除被內建鏈調用次數爲0的自定義鏈;
            -E, --rename-chain old-chain new-chain
                重命名被內建鏈調用次數爲0的自定義鏈;
            -F, --flush [chain]
                清除指定鏈(表中所有鏈)上的規則;

        規則的操作命令:
            -A, --append chain rule-specification
                在指定的鏈的末尾追加一條規則;
            -D, --delete chain rule-specification
            -D, --delete chain rulenum
                從指定的鏈上刪除一條規則,可以指明具體規則,也可以指明規則在鏈上的編號;
            -I, --insert chain [rulenum] rule-specification
                在指定的鏈上插入一條規則,默認是將新規則插入至鏈的第一條規則,也可以指定規則編號,是的插入的規則稱爲指定鏈上的第rulenum條規則;
            -R, --replace chain rulenum rule-specification
                用命令行中的規則替換指令鏈上的第rulenum條規則;並不是修改規則中某個具體條件,而是完全替換整條規則;
             -L, --list [chain]
                列表顯示指定表指定鏈(所有鏈)上的所有規則;
                    可以使用的其他常用選項:
                        -v, --verbose:顯示更詳細格式的信息,還有-vv;
                        -n, --numeric:將規則中的所有信息都進行數字化顯示;包括主機名和端口號等信息;
                        -x, --exact:精確的顯示計數器的結果;
                            每個規則都有兩個計數器:
                                1.規則所匹配的報文的個數;
                                2.規則所匹配的報文的字節總數;
             --line-numbers:顯示指定鏈上各個規則的編號;

        其他的命令:
            -Z, --zero [chain [rulenum]]
                將指定鏈的規則計數器置0;

-m matchname:

    -p {tcp|udp|ip|icmp}
        multiport --dports --sports --ports
        iprange
        time
        connlimit
        limit
        state
        mac
        string

    顯示擴展(multiport擴展、iprange擴展、string擴展、time擴展、state擴展、mac擴展、connlimit擴展、limit擴展)


        1.multiport擴展:
                            一次性的寫入多個離散端口或多組連續端口,最大的上限15組端口,每一個端口範圍佔用兩個端口;
                            可以支持的協議:tcp, udp, udplite, dccp, sctp.
                            相關選項:
                                [!] --source-ports,--sports port[,port|,port:port]...
                                [!] --destination-ports,--dports port[,port|,port:port]...
                                [!] --ports port[,port|,port:port]...

                                --dports 22,80,3306 -j ACCEPT

                                示例:
                                    ~]# iptables -I FORWARD -s 192.168.100.100 -d 172.16.69.2 -p tcp -m multiport --dports 22,80,3306 -j ACCEPT
                                    ~]# iptables -I FORWARD -d 192.168.100.100 -s 172.16.69.2 -p tcp -m multiport --sports 22,80,3306 -j ACCEPT

                        2.iprange擴展:
                            以連續的任意數量的IP地址訪問作爲匹配條件;
                            相關選項:
                                [!] --src-range from[-to]
                                [!] --dst-range from[-to]

                                -m iprange --src-range 192.168.100.1-192.168.100.100

                                示例:
                                    ~]# iptables -I FORWARD -m iprange --src-range 192.168.100.1-192.168.100.100 -d 172.16.69.2 -p tcp -m multiport --dports 22,80,3306 -j ACCEPT
                                    ~]# iptables -I FORWARD -m iprange --dst-range 192.168.100.1-192.168.100.100 -s 172.16.69.2 -p tcp -m multiport --sports 22,80,3306 -j ACCEPT

                        3.string擴展:
                            對數據報文中的應用層數據做字符串匹配檢測;
                                相關選項:
                                    --algo {bm|kmp}
                                    --string "STRING"

                                示例:
                                    ~]# iptables -I FORWARD -s 172.16.69.2 -m string --algo bm --string "dafa" -j REJECT

                        4.time擴展:
                            根據報文到達防火牆本機的時間與指定的時間範圍進行匹配檢測;
                                相關選項:
                                    --datestart YYYY[-MM[-DD[Thh[:mm[:ss]]]]]
                                    --datestop YYYY[-MM[-DD[Thh[:mm[:ss]]]]]
                                        定義唯一一個絕對的時間範圍;

                                    --timestart hh:mm[:ss]
                                    --timestop hh:mm[:ss]
                                        定義一個週期性的時間範圍;

                                    [!] --monthdays day[,day...]
                                        定義每個月中各個天;取值1-31

                                    [!] --weekdays day[,day...]
                                        定義每個星期中的星期幾;
                                        取值:Mon, Tue, Wed, Thu, Fri, Sat, Sun, or values from 1 to 7, or Mo, Tu, etc.

                                示例:
                                    ~]# iptables -I FORWARD -m time --timestart 08:00:00 --timestop 17:59:59 ! --weekdays 6,7 -o eno16777736 -j REJECT

                        5.state擴展
                            連接狀態檢測;基於連接追蹤機制實現;
                            conntrack

                            相關選項:
                                [!] --state state

                            iptables對連接狀態的定義:
                                INVALID, ESTABLISHED, NEW, RELATED or UNTRACKED;

                                INVALID:無法識別的連接狀態,無效的通信狀態; SYN,FIN
                                ESTABLISHED:已經建立連接的狀態;連接態;
                                NEW:尚未建立連接的狀態;新連接態;
                                RELATED:與其他已經建立的連接有相互關聯的連接狀態;關聯態或衍生態;
                                UNTRACKED:未追蹤的狀態;

                            內核中用於保存連接追蹤狀態數據的位置:/proc/net/nf_conntrack

                            能夠被追蹤到的最大的連接數:/proc/sys/net/nf_conntrack_max
                                注意:此處記錄的最大連接數的數值,建議必要時可以調整其大小到足夠大;

                            爲了能夠儘可能的高效利用內存資源,緩存的連接追蹤的狀態不能無限期保存,因此設置了相應的超時時間;
                                /proc/sys/net/netfilter/nf_conntrack*timeout*

                        利用連接追蹤設置FTP服務器的訪問控制:
                            ~]# iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
                            ~]# iptables -A INPUT -d 172.16.69.2 -p tcp -m multiport --dports 21,22,80,3306 -m state --state NEW -j ACCEPT
                            ~]# iptables -A INPUT -j DROP

                            注意:需要裝載nf_conntrack_ftp內核模塊;
                                ~]# modprobe nv_conntrack_ftp

                                設置nf_conntrack_ftp模塊的自動裝載:
                                    設置/etc/sysconfig/iptables-config
                                    IPTABLES_MODULES="nf_conntrack_ftp"

                        利用連接追蹤可以設置OUTPUT鏈上的通用規則:
                            ~]# iptables -A OUTPUT -m state --state ESTABLISHED -j ACCEPT
                            ~]# iptables -A OUTPUT -j DROP


                        6.mac擴展
                            實現mac地址匹配檢測;用於PREROUTING, FORWARD or INPUT鏈;

                            相關選項
                                [!] --mac-source address
                                    匹配源mac地址;其形式必須是:XX:XX:XX:XX:XX:XX

                        7.connlimit擴展:
                            根據每個客戶端IP地址做併發連接數的匹配檢測;
                            
                            相關選項:
                                --connlimit-upto n
                                    當客戶端當前的併發連接數小於或等於n時,可以匹配此條件;此條件通常和ACCEPT動作配合使用;

                                --connlimit-above n
                                    當客戶端當前的併發連接數大於n時,可以匹配此條件;此條件通常和DROP或REJECT動作配合使用;

                        8.limit擴展:
                            基於服務器端收發數據報文的速率來進行匹配檢測;

                            相關選項:
                                --limit rate[/second|/minute|/hour|/day]
                                    服務器端最大單位時間內能夠接收的報文速率;

                                --limit-burst number
                                    初始時所能接收的數據報文的最大數量;


    隱式擴展

        -p {tcp|udp|icmp}
           tcp: --sport, --dport, --tcp-flags, --syn
               --syn === --tcp-flags SYN,RST,ACK,FIN SYN
           udp:--sport, --dport
           icmp:--icmp-type {echo-request(8) | echo-reply(0)}

       tcp協議(tcp模塊):
                                [!] --source-port,--sport port[:port]
                                [!] --destination-port,--dport port[:port]
                                    用於指定源端口和/或目標端口的匹配條件;每次只能指定一個端口或一組連續的端口範圍,而不能指定離散端口;

                                [!] --tcp-flags mask comp
                                    用於指定在TCP協議首部中各標誌位的匹配條件;
                                        URG, SYN, RST, PSH, ACK, FIN, ALL, NONE

                                        mask:設定要檢測的標誌位的列表,各標誌位之間使用","進行分隔;

                                        comp:必須被置"1"的標誌位列表,剩餘的在mask列表中的標誌位必須置"0";
                                [!] --syn
                                    相當於:--tcp-flags SYN,RST,ACK,FIN SYN

                            udp協議(udp模塊):
                                [!] --source-port,--sport port[:port]
                                [!] --destination-port,--dport port[:port]
                                    用於指定源端口和/或目標端口的匹配條件;每次只能指定一個端口或一組連續的端口範圍,而不能指定離散端口;

                            icmp協議(icmp模塊):
                                [!] --icmp-type {type[/code]|typename}
                                    常用的icmp-type:
                                        echo-request,代碼爲8;
                                        echo-reply,代碼爲0;


-j targetname:指定所有匹配條件的數據包的處理動作;

    ACCEPT
    DROP
    REJECT
    SNAT --to-source ipaddr[:port]
    MASQUERADE
    DNAT --to-destination ipaddr[:port]
    REDIRECT --to-ports port
    LOG --log-level --log-prefix
    RETURN


            常用的TARGETS:
                LOG:對於匹配的數據報文的流動情況進行日誌記錄,並不會影響數據報文本身的傳輸;
                MARK:對於匹配的數據報文進行防火牆標記的設置;
                MASQUERADE:源地址僞裝,一種特殊的源IP地址轉換;
                REDIRECT:目標IP地址和端口的重定向;
                REJECT:阻止數據報文傳輸並向數據報文的源頭返回消息;
                SNAT:源IP地址轉換;
                DNAT:目標IP地址轉換;
                ACCEPT:對於匹配的數據報文進行放行;
                DROP:對於匹配的數據報文進行阻止;
                RETURN:在規則鏈之間跳轉



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