溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

簡(jiǎn)述iptales四表五鏈及詳細(xì)介紹iptables命令使用方法

發(fā)布時(shí)間:2020-04-08 05:53:04 來(lái)源:網(wǎng)絡(luò) 閱讀:345 作者:不會(huì)運(yùn)維 欄目:系統(tǒng)運(yùn)維

簡(jiǎn)述iptales四表五鏈及詳細(xì)介紹iptables命令使用方法

  1. 簡(jiǎn)述iptables四表五鏈
    (1)四表
       filter:過(guò)濾規(guī)則表,根據(jù)定義的規(guī)則過(guò)濾符合條件的數(shù)據(jù)包
       nat表:network address translation 地址轉(zhuǎn)換規(guī)則表
       mangle:修改數(shù)據(jù)標(biāo)記規(guī)則表
       raw:關(guān)閉nat表上啟動(dòng)的連接跟蹤制,加快封包穿越防火墻的速度

    (2)五chain(鏈)

    INPUT
    OUTPUT
    FORWARD
    PREROUTING
    POSTROUTING

    (3)表<-->鏈的關(guān)系

    raw:PREROUTING, OUTPUT
    mangle:PREROUTING,INPUT,F(xiàn)ORWARD,OUTPUT,POSTROUTING
    nat:PREROUTING,[INPUT,]OUTPUT,POSTROUTING
    filter:INPUT,F(xiàn)ORWARD,OUTPUT

    (4)內(nèi)核中數(shù)據(jù)包的傳輸過(guò)程:

     當(dāng)一個(gè)數(shù)據(jù)包進(jìn)入網(wǎng)卡時(shí),數(shù)據(jù)包首先進(jìn)入 PREROUTING鏈,內(nèi)核根據(jù)數(shù)據(jù)包目的IP判斷是否需要轉(zhuǎn)送出去
     如果數(shù)據(jù)包就是進(jìn)入本機(jī)的,數(shù)據(jù)包就會(huì)沿著圖向下移動(dòng),到達(dá)INPUT鏈,數(shù)據(jù)包到達(dá)INPUT鏈后,任何進(jìn)程都會(huì)收到它。本機(jī)上運(yùn)行的程序可以發(fā)送數(shù)據(jù)包,這些數(shù)據(jù)包OUTPUT鏈,然后到達(dá)POSTROUTING鏈輸出
     如果數(shù)據(jù)包是要轉(zhuǎn)發(fā)出去的,且內(nèi)核允許轉(zhuǎn)發(fā),數(shù)據(jù)包就會(huì)向右移動(dòng),經(jīng)過(guò)FORWARD鏈,然后到達(dá)POSTROUTING鏈輸出
  2. 詳細(xì)介紹iptables命令使用方法:
    (1)規(guī)則格式:
    iptables [-t table] COMMAND chain [-m matchname [per-match-options]] -j targetname [per-target-options]

    -t table:
        raw, mangle, nat, [默認(rèn)為:filter]
    (2)COMMAND:
    (a)鏈管理:
        -N:new, 自定義一條新的規(guī)則鏈;
        -X: delete,刪除自定義的規(guī)則鏈;
                注意:僅能刪除 用戶自定義的 引用計(jì)數(shù)為0的 空的 鏈;
        -P:Policy,設(shè)置默認(rèn)策略;對(duì)filter表中的鏈而言,其默認(rèn)策略有:
               ACCEPT:接受
               DROP:丟棄
               REJECT:拒絕
        -E:重命名自定義鏈;引用計(jì)數(shù)不為0的自定義鏈不能夠被重命名,也不能被刪除;
    (b)規(guī)則管理:
        -A:append,追加;
        -I:insert, 插入,要指明位置,省略時(shí)表示第一條;
        -D:delete,刪除;
            (1) 指明規(guī)則序號(hào);
            (2) 指明規(guī)則本身;
        -R:replace,替換指定鏈上的指定規(guī)則;
    
        -F:flush,清空指定的規(guī)則鏈;
        -Z:zero,置零;
            iptables的每條規(guī)則都有兩個(gè)計(jì)數(shù)器:
                (1) 匹配到的報(bào)文的個(gè)數(shù);
                (2) 匹配到的所有報(bào)文的大小之和;
               (2) 匹配到的所有報(bào)文的大小之和;        
    (c)查看:
    -L:list, 列出指定鏈上的所有規(guī)則;
        -n:numberic,以數(shù)字格式顯示地址和端口號(hào);
        -v:verbose,詳細(xì)信息;
            -vv, -vvv
        -x:exactly,顯示計(jì)數(shù)器結(jié)果的精確值;
        --line-numbers:顯示規(guī)則的序號(hào);
    (3)chain:
    PREROUTING,INPUT,F(xiàn)ORWARD,OUTPUT,POSTROUTING
    (4)匹配條件:
    (a)基本匹配條件:無(wú)需加載任何模塊,由iptables/netfilter自行提供;
           [!] -s, --source  address[/mask][,...]:檢查報(bào)文中的源IP地址是否符合此處指定的地址或范圍;
           [!] -d, --destination address[/mask][,...]:檢查報(bào)文中的目標(biāo)IP地址是否符合此處指定的地址或范圍
             所有地址:0.0.0.0/0
          [!] -p, --protocol protocol
             protocol: tcp, udp, udplite, icmp, icmpv6,esp, ah, sctp, mh or  "all",{tcp|udp|icmp}
          [!] -i, --in-interface name:數(shù)據(jù)報(bào)文流入的接口;只能應(yīng)用于數(shù)據(jù)報(bào)文流入的環(huán)節(jié),
               只能應(yīng)用于PREROUTING,INPUT和FORWARD鏈;
          [!] -o, --out-interface name:數(shù)據(jù)報(bào)文流出的接口;只能應(yīng)用于數(shù)據(jù)報(bào)文流出的環(huán)節(jié),
               能應(yīng)用于FORWARD、OUTPUT和POSTROUTING鏈
    (b)擴(kuò)展匹配條件:
    隱式擴(kuò)展:在使用-p選項(xiàng)指明了特定的協(xié)議時(shí),無(wú)需再同時(shí)使用-m選項(xiàng)指明擴(kuò)展模塊的擴(kuò)展機(jī)制;不需要手動(dòng)加載擴(kuò)展模塊;因?yàn)樗鼈兪菍?duì)協(xié)議的擴(kuò)展,所以,但凡使用-p指明了協(xié)議,就表示已經(jīng)指明了要擴(kuò)展的模塊;
      (1) tcp:
           [!] --source-port, --sport port[:port]:匹配報(bào)文的源端口;可以是端口范圍;
           [!] --destination-port,--dport port[:port]:匹配報(bào)文的目標(biāo)端口;可以是端口范圍;
           [!] --tcp-flags  mask  comp    
                mask is the flags which we should examine,  written as a comma-separated list,例如 SYN,ACK,FIN,RST
                comp is a comma-separated list  of  flags  which must be set,例如SYN
                例如:“--tcp-flags  SYN,ACK,FIN,RST  SYN”表示,要檢查的標(biāo)志位為SYN,ACK,FIN,RST四個(gè),其中SYN必須為1,余下的必須為0;
           [!] --syn:用于匹配第一次握手,相當(dāng)于”--tcp-flags  SYN,ACK,FIN,RST  SYN“;
       (2)udp:
           [!] --source-port, --sport port[:port]:匹配報(bào)文的源端口;可以是端口范圍;
           [!] --destination-port,--dport port[:port]:匹配報(bào)文的目標(biāo)端口;可以是端口范圍;
       (3)icmp:
           [!] --icmp-type {type[/code]|typename}
                echo-request:8
                echo-reply:0
    顯式擴(kuò)展:必須要手動(dòng)加載擴(kuò)展模塊, [-m matchname [per-match-options]];
        (1)multiport
          This  module  matches  a  set  of  source  or  destination  ports. Up  to 15 ports can be specified.  A port range (port:port) counts as two ports.  It can only be used in conjunction with one of the following protocols: tcp,  udp, udplite, dccp and sctp.
          以離散或連續(xù)的 方式定義多端口匹配條件,最多15個(gè);
           [!] --source-ports,--sports port[,port|,port:port]...:指定多個(gè)源端口;
           [!] --destination-ports,--dports port[,port|,port:port]...:指定多個(gè)目標(biāo)端口;
           # iptables -I INPUT  -d 172.16.0.7 -p tcp -m multiport --dports 22,80,139,445,3306 -j ACCEPT
        (2)iprange,指明連續(xù)的(但一般不是整個(gè)網(wǎng)絡(luò))IP地址范圍
          以連續(xù)地址塊的方式來(lái)指明多IP地址匹配條件;
           [!] --src-range from[-to]
           [!] --dst-range from[-to]
           # iptables -I INPUT -d 172.16.0.7 -p tcp -m multiport --dports 22,80,139,445,3306 -m iprange --src-range 172.16.0.61-172.16.0.70 -j REJECT
        (3)mac擴(kuò)展
           指明源MAC地址
           適用于:PREROUTING,FORWARD,INPUT chains
           [!]--mac-source XX:XX:XX:XX:XX:XX
         (4)time擴(kuò)展
            This  matches  if the packet arrival time/date is within a given range.
             --timestart hh:mm[:ss]
             --timestop hh:mm[:ss]
             [!] --weekdays day[,day...]
             [!] --monthdays day[,day...]
             --datestart YYYY[-MM[-DD[Thh[:mm[:ss]]]]] 
             --datestop YYYY[-MM[-DD[Thh[:mm[:ss]]]]]
             --kerneltz:使用內(nèi)核配置的時(shí)區(qū)而非默認(rèn)的UTC;
         (5)string擴(kuò)展  
            This modules matches a given string by using some pattern matching strategy.
            --algo {bm|kmp} 字符匹配算法
            [!] --string pattern  要檢測(cè)的字符串模式
            [!] --hex-string pattern 要檢測(cè)字符串模式,16機(jī)制格式
           --from offset 開(kāi)始偏移
           --to offset  結(jié)束偏移
           ~]# iptables -I OUTPUT -m string --algo bm --string "gay" -j REJECT
        (6)connlimit:根據(jù)每客戶端IP做并發(fā)連接數(shù)數(shù)量匹配
                    可防止CC(Challenge Collapsar挑戰(zhàn)黑洞)
          Allows  you  to  restrict  the  number  of parallel connections to a server per client IP address (or client address block).
          --connlimit-upto n:連接的數(shù)量小于等于n時(shí)匹配
          --connlimit-above n:連接的數(shù)量大于n時(shí)匹配
           ~]# iptables -I INPUT -d 172.16.0.7 -p tcp --syn --dport 22 -m connlimit --connlimit-above 2 -j REJECT
        (7)limit,基于收發(fā)報(bào)文的速率做匹配,令牌桶過(guò)濾器
           This  module  matches  at  a limited rate using a token bucket filter.
           --limit rate[/second|/minute|/hour|/day]
           --limit-burst number
           ~]iptables -I INPUT -d 172.16.0.67 -p icmp --icmp-type 8 -m limt --limt-brust 5 --limit 20/minute -j ACCEPT
           ~]# iptables -I OUTPUT -s 172.16.0.7 -p icmp --icmp-type 0 -j ACCEPT
           限制本機(jī)某tcp服務(wù)接收新請(qǐng)求的速率:--syn, -m limit
        (8)state
           根據(jù)"連接追蹤機(jī)制"去檢查連接的狀態(tài),較耗資源
           conntrack機(jī)制:追蹤本機(jī)上的請(qǐng)求和響應(yīng)之間的關(guān)系
           [!] --state state
               INVALID, ESTABLISHED, NEW, RELATED or UNTRACKED.
               NEW: 新連接請(qǐng)求;連接追蹤信息庫(kù)中不存在此連接的相關(guān)信息條目,因此,將其識(shí)別為第一次發(fā)出的請(qǐng)求
               ESTABLISHED:已建立的連接,NEW狀態(tài)之后,連接追蹤信息庫(kù)中為其建立的條目失效之前期間內(nèi)所進(jìn)行的通信狀態(tài)
               INVALID:無(wú)法識(shí)別的連接,如flag標(biāo)記不正確
               RELATED:相關(guān)聯(lián)的連接,當(dāng)前連接是一個(gè)新請(qǐng)求,但附屬于某個(gè)已存在的連接;新發(fā)起的但與已有的連接相關(guān)聯(lián)的連接,如:ftp協(xié)議中的數(shù)據(jù)連接與命令連接之間的關(guān)系
               UNTRACKED:未追蹤的連接;如raw表中關(guān)閉追蹤
               iptables -A OUTPUT -s 172.20.11.58 -m state --state ESTABLISHED -j ACCEPT
               iptables -I INPUT -d 172.20.11.58 -m state --state ESTABLISHED -j ACCEPT
               iptables -A INPUT  -d 172.20.11.58 -p tcp -m multiport --dports 22,80,139,445,3306 -m state --state NEW -j ACCEPT
               iptables -A OUTPUT -s 172.20.11.58 -j REJECT
               iptables -A INPUT -d 172.20.11.58 -j REJECT
               iptables -R  OUTPUT 2 -s 172.20.11.58 -p udp -m multiport --dports 123,323 -m state --state NEW -j ACCEPT
                state擴(kuò)展:
                   內(nèi)核模塊裝載:
                      nf_conntrack
                      nf_conntrack_ipv4
                   手動(dòng)裝載:
                      modprode nf_conntrack_ftp
                 追蹤到的連接,已經(jīng)追蹤到的并記錄下來(lái)的連接信息庫(kù)
                        /proc/net/nf_conntrack
                 調(diào)整連接追蹤功能所能夠容納的最大連接數(shù)量
                         /proc/sys/net/nf_conntrack_max
                 超時(shí)時(shí)長(zhǎng):
                       /proc/sys/net/netfilter/*timeout*
                  centos7需要加載模塊:
                        modprode nf_conntrack
             iptables的鏈接跟蹤表最大容量為/proc/sys/net/nf_conntrack_max,各種狀態(tài)的超時(shí)鏈接會(huì)從表中刪除,當(dāng)模板滿載時(shí),后續(xù)連接可能會(huì)超時(shí),
             解決方法兩個(gè):
                  (1)加大nf_conntrack_max的值
                     vim /etc/sysctl.conf
                     net.nf_conntrack_max=393216
                     net.netfilter.nf_conntrack_max=393216
                  (2)降低nf_conntrack timeout時(shí)間
                     vim /etc/sysctl.conf
                     net.netfilter.nf_conntrack_tcp_timeout_established=300
                     net.netfilter.nf_conntrack_tcp_timeout_wait=120
                     net.netfilter.nf_conntrack_tcp_close_wait=60
                     net.netfilter.nf_conntrack_tcp_timeout_fin_wait=120

    (3)處理動(dòng)作:

    -j targetname [per-target-options]
        ACCEPT
        DROP
    擴(kuò)展target:
        REJECT:
           This is used to send back an error packet in response to the matched packet: otherwise it is equivalent to  DROP  so it  is  a  terminating  TARGET,  ending  rule traversal.
            --reject-with type
            The type given can be icmp-net-unreachable, icmp-host-unreachable, icmp-port-unreachable, icmp-proto-unreach‐ able, icmp-net-prohibited, icmp-host-prohibited, or icmp-admin-prohibited (*), which return  the  appropriate ICMP  error  message (icmp-port-unreachable is the default).
         LOG: 
             Turn  on  kernel  logging of matching packets.
             --log-level
            --log-prefix
            默認(rèn)日志保存于/var/log/messages
         RETURN:
              返回調(diào)用者;一般在自定義上使用
               自定義鏈做為target:-j 調(diào)用
向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI