免费视频淫片aa毛片_日韩高清在线亚洲专区vr_日韩大片免费观看视频播放_亚洲欧美国产精品完整版

打開APP
userphoto
未登錄

開通VIP,暢享免費(fèi)電子書等14項(xiàng)超值服

開通VIP
iptables 使用總結(jié)

Linux 系統(tǒng)的防火墻功能是由內(nèi)核實(shí)現(xiàn)的

  2.0 版內(nèi)核中,包過濾機(jī)制是 ipfw,管理工具是 ipfwadm
  2.2 版內(nèi)核中,包過濾機(jī)制是 ipchain,管理工具是 ipchains
  2.4 版及以后的內(nèi)核中,包過濾機(jī)制是 netfilter,管理工具是 iptables

iptables

  用戶態(tài)

    位于/sbin/iptables,是用來管理防火墻的命令工具
    為防火墻體系提供過濾規(guī)則/策略,決定如何過濾或處理到達(dá)防火墻主機(jī)的數(shù)據(jù)包

  內(nèi)核態(tài)

    netfilter: 位于 Linux 內(nèi)核中的包過濾防火墻功能體系.
        內(nèi)核中選取五個位置放了五個hook(勾子) function(INPUT、OUTPUT、
      FORWARD、PREROUTING、POSTROUTING),而這五個hook function
      向用戶開放,用戶可以通過一個命令工具(iptables)向其寫入規(guī)則.
      由信息過濾表(table)組成,包含控制IP包處理的規(guī)則集(rules),規(guī)則
      被分組放在鏈(chain)上.

    注意: /etc/init.d/iptables start ------>則,所有經(jīng)過防火墻的數(shù)據(jù)包都會被防火墻處理。

  規(guī)則表

    具有某一類相似用途的防火墻規(guī)則,按照不同處理時機(jī)區(qū)分到不同的規(guī)則鏈以后,被歸置到不同的“表”中;
    簡單理解:規(guī)則表是規(guī)則鏈的集合,默認(rèn)有 4 張規(guī)則表
      raw 表: 確定是否對該數(shù)據(jù)包進(jìn)行狀態(tài)跟蹤
      mangle 表: 為數(shù)據(jù)包設(shè)置標(biāo)記
      nat 表: 修改數(shù)據(jù)包中的源、目標(biāo) IP 地址或端口
      filter 表: 確定是否放行該數(shù)據(jù)包(過濾)
    規(guī)則表的優(yōu)先順序:RAW ---> MANGLE ----> NAT ----> FILTER.

  規(guī)則鏈

    規(guī)則的作用在于對數(shù)據(jù)包進(jìn)行過濾或處理,根據(jù)處理時機(jī)的不同,各種規(guī)則被組織在不同的“鏈”中;
    簡單理解:規(guī)則鏈?zhǔn)欠阑饓σ?guī)則/策略的集合,默認(rèn)的 5 種規(guī)則鏈
      INPUT: 處理入站數(shù)據(jù)包
      OUTPUT: 處理出站數(shù)據(jù)包
      FORWARD: 處理轉(zhuǎn)發(fā)數(shù)據(jù)包
      POSTROUTING : 在進(jìn)行路由選擇后處理數(shù)據(jù)包
      PREROUTING : 在進(jìn)行路由選擇前處理數(shù)據(jù)包 come
      PREROUTING : 在進(jìn)行路由選擇前處理數(shù)據(jù)包 come

    規(guī)則鏈間的匹配順序:
      入站數(shù)據(jù): PREROUTING INPUT
      出站數(shù)據(jù): OUTPUT POSTROUTING
      轉(zhuǎn)發(fā)數(shù)據(jù): PREROUTING FORWARD POSTROUTING

    四表五鏈的對應(yīng)關(guān)系:
    raw: PREROUTING
      OUTPUT

    mangle: PREROUTING
        INPUT
        FORWARD
        OUTPUT
        POSTROUTING

    nat: PREROUTING
      INPUT
      OUTPUT
      POSTROUTING

    filter: INPUT
      FORWARD

      OUTPUT

    security: INPUT
        FORWARD

        OUTPUT
    注:
     此表在CentOS7上開始存在,它在filter表之后被調(diào)用,它是基于Linux的安全模塊SELinux為基礎(chǔ),做強(qiáng)制安全控制
    MAC(Mandatory Access Control)的網(wǎng)絡(luò)規(guī)則,它允許filter表的DAC (Discretionary Access Control) 先執(zhí)行完成后,
    在繼續(xù)執(zhí)行MAC。

查看規(guī)則基本格式:

  iptables -v -n -x [--line-number] -t 表名 [ -L | -S ] 鏈名

    注:
      -v: --verbose,輸出詳情
      -n: --numeric,使用數(shù)字格式顯示IP和端口.
      -x: --exact,顯示計數(shù)器的標(biāo)準(zhǔn)數(shù)值.
      --line-number: 顯示每條規(guī)則的在鏈中的行號.

      -L 鏈名 : --list: 列出當(dāng)前表 指定鏈 或 的所有規(guī)則記錄
      -S 鏈名 : :以iptables的命令行方式顯示添加的規(guī)則記錄

  插入|替換的基本格式:

    iptables [-v] -t 表名  [-I | -R]   鏈名  [行號]   [!] -i 入接口  [!] -o 出接口 \
        [!] -s 源IP/Mask   [!] -d 目IP/Mask \
        [ [!] -p 協(xié)議1,協(xié)議2,.. [!] --協(xié)議選項(xiàng) ] \
        --擴(kuò)展模塊 \
        -j 動作 | --goto 鏈名

      注:
        “!” : 意思是取反
        -I 鏈名 [行號] :,--insert: 在當(dāng)前表 指定行號前插入
        -R 鏈名 [行號] :,--replace:替換當(dāng)前表 指定行號的規(guī)則記錄   

  追加基本格式:

    iptables [-v]   -t   表名  -A  鏈名    [!] -i 入接口     [!] -o 出接口 \
        [!] -s 源IP/Mask    [!] -d 目IP/Mask \
        [ [!] -p 協(xié)議1,協(xié)議2,.. [!] --協(xié)議選項(xiàng) ] \
        --擴(kuò)展模塊 \
        -j 動作 | --goto 鏈名
      注
        -A 鏈名 :,--append: 在當(dāng)前表 最后一條規(guī)則記錄后追加

  刪除|清空的基本格式:

    iptables [-v] -t 表名 [-D | -F | -Z ] 鏈名 [行號]
      注:
      -D 鏈名 行號 :,--delete: 刪除當(dāng)前表 指定行號的規(guī)則記錄
      -F 鏈名 :,--flush: 刪除當(dāng)前表 指定鏈的 或 所有鏈的規(guī)則記錄
      -Z 鏈名 :,--zero: 置零當(dāng)前表 指定鏈的 或 所有鏈的計數(shù)器

  新建|刪除|重命名鏈的基本格式:

    iptables -t 表名 [-N | -X | -E ] 鏈名
      注:
        -N 新鏈名 :,--new-chain: 創(chuàng)建一個指定名稱的鏈.
        -X 鏈名 :,--delete-chain: 刪除自定義的鏈
        -E 鏈名 :,--rename-chain: 重命名自定義鏈


  修改鏈的默認(rèn)策略:

    iptables -t 表名 -P 鏈名 [DROP |ACCEPT]
      注:
      -P 鏈名 [DROP |ACCEPT] :,--policy: 設(shè)置指定鏈的默認(rèn)策略是DROP或ACCEPT.

  協(xié)議格式:

    [!] -p [ tcp | udp ] [ [!] [ --sport | --dport] StartPort:EndPort ] \
    [ [!] --tcp-flags 關(guān)注標(biāo)志位 過濾標(biāo)志位 ] \
    [ [!] --syn ] \
    [ [!] --tcp-option 選項(xiàng)值 ]
     注:
      標(biāo)志位格式: CWR | ECE | URG | ACK | PSH | RST | SYN | FIN | SYN,ACK,..
      關(guān)注標(biāo)志位: 可以關(guān)注多個tcp標(biāo)志位.
      過濾標(biāo)志位: 從關(guān)注的標(biāo)志位中,指定僅檢測那些標(biāo)志位被設(shè)置了,就去匹配它,然后根據(jù)動作來處理匹配的包
      --syn: 專用于TCP三次握手中,匹配第一次握手

   [!] -p [ icmp ] [ --help ] [ [!] --icmp-type {type[/code] | typename} ]
    注:
      icmp類型,詳情參看附錄.

  動作列表:

    -j [ ACCEPT | DROP | REJECT [ --reject-with 通知拒絕的類型 ] | [ DNAT | SNAT |REDIRECT |MASQUERAND ] | MARK ]
     [ LOG |NFLOG |ULOG [ --日志選項(xiàng)] ]      #參考擴(kuò)展模塊中日志模塊

      注:
        ACCEPT :允許通過
        DROP :丟棄報文,無任何客戶端收不到任何回應(yīng)
        REJECT :拒絕,但通知客戶端你不受歡迎!
        通知拒絕的類型:
          icmp-net-unreachable
          icmp-host-unreachable
          icmp-port-unreachable       #默認(rèn):通告端口不可達(dá)
          icmp-proto-unreachable    #通告協(xié)議不可達(dá)
          icmp-net-prohibited
          icmp-host-prohibited
          icmp-admin-prohibited    #通告訪問被禁止
          tcp-reset          #重置TCP連接

  DNAT :目標(biāo)地址轉(zhuǎn)換
    示例:
      Inernet-----------[公網(wǎng)IP:1.0.0.2]企業(yè)防火墻[私網(wǎng)IP]----------------內(nèi)網(wǎng)Web服務(wù)器(10.0.1.22)
      iptables -t nat -A PREROUTING -s 0/0 -d 1.0.0.2 -p tcp --dport 80 -j DNAT --to-destination 10.0.1.22:80

  SNAT :源地址轉(zhuǎn)換,靜態(tài)地址轉(zhuǎn)換,我指定多少地址,就只能轉(zhuǎn)換多少地址.
    示例:
      iptables -t nat -A POSTROUTING -s 10.0.1.0/24 ! –d 10.0.1.0/24 -j SNAT --to-source 172.18.1.6-172.18.1.9

  MASQUERAND :地址偽裝,此為動態(tài)SNAT,可簡單理解為:我的公網(wǎng)IP可不固定/固定均可,讓iptables自動
          在我需要訪問外網(wǎng)時,幫我自動根據(jù)路由判斷,使用那個接口的IP做地址轉(zhuǎn)換.
    示例:
      iptables -t nat -A POSTROUTING -s 10.0.1.0/24 ! –d 10.0.1.0/24 -j MASQUERADE

  REDIRECT :端口重定向
    示例:
      Inernet-----------[公網(wǎng)IP:1.0.0.2]企業(yè)防火墻[私網(wǎng)IP]----------------內(nèi)網(wǎng)Web服務(wù)器(10.0.1.22:8080)
      iptables -t nat -A PREROUTING -d 1.0.0.2 -p tcp --dport 80 -j REDIRECT --to-ports 8080

  MARK : 標(biāo)記數(shù)據(jù)包
    示例:
      Inernet-----------[公網(wǎng)IP:1.0.0.2]企業(yè)防火墻[私網(wǎng)IP]----------------內(nèi)網(wǎng)Web服務(wù)器(10.0.1.22:80 和 443)
      iptables -t mangle -A PREROUTING -d 1.0.0.2 -p tcp –m multiport --dports 80,443 -j MARK --set-mark 2
      iptables -A FORWARD -m mark --mark 2 -j ACCEPT

 

擴(kuò)展模塊格式:

  -m 模塊名 --模塊選項(xiàng)

  1. 會話狀態(tài)模塊:
    -m state [!] --state [NEW | ESTABLISHED | INVALID | RELATED | UNTRACKED]
      注:
        NEW: 正在新建立的TCP會話
        ESTABLISHED: 新建會話之后,開始輸出數(shù)據(jù)的過程都叫連接已建立.
        INVALID: 數(shù)據(jù)包不能被識別屬于哪個連接或沒有任何狀態(tài), 這類報文一般都DROP.
            原因: 此類包,可能是內(nèi)存溢出,收到不知屬于哪個連接的ICMP錯誤信息.
        RELATED: 此狀態(tài)在FTP中比較常見,FTP分為 命令連接和數(shù)據(jù)連接. 這種狀態(tài)的意思
            是一個連接和某個已經(jīng)ESTABLISHED狀態(tài)的連接有關(guān)系。
        UNTRACKED: 此狀態(tài)有兩種說法:
          1. 表示處于RELATED狀態(tài)的包被防火墻忽略而不進(jìn)行狀態(tài)跟蹤.
          2. 表示內(nèi)核無法找到相關(guān)連接,而無法被追蹤。
      另注:
        關(guān)于conntrack的詳情,可查看iptables學(xué)習(xí)圖.其中說明了TCP,UDP,ICMP在這幾種
       狀態(tài)轉(zhuǎn)換的詳細(xì)情況。

  2. 離散多端口模塊:
    -m multiport [!] [ --source-ports |--sports | --destination-ports |--dports | --ports Port1,Port2,... ]
      注:
        --ports: 表示匹配源 或 目的端口為 指定端口列表的端口。

  3. 地址范圍模塊:
    -m iprange [ --src-range | --dst-range IP1-IP2]

  4. 連接數(shù)限制模塊:
    -m connlimit [!] [ --connlimit-above 允許的最大連接數(shù) ]

  5. 限速模塊:
    -m limit [ --limit 個數(shù)/[second |minute |hour |day] --limit-burst 初始允許的最大峰值個數(shù)(默認(rèn)5個) ]
     注:
      它是基于令牌桶機(jī)制實(shí)現(xiàn)限速的,簡單理解:一個包在進(jìn)入前,會從一個令牌桶中得到一個進(jìn)入令牌,
        然后通過防火墻時,只要出示此令牌就可通過,若沒有就不允許通過。
      若--limit設(shè)置為5/second,則系統(tǒng)會每隔5秒往這個令牌桶中放入一個令牌,而--limit-burst 5, 則是說,
       系統(tǒng)啟動初始直接向令牌桶中放入5個令牌,用完了,就只能等5秒后,系統(tǒng)放入令牌了,才能取。
    另注:
      使用時結(jié)合拒絕策略一起使用:
      iptables -I INPUT -p icmp -m limit 5/second --limit-burst 10 -j ACCEPT
      iptables -I INPUT -p icmp j REJECT

  6. 過濾數(shù)據(jù)包中包含指定字符串的模塊:
    -m string [ --algo bm | kmp ] [ --from 從第幾個字節(jié)開始偏移(默認(rèn):0)] \
        [ --to 偏移多少個字節(jié)(默認(rèn):到包結(jié)尾)] \
        [!] [ --string 過濾字符串 ]
        [!] [ --hex-string 十六進(jìn)制字符串 ]
       注:
        --algo: 指定過濾字符串使用的算法,這兩種算法,使用那個都可以.

  7. 通過時間限制通信的模塊:
    -m time [ --datestart | --datestop YYYY[-MM[-DD[Thh[:mm[:ss]]]]] ] \
        [ --timestart | --timestop HH:MM[:SS] ] \
        [!] [ --monthdays | --weekdays Day[,Day...] ] \
        [ --utc | --localtz ]
      注:
          --utc: 使用UTC時間
         --localtz: 使用系統(tǒng)kernel時間,默認(rèn)值。
         --datestart 和 --datestop: 此為指定一段時間內(nèi)做特定流量匹配。
           注:
          它的時間范圍是: 從 1970-01-01T00:00:00 到 2038-01-19T04:17:07
           如:
          -m time --datestart 2017-12-24 --datestop 2018-12-27
          -m time --datestart 2017-01-01T17:00 --datestop 2020-01-01T23:59:59

      --timestart 和 --timestop 及 --monthdays 和 --weekdays:
        這些都是相對時間,所以可以設(shè)定永久性對特定流量的匹配。
        注:
          time的時間范圍: 00:00:00 ~ 23:59:59
          monthdays: 是某月中的 1~31天,但2月需要注意:28或29天.
          weekdays: 是某一周內(nèi)的 Mon, Tue, Wed, Thu, Fri, Sat, Sun其值對應(yīng)1~7.
        如:
          -m time --timestart 12:30 --timestop 13:30
          -m time --weekdays Fri --monthdays 22,23,24,25,26,27,28


  8. 動態(tài)IP地址本生成模塊:
    此模塊的功能先使用下面示例做一個簡單說明:
    例如:
     iptables -A INPUT -p icmp --icmp-type echo-request -m length --length 78 -m recent --set --name AdminSSH --rsource -j ACCEPT
      注:
      此語句的功能是,若匹配到ping包的大小為78字節(jié),則滿足記錄recent的條件,此時iptables將記錄被匹配的IP報文
      的源IP 到/proc/net/xt_recent/AdminSSH 文件中.
     iptables -A INPUT -p tcp --dport 22 --syn -m recent --rcheck --seconds 15 --name AdminSSH --rsource -j ACCEPT
      注:
      此語句的功能是,若匹配到目標(biāo)端口為22,并且是新建了TCP連接,則滿足檢查recent記錄文件的條件,此時iptables
      將去檢查/proc/net/xt_recent/AdminSSH文件中是否有 此次連接的源IP存在,若有則檢查此源IP的
      last_seen(即:最后一次記錄的時間戳),若此時間戳 和當(dāng)前時間對比,若在15秒內(nèi),則允許此源IP訪問目的端口22.

    recent模塊維護(hù)了一個IP地址薄,通過匹配條件滿足后,記錄源IP(--resource) 或 目的IP(--rdest),形成IP列表,這樣就可以
   引用此IP列表,將其定義為白名單 或 黑名單。 此模塊還通過 --update 參數(shù)來更新last_seen 同時再執(zhí)行--rcheck的
   動作,而--remove則是再條件匹配后,在IP列表中刪除此次連接的IP,這樣就完成了對IP列表的增刪查改。


    此模塊使用格式:
      -m recent [ --name IP地址薄文件名 [ --set [ --rsource | --rdest ] ] ] [ --rttl ] \
          [ --seconds 記錄有效時間 [ --hitcount 命中次數(shù) ] [ --rcheck | --update ] ] \
          [ --remove ]
        參數(shù)說明:
          --name IP地址薄文件名 : 創(chuàng)建一個指定名稱的IP地址薄文件.【創(chuàng)建】
          --set --rsource | --rdest : 將匹配連接的源IP 或 目的IP記錄到 IP地址薄中。【增】
          --remove: 查詢IP列表中是否存在此次連接的IP,若存在則刪除。 【刪】
          --update: 先執(zhí)行 --rcheck ,后更新last_seen 的值?!靖摹?br>           --rcheck: 及查詢IP列表中是否存在此次連接的IP 【查】
          --seconds 記錄有效時間 : 查詢IP列表中是否存在此次連接的IP,若存在則檢查其對應(yīng)的last_seen的時間戳,
                      是否已經(jīng)超過 “記錄有效時間”了。單位:秒
          --hitcount 命中次數(shù): 它通常和 --seconds X 一起使用,表示在 X 秒內(nèi)允許一個IP連接多少次
          --rttl 表示同時匹配IP包的TTL,man手冊中解釋大概意思可能是 避免源IP偽造攻擊,
            可通過此參數(shù)記錄TTL的值,以便比對。【 This may be useful if you have
              problems with people faking their source address in order to DoS you
              via this module by disallowing others access to your site by sending bogus
              packets to you.】

        參考完整示例:
          #記錄前綴SSHAccess的日志:
            iptables -A INPUT -p tcp --dport 50001 --syn -j LOG --log-prefix "SSHAccess: "

          #符合規(guī)則,則創(chuàng)建SSHAccess IP地址薄,并重置TCP連接,記錄源IP。
            iptables -A INPUT -p tcp --dport 50001 --syn -m recent --set --name SSHAccess --rsource \
                --rttl -j REJECT --reject-with tcp-reset

          #開啟SSH端口,15秒內(nèi)允許剛剛連接TCP50001的源IP登錄SSH。
            iptables -A INPUT -p tcp --dport 22 --syn -m recent --rcheck --seconds 15 --name SSHAccess \
                --rsource -j ACCEPT

          #符合規(guī)則后,刪除SSHAccess列表內(nèi)的本次連接的源IP記錄
            iptables -A INPUT -p tcp --dport 50002 --syn -m recent --remove --name webpool --rsource \
                -j REJECT --reject-with tcp-reset

            iptables -A INPUT -j DROP

          通過一些方式連接一次,即可開啟SSH
            nc host 50001
            telnet host 50001
            nmap -sS host 50001

            補(bǔ)充說明:
              echo +1.1.1.1 > /proc/net/xt_recent/SSHAccess #向IP列表中手動添加記錄
              echo -1.1.1.1 > /proc/net/xt_recent/SSHAccess #從IP列表中手動刪除記錄
              echo / > /proc/net/xt_recent/SSHAccess #清空IP列表

              ip_list_tot=100    #recent模塊的IP地址薄最多記錄100條記錄
                        Number of addresses remembered per table.
              ip_pkt_list_tot=20    #記錄每個IP的數(shù)據(jù)包總數(shù)為20個
                        Number of packets per address remembered.
              ip_list_hash_size=0
                    Hash table size. 0 means to calculate it based on ip_list_tot, default: 512.
              ip_list_perms=0644    #默認(rèn)創(chuàng)建IP地址薄的權(quán)限
                          Permissions for /proc/net/xt_recent/* files.
              ip_list_uid=0       #IP地址薄的用戶UID
                          Numerical UID for ownership of /proc/net/xt_recent/* files.
              ip_list_gid=0    #GID  #Numerical GID for ownership of /proc/net/xt_recent/* files.

  9. 日志target模塊:
    -j LOG [ --log-level 日志級別名 | --log-prefix 日志前綴字符串 | --log-tcp-sequence | --log-uid | --log-ip-options | --log-tcp-options ]
    注:
      --log-level 日志級別        #參考/etc/syslog.conf
      --log-prefix 日志前綴字符串    #記錄此日志到/var/log/messages時,添加一個記錄標(biāo)記字符串
      --log-tcp-sequence        #記錄TCP連接的序列號.
      --log-uid              #記錄生成數(shù)據(jù)包的進(jìn)程的UID
      --log-ip-options           #記錄IP選項(xiàng)信息
      --log-tcp-options           #記錄TCP選項(xiàng)信息

  10. 能向用戶空間進(jìn)程轉(zhuǎn)發(fā)日志的target模塊:
    -j NFLOG | ULOG:
      若需要iptables匹配指定規(guī)則后,向用戶空間的進(jìn)程發(fā)送匹配規(guī)則的日志,則可以使用此日志模塊,
     它會在規(guī)則被匹配后,由Linux內(nèi)核通過netlink套接字多播方式向用戶空間中加入指定組播組的進(jìn)程,
        發(fā)送日志信息。NFLOG:支持1~2^32-1個組播組, ULOG: 支持1~32個組播組


  11. NAT target模塊:
    注:
      MASQUERADE:它是動態(tài)SNAT,即 其公網(wǎng)IP可以動態(tài)獲取,并自動用來替換內(nèi)網(wǎng)源IP.
      SNAT :它要加到POSTROUTING鏈中,因?yàn)閕ptables要知道我替誰做了源地址轉(zhuǎn)換,若加到PREROUTING鏈中,就意味著,
      iptables還沒看到給誰轉(zhuǎn)換源地址,就已經(jīng)換了源地址,你說iptables要如何接著處理回來的數(shù)據(jù)包?
      DNAT :它是要加到PREROUTING鏈中。

    格式:
      源地址轉(zhuǎn)換【注: 只能用于nat表中的 POSTROUTING 和 INPUT】:
        -j SNAT --to-source [ipaddr[-ipaddr]][:port[-port]] [--random] [--persistent]
       注:
        --random : 是使用隨機(jī)端口來識別每一個轉(zhuǎn)換后的NAT連接.以便回應(yīng)報文可以正確轉(zhuǎn)換為內(nèi)網(wǎng)地址。
            默認(rèn)使用它,若指定了端口范圍,則不使用隨機(jī)端口。
        --persistent: 為每個NAT轉(zhuǎn)換保存記錄,以便下次該客戶端需要轉(zhuǎn)換時,不用隨機(jī)從源地址池中再次分配新地址給它。
            僅在指定了一個可選的轉(zhuǎn)換源地址范圍時,可用,但這個源地址范圍一定要能滿足所有內(nèi)網(wǎng)地址轉(zhuǎn)換的需求!
        -j MASQUERADE [--to-ports port[-port]] [--random]

     目的地址轉(zhuǎn)換【注: 只能用于nat表中的 PREROUTING 和 OUTPUT】:
      -j DNAT --to-destination  [ipaddr[-ipaddr]][:port[-port]]  [--persistent]  [--random]
        注:
         參數(shù)含義和SNAT基本類似,只是轉(zhuǎn)換地址是目標(biāo)地址。


  12. 標(biāo)記target模塊:
    -j MARK --set-mark 標(biāo)記號碼
     注:
      此模塊是給數(shù)據(jù)包打標(biāo)記的,它可以配合CONNMARK一起使用,完成更強(qiáng)大的功能,CONNMARK是給一個連接
      (注: 連接是兩個方向,一個請求流,一個響應(yīng)流組成)打標(biāo)記。

  13. 連接標(biāo)記target模塊:
    -j CONNMARK [--set-mark value[/mask]] [--save-mark | --restore-mark [--mask mask]]
    注:
    #此格式是CONNMARK最基本的用法,高級用法參考man手冊【高級用法主要是對mark如何與mask做運(yùn)算,得到需要的mark值.】.
    --set-mark value[/mask] : 給一個連接打指定的標(biāo)記. mask: 是標(biāo)記的掩碼位,即:value 和 mask做或運(yùn)算的值。
    --save-mark:將nfmark復(fù)制到ctmark中, 即: 將連接中的標(biāo)記值,保存到/proc/net/nf_conntrack中.
    --restore-mark: 將ctmark復(fù)制到nfmark中, 即: 將/proc/net/nf_conntrack中mark的值恢復(fù)到連接mark中。
    --mask 掩碼值: 即在保存 或 恢復(fù)時,是否執(zhí)行 mark 與 mask的或運(yùn)算, 若需要則添加mask.

    例:
     附件中遺留問題,左邊遇到的問題的解決方案: 完成策略路由
     Linux網(wǎng)關(guān):
      iptables -F
      iptables -t mangle -A POSTROUTING -j CONNMARK --restore-mark    #恢復(fù)連接mark到數(shù)據(jù)包mark中.
      iptables -t mangle -A POSTROUTING -m mark --mark 20 -j ACCEPT    #檢測數(shù)據(jù)包mark若為20則直接轉(zhuǎn)發(fā)
      iptables -t mangle -A POSTROUTING -s 1.1.1.0/24 -j MARK --set-mark 20 #若為一個新連接就給數(shù)據(jù)包添加標(biāo)記20
      iptables -t mangle -A POSTROUTING -j CONNMARK --save-mark     #將連接中數(shù)據(jù)包的標(biāo)記保存到nf_conntrack中.

      iptables -t nat -A POSTROUTING -s 1.1.1.0/24 -j SNAT --to-source=10.0.0.1 #連接打上標(biāo)記后,再做SNAT.

      #默認(rèn)策略:
        iptables -A INPUT -m conntrack --ctstate RELATED,ESTABLISHED -c 0 0 -j ACCEPT
        iptables -A INPUT -m conntrack --ctstate INVALID -c 0 0 -j DROP
        iptables -A INPUT -p tcp --dport 22 --syn -j ACCEPT
        iptables -A INPUT -c 0 0 -j REJECT --reject-with icmp-host-prohibited

  14. 連接狀態(tài)匹配模塊:
    -m conntrack [[!] [--ctstate | --ctstatus 狀態(tài)列表]] [[!] --ctproto tcp|udp|sctp|..四層協(xié)議.. ] [...其它選項(xiàng)...]
    注:
    其它選項(xiàng):
      --ctdir {ORIGINAL|REPLY}      #指定僅匹配(ORIGINAL)源或(REPLY)目的地址,默認(rèn)都匹配.
      [!] [--ctorigsrc |--ctoridst |--ctreplsrc |--ctrepldst address[/mask]]            #匹配起始方或響應(yīng)方的源或目的地址
      [!] [--ctorigsrcport |--ctorigdstport |--ctreplsrcport |--ctrepldstport port[:port]]     #匹配起始方或響應(yīng)方的源或目的端口
      [!] --ctexpire time[:time]         #根據(jù)提供的時間范圍來匹配剩余生存時間。

      --ctstate 可用的連接狀態(tài)值:
        NEW        #新建立連接的狀態(tài)
        ESTABLISHED
        RELATED      #與現(xiàn)有連接相關(guān)聯(lián)的連接狀態(tài),如FTP數(shù)據(jù)傳輸或ICMP錯誤。
        SNAT        #它是一種虛擬狀態(tài),若起始源地址與響應(yīng)目標(biāo)地址不匹配時,則為此連接狀態(tài).
        DNAT        #它是一種虛擬狀態(tài),若響應(yīng)源地址與起始目的地址不匹配時,則為此連接狀態(tài).
        UNTRACKED   #沒有被nf_conntrack追蹤的連接狀態(tài),注:iptables -t raw .. -j CT --notrack,顯式指定
                  不追蹤該報文,則會出現(xiàn)此連接狀態(tài).
        INVALID      #無法識別的無效狀態(tài).

    --ctstatus 可用的連接狀態(tài)值:
      NONE          #以下都不是
      EXPECTED    #這是一個預(yù)期的連接(即conntrack helper設(shè)置過的連接)。
      SEEN_REPLY   #Conntrack在兩個方向上都看到了連接的數(shù)據(jù)包。
      ASSURED      #Conntrack入口永遠(yuǎn)不應(yīng)該提前過期。
      confirmed        #確認(rèn)連接:原始數(shù)據(jù)包已離開本機(jī)


  15. 速率估算器
    -m rateest [...參數(shù)選項(xiàng)..]
      例:
       #使用以下示例來說明該模塊的使用方法:

      1. 定義兩個速率估算器分別叫eth0 和 ppp0,它們都以250毫秒為速率測量時間間隔,
         允許前后誤差在0.5秒內(nèi),收集eth0 和 ppp0兩個接口的速率。
        iptables -t mangle -A POSTROUTING -o eth0 -j RATEEST --rateest-name eth0 \
            --rateest-interval 250ms --rateest-ewma 0.5s
        iptables -t mangle -A POSTROUTING -o ppp0 -j RATEEST --rateest-name ppp0 \
              --rateest-interval 250ms --rateest-ewma 0.5s

      2. 在eth0 和 ppp0兩個接口之間負(fù)載流量。
       #若eth0這個速率估算器收集了速率為Erate0,ppp0收集的速率為Prate0
       #則規(guī)則1:
        Erate0 減去 2.5mbit = ECZ0 ; 若 ECZ0 為負(fù)數(shù),則將ECZ0賦值為0,為正數(shù),則直接賦值為差值.
        Prate0 減去 2mbit = PCZ0 ; 標(biāo)準(zhǔn)與ECZ0一樣。
        若 ECZ0 > PCZ0 則 給流量打上標(biāo)記1.
         iptables -t mangle -A balance -m conntrack --ctstate NEW -m helper --helper ftp \
            -m rateest --rateest-delta --rateest1 eth0 --rateest-bps1 2.5mbit \
            --rateest-gt \
            --rateest2 ppp0 --rateest-bps2 2mbit \
            -j CONNMARK --set-mark 1

      #規(guī)則2 與規(guī)則1原理一樣,eth0大于ppp0,則給流量打上標(biāo)記2
        iptables -t mangle -A balance -m conntrack --ctstate NEW -m helper --helper ftp \
            -m rateest --rateest-delta --rateest1 ppp0 --rateest-bps1 2mbit \
            --rateest-gt \
            --rateest2 eth0 --rateest-bps2 2.5mbit \
            -j CONNMARK --set-mark 2
        iptables -t mangle -A balance -j CONNMARK --restore-mark

    參數(shù)選項(xiàng):
     比較操作符:
      [!] --rateest-eq    #等于
      [!] --rateest-gt    #大于
      [!] --rateest-lt    #小于

      --rateest-delta   #指定是使用相對比較 或 絕對比較. 相對比較: 即差值比較,絕對比較,
                即: 直接使用速率估算器中的值做比較.
      --rateest name
      --rateest-bps [value]    #bps:即每秒多少bit位.
      --rateest-pps [value]    #pps:即每秒多少個數(shù)據(jù)包
        例:
         #指定按bps來比較,直接使用速率估算器中的值來比較。
          iptables -t mangle ... -m rateest --rateest-bps --rateest eth0 --rateest-gt --rateest ppp0 -j ...

      --rateest1 name
      --rateest2 name
      --rateest-bps1 [value]
      --rateest-bps2 [value]
      --rateest-pps1 [value]
      --rateest-pps2 [value]
      注:
        速率可用單位: bit, [kmgt]bit, [KMGT]ibit, Bps, [KMGT]Bps, [KMGT]iBps.
        kbit 是千bit位,這是SI標(biāo)準(zhǔn)寫法,Windows支持此標(biāo)準(zhǔn), Kibit 也是千bit位,
        這是IEC標(biāo)準(zhǔn)寫法,目前Linux,Unix,MacOSX都支持此種標(biāo)準(zhǔn).
        KBps 是每秒多少千字節(jié)。


  16. CT target模塊
    -j CT [ ...]    #此模塊僅做了基本介紹,沒做詳細(xì)使用說明,
             詳細(xì)使用參考: https://home.regit.org/netfilter-en/secure-use-of-helpers/
      注:
      CT模塊引入的背景和作用:
      helper模塊:它是解決類似于ftp這種協(xié)議,使用兩個連接 singaling flow(信令流) 和 data flow(數(shù)據(jù)流),
          信令流用于協(xié)商配置參數(shù),而數(shù)據(jù)流用于傳輸數(shù)據(jù) 的這種協(xié)議連接的匹配問題,因?yàn)閕ptables為
          了解決這個問題,引入了一個3/4層參數(shù),而它打破了OSI七層的規(guī)范,所以后來就引入了helper
          模塊來解決此問題。

      helper模塊的問題:
        它是為了解決helper模塊的在iptables規(guī)則一旦引用,該helper模塊將自動開始在所有接口上解析報文,
       以便找到與指定協(xié)議相關(guān)的連接,這帶來的問題就是,造成CPU和內(nèi)存資源被使用過多,而且其中很多
       連接是不需要的解析的。
      CT target模塊:
        它是helper模塊的升級版,它包含helper模塊,并將其做為一個根據(jù)需要調(diào)用的功能,當(dāng)匹配到我們
      關(guān)系的流量時,才調(diào)用它,來分析該鏈接流量是否為相關(guān)已建立鏈接的數(shù)據(jù)流。
      為了更好讓helper模塊工作,建議在使用前,先禁止它處理指定 anyIP:端口 上所有數(shù)據(jù)包,然后再
      使用CT在需要時調(diào)用它:
        Linux3.5以后使用以下命令來禁止:
          modprobe   nf_conntrack nf_conntrack_helper=0    #這是在使用前可操作的方法.
          vim  /etc/modprobe.d/firewalld-sysctls.conf  應(yīng)該類似此方式.
        或
          echo 0 > /proc/sys/net/netfilter/nf_conntrack_helper   
            #這是在裝載模塊后使用此方式來禁止.
            #Please note that flows that already got a helper will keep using it even if automatic
              helper assignment has been disabled.
            # 請注意,已經(jīng)獲得助手的流將繼續(xù)使用它,即使自動助手分配已被禁用。

        Linux3.5以下禁止幫助模塊行為的方式:
          modprobe nf_conntrack_$PROTO ports=0

        以下模塊若禁止其處理 anyIP:port 上所有數(shù)據(jù)包后,它們將在所有流上被停用:
          ftp, irc, sane, sip, tftp

        以下模塊必須使用ports參數(shù),否則無法正常工作:
          amanda, h323, netbios_ns, pptp, snmp
          注:
           若使用ports=0 這種方式禁止了指定模塊,則該模塊在conntrack中將被自動
          重命名為 $PROTO-0. 所以需要手動更新CT的調(diào)用.
      例:
       iptables -A PREROUTING -t raw -p tcp --dport 21 -d 2.3.4.5 -j CT --helper ftp-0

      #以下列表描述了不同的連接跟蹤幫助程序模塊及其相關(guān)的自由度:
        Fixed: Value of a connection tracking attribute is used. This is not a candidate for forgery.
          【使用連接跟蹤屬性的值。這不是偽造的候選人。】
        In CMD: Value is fetched from the payload. This is a candidate for forgery.
          【從有效負(fù)載中獲取值。這是偽造的候選人。】

    rpfilter:
      它是幫助 helper模塊 做安全監(jiān)測的一個反欺騙(Anti-spoofing)模塊,由于helper模塊依賴于客戶端
     和服務(wù)器的數(shù)據(jù)做檢測,來判斷相關(guān)連接,它并不能像conntrack一樣能跟蹤連接的其余部分,因此
     無法做任何一致性檢查,這就給偽造數(shù)據(jù)的欺騙攻擊帶來的便利,而rpfilter就是來解決此問題的。
      注:
      rpfilter 模塊是從Linux3.3 和 iptables1.4.13后才有的模塊。它是基于路由的反向路徑過濾實(shí)現(xiàn)。
      ls   /proc/sys/net/ipv4/{all, Interfaces}/rp_filter    #可用于激活rp_filter功能
                 #【當(dāng)對{interface}進(jìn)行源驗(yàn)證時,將使用conf/{all,interface}/rp_filter的最大值?!?
        注:
         0: 不做源地址驗(yàn)證
           1:嚴(yán)格源地址反向路徑驗(yàn)證模式。每個傳入數(shù)據(jù)包都要根據(jù)fib_validate_source函數(shù)進(jìn)行測試,
           如果接口不是最佳的反向路徑,即入接口不是響應(yīng)報文的出接口,則數(shù)據(jù)包檢查將失敗。
           默認(rèn)情況下,失敗的包將被丟棄?!綬FC3704】
           2:松散源地址反向路徑驗(yàn)證模式。 每個傳入數(shù)據(jù)包的源地址也將根據(jù)fib_validate_source函數(shù)進(jìn)行測試,
          如果通過任何接口都無法訪問源地址,則數(shù)據(jù)包檢查將失敗。
          RFC3704目前推薦的做法是啟用嚴(yán)格模式,以防止IP欺騙攻擊DDos。
          如果使用非對稱路由或其他復(fù)雜路由,則建議使用松散模式。
            https://home.regit.org/netfilter-en/secure-use-of-helpers/
          這篇英文博客,有對該模塊的介紹和使用,為了不理解錯誤,先記錄到此。
            https://www.cnblogs.com/lipengxiang2009/p/7446388.html

     另注:
      若啟用了rpfilter功能,若需要知道內(nèi)核丟棄了那些報文,可啟用log_martians功能.
        echo 1 >/proc/sys/net/ipv4/conf/<interfacename>/log_martians


  17. 匹配下載的連接
    -m connbytes [!] --connbytes [從多少[:到多少]] --connbytes-dir [original |reply |both] --connbytes-mode [packets |bytes |avgpkt]
    注:
      --connbytes-mode : 設(shè)置判斷連接(或組成連接的兩個數(shù)據(jù)流中的一個流)是否為下載流量的依據(jù),
              是按packets(數(shù)據(jù)包)來統(tǒng)計,還是按照 bytes(字節(jié)) 或 avgpkt(每個數(shù)據(jù)包的平均字節(jié)數(shù))
      --connbytes 10000:100000 : 若按bytes來統(tǒng)計,則一個數(shù)據(jù)流傳輸?shù)淖止?jié)數(shù)若在一萬到十萬字節(jié)之間時,
                   則認(rèn)為它是下載流量。
      --connbytes-dir : 指定對哪種類型的數(shù)據(jù)流做監(jiān)控,original: 原始流, reply:重放流,both:一般使用兩者都監(jiān)控.
        例:
         iptables .. -m connbytes --connbytes 10000:100000 --connbytes-dir both --connbytes-mode bytes ...

  18. 連接標(biāo)記
    -m connmark [!] --mark Value[/Mask]
     注:
      這個是給一個連接(默認(rèn)為TCP)添加標(biāo)記. 它和CONNMARK功能類似,只是CONNMARK是target(即: -j CONNMARK, 目標(biāo)動作)。


  19. 根據(jù)連接數(shù) 或 源目地址塊 來限制并發(fā)連接數(shù).
    -m connlimit [ --connlimit-upto | --connlimit-above Num ] [ --connlimit-saddr | --connlimit-daddr] [ --connlimit-mask PrefixLength]
    注:
     upto 和 above: 分別根據(jù)連接數(shù)來匹配; upto:連接數(shù)小于或等于Num, above:連接數(shù)大于Num
     saddr |daddr : 設(shè)置匹配其源或目地地址來匹配
       PrefixLength : 設(shè)置匹配地址段的長度 或叫掩碼長度,若省略PrefixLength,默認(rèn)根據(jù)網(wǎng)絡(luò)地址,確定其最大掩碼.
    例:
     iptables -p tcp --syn --dport 80 -m connlimit --connlimit-above 16 --connlimit-mask 24 -j REJECT
        #注: 將每個源地址為C類網(wǎng)絡(luò)的并行HTTP請求數(shù)量限制為最大16個。
     ip6tables -p tcp --syn --dport 80 -s fe80::/64 -m connlimit --connlimit-above 16 --connlimit-mask 64 -j REJECT
        #注:將IPv6鏈接地址的并行HTTP請求數(shù)量限制為最大16個
     iptables -A INPUT -p tcp --syn --dport 23 -m connlimit --connlimit-above 2 -j REJECT
          #注: 限制每個客戶端只能有兩個并發(fā)連接telnet.

附件:

  

  
icmp類型:
  【類型/代碼】
  any 默認(rèn)匹配所有.
  echo-reply (pong) 0/0
  destination-unreachable
  network-unreachable 3/0 :網(wǎng)絡(luò)不可達(dá)
  host-unreachable 3/1
  protocol-unreachable 3/2
  port-unreachable 3/3
  fragmentation-needed 3/4: 鏈路上需要分片,但設(shè)置了不分片標(biāo)志位.
  source-route-failed 3/5: 源地址路由失敗
  network-unknown 3/6: 目的網(wǎng)絡(luò)未知
  host-unknown 3/7
  network-prohibited 3/9:目標(biāo)網(wǎng)絡(luò)被禁止
  host-prohibited 3/10
  TOS-network-unreachable 3/11: 由于服務(wù)類型TOS,網(wǎng)絡(luò)不可達(dá)
  TOS-host-unreachable 3/12
  communication-prohibited 3/13:由于過濾,通信被強(qiáng)制禁止
  host-precedence-violation 3/14:主機(jī)越權(quán)
  precedence-cutoff 3/15:優(yōu)先終止生效(Precedence cutoff in effect)
  source-quench 4/0:源端被關(guān)閉(基本流控制)
  redirect
  network-redirect 5/0
  host-redirect 5/1
  TOS-network-redirect 5/2:對服務(wù)類型和網(wǎng)絡(luò)重定向
  TOS-host-redirect 5/3
  echo-request (ping) 8/0
  router-advertisement 9/0: 路由器通告
  router-solicitation 10/0:路由器請求
  time-exceeded (ttl-exceeded)【TTL時間溢出,即超時】
  ttl-zero-during-transit 11/0:傳輸期間生存時間等于0,而超時返回.
  ttl-zero-during-reassembly 11/1:數(shù)據(jù)報在組裝期間生存時間等于0,而超時返回.
  parameter-problem【參數(shù)問題】
  ip-header-bad 12/0:損壞的IP首部(包括各種傳輸損壞)
  required-option-missing 12/1:缺少必須的選項(xiàng)
  timestamp-request 13/0【已作廢】
  timestamp-reply 14/0【已作廢】
  address-mask-request 17/0:地址掩碼請求
  address-mask-reply 18/0:地址掩碼應(yīng)答

本站僅提供存儲服務(wù),所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點(diǎn)擊舉報。
打開APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
iptables學(xué)習(xí)筆錄
nf_conntrack: table full,dropping packet. 終結(jié)篇
Netfilter框架
linux的iptables腳本詳細(xì)解釋
iptables應(yīng)用匯總
iptables的備份、恢復(fù)及防火墻腳本的基本使用
更多類似文章 >>
生活服務(wù)
分享 收藏 導(dǎo)長圖 關(guān)注 下載文章
綁定賬號成功
后續(xù)可登錄賬號暢享VIP特權(quán)!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服