小男孩‘自慰网亚洲一区二区,亚洲一级在线播放毛片,亚洲中文字幕av每天更新,黄aⅴ永久免费无码,91成人午夜在线精品,色网站免费在线观看,亚洲欧洲wwwww在线观看

分享

iptables 使用總結(jié)

 愛(ài)睡覺(jué)的貓 2019-05-29

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

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

iptables

  用戶態(tài)

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

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

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

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

  規(guī)則表

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

  規(guī)則鏈

    規(guī)則的作用在于對(duì)數(shù)據(jù)包進(jìn)行過(guò)濾或處理,根據(jù)處理時(shí)機(jī)的不同,各種規(guī)則被組織在不同的“鏈”中;
    簡(jiǎn)單理解:規(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

    四表五鏈的對(duì)應(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上開(kāi)始存在,它在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,顯示計(jì)數(shù)器的標(biāo)準(zhǔn)數(shù)值.
      --line-number: 顯示每條規(guī)則的在鏈中的行號(hào).

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

  插入|替換的基本格式:

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

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

  追加基本格式:

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

  刪除|清空的基本格式:

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

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

    iptables -t 表名 [-N | -X | -E ] 鏈名
      注:
        -N 新鏈名 :,--new-chain: 創(chuàng)建一個(gè)指定名稱的鏈.
        -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)志位 過(guò)濾標(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)注多個(gè)tcp標(biāo)志位.
      過(guò)濾標(biāo)志位: 從關(guān)注的標(biāo)志位中,指定僅檢測(cè)那些標(biāo)志位被設(shè)置了,就去匹配它,然后根據(jù)動(dòng)作來(lái)處理匹配的包
      --syn: 專用于TCP三次握手中,匹配第一次握手

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

  動(dòng)作列表:

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

      注:
        ACCEPT :允許通過(guò)
        DROP :丟棄報(bào)文,無(wú)任何客戶端收不到任何回應(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    #通告訪問(wèn)被禁止
          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 :地址偽裝,此為動(dòng)態(tài)SNAT,可簡(jiǎn)單理解為:我的公網(wǎng)IP可不固定/固定均可,讓iptables自動(dòng)
          在我需要訪問(wèn)外網(wǎng)時(shí),幫我自動(dòng)根據(jù)路由判斷,使用那個(gè)接口的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. 會(huì)話狀態(tài)模塊:
    -m state [!] --state [NEW | ESTABLISHED | INVALID | RELATED | UNTRACKED]
      注:
        NEW: 正在新建立的TCP會(huì)話
        ESTABLISHED: 新建會(huì)話之后,開(kāi)始輸出數(shù)據(jù)的過(guò)程都叫連接已建立.
        INVALID: 數(shù)據(jù)包不能被識(shí)別屬于哪個(gè)連接或沒(méi)有任何狀態(tài), 這類報(bào)文一般都DROP.
            原因: 此類包,可能是內(nèi)存溢出,收到不知屬于哪個(gè)連接的ICMP錯(cuò)誤信息.
        RELATED: 此狀態(tài)在FTP中比較常見(jiàn),FTP分為 命令連接和數(shù)據(jù)連接. 這種狀態(tài)的意思
            是一個(gè)連接和某個(gè)已經(jīng)ESTABLISHED狀態(tài)的連接有關(guān)系。
        UNTRACKED: 此狀態(tài)有兩種說(shuō)法:
          1. 表示處于RELATED狀態(tài)的包被防火墻忽略而不進(jìn)行狀態(tài)跟蹤.
          2. 表示內(nèi)核無(wú)法找到相關(guān)連接,而無(wú)法被追蹤。
      另注:
        關(guān)于conntrack的詳情,可查看iptables學(xué)習(xí)圖.其中說(shuō)明了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 個(gè)數(shù)/[second |minute |hour |day] --limit-burst 初始允許的最大峰值個(gè)數(shù)(默認(rèn)5個(gè)) ]
     注:
      它是基于令牌桶機(jī)制實(shí)現(xiàn)限速的,簡(jiǎn)單理解:一個(gè)包在進(jìn)入前,會(huì)從一個(gè)令牌桶中得到一個(gè)進(jìn)入令牌,
        然后通過(guò)防火墻時(shí),只要出示此令牌就可通過(guò),若沒(méi)有就不允許通過(guò)。
      若--limit設(shè)置為5/second,則系統(tǒng)會(huì)每隔5秒往這個(gè)令牌桶中放入一個(gè)令牌,而--limit-burst 5, 則是說(shuō),
       系統(tǒng)啟動(dòng)初始直接向令牌桶中放入5個(gè)令牌,用完了,就只能等5秒后,系統(tǒng)放入令牌了,才能取。
    另注:
      使用時(shí)結(jié)合拒絕策略一起使用:
      iptables -I INPUT -p icmp -m limit 5/second --limit-burst 10 -j ACCEPT
      iptables -I INPUT -p icmp j REJECT

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

  7. 通過(guò)時(shí)間限制通信的模塊:
    -m time [ --datestart | --datestop YYYY[-MM[-DD[Thh[:mm[:ss]]]]] ] \
        [ --timestart | --timestop HH:MM[:SS] ] \
        [!] [ --monthdays | --weekdays Day[,Day...] ] \
        [ --utc | --localtz ]
      注:
          --utc: 使用UTC時(shí)間
         --localtz: 使用系統(tǒng)kernel時(shí)間,默認(rèn)值。
         --datestart 和 --datestop: 此為指定一段時(shí)間內(nèi)做特定流量匹配。
           注:
          它的時(shí)間范圍是: 從 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:
        這些都是相對(duì)時(shí)間,所以可以設(shè)定永久性對(duì)特定流量的匹配。
        注:
          time的時(shí)間范圍: 00:00:00 ~ 23:59:59
          monthdays: 是某月中的 1~31天,但2月需要注意:28或29天.
          weekdays: 是某一周內(nèi)的 Mon, Tue, Wed, Thu, Fri, Sat, Sun其值對(duì)應(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. 動(dòng)態(tài)IP地址本生成模塊:
    此模塊的功能先使用下面示例做一個(gè)簡(jiǎn)單說(shuō)明:
    例如:
     iptables -A INPUT -p icmp --icmp-type echo-request -m length --length 78 -m recent --set --name AdminSSH --rsource -j ACCEPT
      注:
      此語(yǔ)句的功能是,若匹配到ping包的大小為78字節(jié),則滿足記錄recent的條件,此時(shí)iptables將記錄被匹配的IP報(bào)文
      的源IP 到/proc/net/xt_recent/AdminSSH 文件中.
     iptables -A INPUT -p tcp --dport 22 --syn -m recent --rcheck --seconds 15 --name AdminSSH --rsource -j ACCEPT
      注:
      此語(yǔ)句的功能是,若匹配到目標(biāo)端口為22,并且是新建了TCP連接,則滿足檢查recent記錄文件的條件,此時(shí)iptables
      將去檢查/proc/net/xt_recent/AdminSSH文件中是否有 此次連接的源IP存在,若有則檢查此源IP的
      last_seen(即:最后一次記錄的時(shí)間戳),若此時(shí)間戳 和當(dāng)前時(shí)間對(duì)比,若在15秒內(nèi),則允許此源IP訪問(wèn)目的端口22.

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


    此模塊使用格式:
      -m recent [ --name IP地址薄文件名 [ --set [ --rsource | --rdest ] ] ] [ --rttl ] \
          [ --seconds 記錄有效時(shí)間 [ --hitcount 命中次數(shù) ] [ --rcheck | --update ] ] \
          [ --remove ]
        參數(shù)說(shuō)明:
          --name IP地址薄文件名 : 創(chuàng)建一個(gè)指定名稱的IP地址薄文件.【創(chuàng)建】
          --set --rsource | --rdest : 將匹配連接的源IP 或 目的IP記錄到 IP地址薄中?!驹觥?br/>           --remove: 查詢IP列表中是否存在此次連接的IP,若存在則刪除。 【刪】
          --update: 先執(zhí)行 --rcheck ,后更新last_seen 的值?!靖摹?br/>           --rcheck: 及查詢IP列表中是否存在此次連接的IP 【查】
          --seconds 記錄有效時(shí)間 : 查詢IP列表中是否存在此次連接的IP,若存在則檢查其對(duì)應(yīng)的last_seen的時(shí)間戳,
                      是否已經(jīng)超過(guò) “記錄有效時(shí)間”了。單位:秒
          --hitcount 命中次數(shù): 它通常和 --seconds X 一起使用,表示在 X 秒內(nèi)允許一個(gè)IP連接多少次
          --rttl 表示同時(shí)匹配IP包的TTL,man手冊(cè)中解釋大概意思可能是 避免源IP偽造攻擊,
            可通過(guò)此參數(shù)記錄TTL的值,以便比對(duì)?!?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

          #開(kāi)啟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

          通過(guò)一些方式連接一次,即可開(kāi)啟SSH
            nc host 50001
            telnet host 50001
            nmap -sS host 50001

            補(bǔ)充說(shuō)明:
              echo +1.1.1.1 > /proc/net/xt_recent/SSHAccess #向IP列表中手動(dòng)添加記錄
              echo -1.1.1.1 > /proc/net/xt_recent/SSHAccess #從IP列表中手動(dòng)刪除記錄
              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    #記錄每個(gè)IP的數(shù)據(jù)包總數(shù)為20個(gè)
                        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 日志級(jí)別名 | --log-prefix 日志前綴字符串 | --log-tcp-sequence | --log-uid | --log-ip-options | --log-tcp-options ]
    注:
      --log-level 日志級(jí)別        #參考/etc/syslog.conf
      --log-prefix 日志前綴字符串    #記錄此日志到/var/log/messages時(shí),添加一個(gè)記錄標(biāo)記字符串
      --log-tcp-sequence        #記錄TCP連接的序列號(hào).
      --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ī)則的日志,則可以使用此日志模塊,
     它會(huì)在規(guī)則被匹配后,由Linux內(nèi)核通過(guò)netlink套接字多播方式向用戶空間中加入指定組播組的進(jìn)程,
        發(fā)送日志信息。NFLOG:支持1~2^32-1個(gè)組播組, ULOG: 支持1~32個(gè)組播組


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

    格式:
      源地址轉(zhuǎn)換【注: 只能用于nat表中的 POSTROUTING 和 INPUT】:
        -j SNAT --to-source [ipaddr[-ipaddr]][:port[-port]] [--random] [--persistent]
       注:
        --random : 是使用隨機(jī)端口來(lái)識(shí)別每一個(gè)轉(zhuǎn)換后的NAT連接.以便回應(yīng)報(bào)文可以正確轉(zhuǎn)換為內(nèi)網(wǎng)地址。
            默認(rèn)使用它,若指定了端口范圍,則不使用隨機(jī)端口。
        --persistent: 為每個(gè)NAT轉(zhuǎn)換保存記錄,以便下次該客戶端需要轉(zhuǎn)換時(shí),不用隨機(jī)從源地址池中再次分配新地址給它。
            僅在指定了一個(gè)可選的轉(zhuǎn)換源地址范圍時(shí),可用,但這個(gè)源地址范圍一定要能滿足所有內(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)記號(hào)碼
     注:
      此模塊是給數(shù)據(jù)包打標(biāo)記的,它可以配合CONNMARK一起使用,完成更強(qiáng)大的功能,CONNMARK是給一個(gè)連接
      (注: 連接是兩個(gè)方向,一個(gè)請(qǐng)求流,一個(gè)響應(yīng)流組成)打標(biāo)記。

  13. 連接標(biāo)記target模塊:
    -j CONNMARK [--set-mark value[/mask]] [--save-mark | --restore-mark [--mask mask]]
    注:
    #此格式是CONNMARK最基本的用法,高級(jí)用法參考man手冊(cè)【高級(jí)用法主要是對(duì)mark如何與mask做運(yùn)算,得到需要的mark值.】.
    --set-mark value[/mask] : 給一個(gè)連接打指定的標(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ù)時(shí),是否執(zhí)行 mark 與 mask的或運(yùn)算, 若需要?jiǎng)t添加mask.

    例:
     附件中遺留問(wèn)題,左邊遇到的問(wèn)題的解決方案: 完成策略路由
     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    #檢測(cè)數(shù)據(jù)包mark若為20則直接轉(zhuǎn)發(fā)
      iptables -t mangle -A POSTROUTING -s 1.1.1.0/24 -j MARK --set-mark 20 #若為一個(gè)新連接就給數(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ù)提供的時(shí)間范圍來(lái)匹配剩余生存時(shí)間。

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

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


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

      1. 定義兩個(gè)速率估算器分別叫eth0 和 ppp0,它們都以250毫秒為速率測(cè)量時(shí)間間隔,
         允許前后誤差在0.5秒內(nèi),收集eth0 和 ppp0兩個(gè)接口的速率。
        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兩個(gè)接口之間負(fù)載流量。
       #若eth0這個(gè)速率估算器收集了速率為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   #指定是使用相對(duì)比較 或 絕對(duì)比較. 相對(duì)比較: 即差值比較,絕對(duì)比較,
                即: 直接使用速率估算器中的值做比較.
      --rateest name
      --rateest-bps [value]    #bps:即每秒多少bit位.
      --rateest-pps [value]    #pps:即每秒多少個(gè)數(shù)據(jù)包
        例:
         #指定按bps來(lái)比較,直接使用速率估算器中的值來(lái)比較。
          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 [ ...]    #此模塊僅做了基本介紹,沒(méi)做詳細(xì)使用說(shuō)明,
             詳細(xì)使用參考: https://home./netfilter-en/secure-use-of-helpers/
      注:
      CT模塊引入的背景和作用:
      helper模塊:它是解決類似于ftp這種協(xié)議,使用兩個(gè)連接 singaling flow(信令流) 和 data flow(數(shù)據(jù)流),
          信令流用于協(xié)商配置參數(shù),而數(shù)據(jù)流用于傳輸數(shù)據(jù) 的這種協(xié)議連接的匹配問(wèn)題,因?yàn)閕ptables為
          了解決這個(gè)問(wèn)題,引入了一個(gè)3/4層參數(shù),而它打破了OSI七層的規(guī)范,所以后來(lái)就引入了helper
          模塊來(lái)解決此問(wèn)題。

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

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

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

        以下模塊必須使用ports參數(shù),否則無(wú)法正常工作:
          amanda, h323, netbios_ns, pptp, snmp
          注:
           若使用ports=0 這種方式禁止了指定模塊,則該模塊在conntrack中將被自動(dòng)
          重命名為 $PROTO-0. 所以需要手動(dòng)更新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.
          【使用連接跟蹤屬性的值。這不是偽造的候選人?!?br/>         In CMD: Value is fetched from the payload. This is a candidate for forgery.
          【從有效負(fù)載中獲取值。這是偽造的候選人?!?br/>
    rpfilter:
      它是幫助 helper模塊 做安全監(jiān)測(cè)的一個(gè)反欺騙(Anti-spoofing)模塊,由于helper模塊依賴于客戶端
     和服務(wù)器的數(shù)據(jù)做檢測(cè),來(lái)判斷相關(guān)連接,它并不能像conntrack一樣能跟蹤連接的其余部分,因此
     無(wú)法做任何一致性檢查,這就給偽造數(shù)據(jù)的欺騙攻擊帶來(lái)的便利,而rpfilter就是來(lái)解決此問(wèn)題的。
      注:
      rpfilter 模塊是從Linux3.3 和 iptables1.4.13后才有的模塊。它是基于路由的反向路徑過(guò)濾實(shí)現(xiàn)。
      ls   /proc/sys/net/ipv4/{all, Interfaces}/rp_filter    #可用于激活rp_filter功能
                 #【當(dāng)對(duì){interface}進(jìn)行源驗(yàn)證時(shí),將使用conf/{all,interface}/rp_filter的最大值?!?
        注:
         0: 不做源地址驗(yàn)證
           1:嚴(yán)格源地址反向路徑驗(yàn)證模式。每個(gè)傳入數(shù)據(jù)包都要根據(jù)fib_validate_source函數(shù)進(jìn)行測(cè)試,
           如果接口不是最佳的反向路徑,即入接口不是響應(yīng)報(bào)文的出接口,則數(shù)據(jù)包檢查將失敗。
           默認(rèn)情況下,失敗的包將被丟棄?!綬FC3704】
           2:松散源地址反向路徑驗(yàn)證模式。 每個(gè)傳入數(shù)據(jù)包的源地址也將根據(jù)fib_validate_source函數(shù)進(jìn)行測(cè)試,
          如果通過(guò)任何接口都無(wú)法訪問(wèn)源地址,則數(shù)據(jù)包檢查將失敗。
          RFC3704目前推薦的做法是啟用嚴(yán)格模式,以防止IP欺騙攻擊DDos。
          如果使用非對(duì)稱路由或其他復(fù)雜路由,則建議使用松散模式。
            https://home./netfilter-en/secure-use-of-helpers/
          這篇英文博客,有對(duì)該模塊的介紹和使用,為了不理解錯(cuò)誤,先記錄到此。
            https://www.cnblogs.com/lipengxiang2009/p/7446388.html

     另注:
      若啟用了rpfilter功能,若需要知道內(nèi)核丟棄了那些報(bào)文,可啟用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è)置判斷連接(或組成連接的兩個(gè)數(shù)據(jù)流中的一個(gè)流)是否為下載流量的依據(jù),
              是按packets(數(shù)據(jù)包)來(lái)統(tǒng)計(jì),還是按照 bytes(字節(jié)) 或 avgpkt(每個(gè)數(shù)據(jù)包的平均字節(jié)數(shù))
      --connbytes 10000:100000 : 若按bytes來(lái)統(tǒng)計(jì),則一個(gè)數(shù)據(jù)流傳輸?shù)淖止?jié)數(shù)若在一萬(wàn)到十萬(wàn)字節(jié)之間時(shí),
                   則認(rèn)為它是下載流量。
      --connbytes-dir : 指定對(duì)哪種類型的數(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]
     注:
      這個(gè)是給一個(gè)連接(默認(rèn)為TCP)添加標(biāo)記. 它和CONNMARK功能類似,只是CONNMARK是target(即: -j CONNMARK, 目標(biāo)動(dòng)作)。


  19. 根據(jù)連接數(shù) 或 源目地址塊 來(lái)限制并發(fā)連接數(shù).
    -m connlimit [ --connlimit-upto | --connlimit-above Num ] [ --connlimit-saddr | --connlimit-daddr] [ --connlimit-mask PrefixLength]
    注:
     upto 和 above: 分別根據(jù)連接數(shù)來(lái)匹配; upto:連接數(shù)小于或等于Num, above:連接數(shù)大于Num
     saddr |daddr : 設(shè)置匹配其源或目地地址來(lái)匹配
       PrefixLength : 設(shè)置匹配地址段的長(zhǎng)度 或叫掩碼長(zhǎng)度,若省略PrefixLength,默認(rèn)根據(jù)網(wǎng)絡(luò)地址,確定其最大掩碼.
    例:
     iptables -p tcp --syn --dport 80 -m connlimit --connlimit-above 16 --connlimit-mask 24 -j REJECT
        #注: 將每個(gè)源地址為C類網(wǎng)絡(luò)的并行HTTP請(qǐng)求數(shù)量限制為最大16個(gè)。
     ip6tables -p tcp --syn --dport 80 -s fe80::/64 -m connlimit --connlimit-above 16 --connlimit-mask 64 -j REJECT
        #注:將IPv6鏈接地址的并行HTTP請(qǐng)求數(shù)量限制為最大16個(gè)
     iptables -A INPUT -p tcp --syn --dport 23 -m connlimit --connlimit-above 2 -j REJECT
          #注: 限制每個(gè)客戶端只能有兩個(gè)并發(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:由于過(guò)濾,通信被強(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:對(duì)服務(wù)類型和網(wǎng)絡(luò)重定向
  TOS-host-redirect 5/3
  echo-request (ping) 8/0
  router-advertisement 9/0: 路由器通告
  router-solicitation 10/0:路由器請(qǐng)求
  time-exceeded (ttl-exceeded)【TTL時(shí)間溢出,即超時(shí)】
  ttl-zero-during-transit 11/0:傳輸期間生存時(shí)間等于0,而超時(shí)返回.
  ttl-zero-during-reassembly 11/1:數(shù)據(jù)報(bào)在組裝期間生存時(shí)間等于0,而超時(shí)返回.
  parameter-problem【參數(shù)問(wèn)題】
  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:地址掩碼請(qǐng)求
  address-mask-reply 18/0:地址掩碼應(yīng)答

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購(gòu)買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多