溫馨提示×

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

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

iptables從入門到應(yīng)用的實(shí)例分析

發(fā)布時(shí)間:2021-11-03 16:43:24 來源:億速云 閱讀:184 作者:柒染 欄目:建站服務(wù)器

iptables從入門到應(yīng)用的實(shí)例分析,很多新手對(duì)此不是很清楚,為了幫助大家解決這個(gè)難題,下面小編將為大家詳細(xì)講解,有這方面需求的人可以來學(xué)習(xí)下,希望你能有所收獲。

iptables從入門到應(yīng)用

 一、簡(jiǎn)介

 1.1、是什么?

    iptables是隔離主機(jī)以及網(wǎng)絡(luò)的工具,通過自己設(shè)定的規(guī)則以及處理動(dòng)作對(duì)數(shù)據(jù)報(bào)文進(jìn)行檢測(cè)以及處理。 

 1.2、發(fā)展史

    防火墻的發(fā)展史就是從墻到鏈再到表的過程,也即是從簡(jiǎn)單到復(fù)雜的過程。為什么規(guī)則越來越多,因?yàn)榛ヂ?lián)網(wǎng)越來越不安全了,所有防火墻的的規(guī)則也越來越復(fù)雜。防火的工具變化如下:

    ipfirewall(墻)-->ipchains(鏈條)--iptables(表)

    2.0版內(nèi)核中,包過濾機(jī)制是ipfw,管理工具是ipfwadm;

    2.2 版內(nèi)核中,包過濾機(jī)制ipchain,管理工具是ipchains;

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

 二、原理

iptables [-t table] {-A|-C|-D} chain rule-specification

  iptables [-t table] -I chain [rulenum] rule-specification

  iptables [-t table] -R chain rulenum rule-specification

  iptables [-t table] -D chain rulenum

  iptables [-t table] -S [chain [rulenum]]

  iptables [-t table] {-F|-L|-Z} [chain [rulenum]] [options...]

  iptables [-t table] -N chain

  iptables [-t table] -X [chain]

  iptables [-t table] -P chain target

  iptables [-t table] -E old-chain-name new-chain-name

    rule-specification = [matches...] [target]

   match = -m matchname [per-match-options]

   target = -j targetname [per-target-options]

 3.4、語法結(jié)構(gòu)解析

  語法結(jié)構(gòu)解析如下。

    -N, --new-chain chain:新建一個(gè)自定義的規(guī)則鏈;

    -X, --delete-chain [chain]:刪除用戶自定義的引用計(jì)數(shù)為0的空鏈;

    -F, --flush [chain]:清空指定的規(guī)則鏈上的規(guī)則;

    -E, --rename-chain old-chain new-chain:重命名鏈;

    -Z, --zero [chain [rulenum]]:置零計(jì)數(shù)器;

      注意:每個(gè)規(guī)則都有兩個(gè)計(jì)數(shù)器

      packets:被本規(guī)則所匹配到的所有報(bào)文的個(gè)數(shù);

      bytes:被本規(guī)則所匹配到的所有報(bào)文的大小之和;

    -P, --policy chain target 制定鏈表的策略(ACCEPT|DROP|REJECT)

    -A, --append chain rule-specification:追加新規(guī)則于指定鏈的尾部; 

    -I, --insert chain [rulenum] rule-specification:插入新規(guī)則于指定鏈的指定位置,默認(rèn)為首部;

    -R, --replace chain rulenum rule-specification:替換指定的規(guī)則為新的規(guī)則;

    -D, --delete chain rulenum:根據(jù)規(guī)則編號(hào)刪除規(guī)則;

    -D, --delete chain rule-specification:根據(jù)規(guī)則本身刪除規(guī)則;

    規(guī)則顯示      

1

2

3

4

5

6

7

     -L, --list [chain]:列出規(guī)則;

     -v, --verbose:詳細(xì)信息; 

     -vv 更詳細(xì)的信息

     -n, --numeric:數(shù)字格式顯示主機(jī)地址和端口號(hào);

     -x, --exact:顯示計(jì)數(shù)器的精確值,而非圓整后的數(shù)據(jù);

     --line-numbers:列出規(guī)則時(shí),顯示其在鏈上的相應(yīng)的編號(hào);

     -S, --list-rules [chain]:顯示指定鏈的所有規(guī)則;

 3.4.3、鏈

    五鏈的功能如圖所示。   

iptables從入門到應(yīng)用的實(shí)例分析

 3.4.4、條件匹配

    條件匹配分為基本匹配和擴(kuò)展匹配,擴(kuò)展匹配又分為顯示匹配和隱式匹配。

    基本匹配的特點(diǎn)是:無需加載擴(kuò)展模塊,匹配規(guī)則生效;擴(kuò)展匹配的特點(diǎn)是:需要加載擴(kuò)展模塊,匹配規(guī)則方可生效。

    隱式匹配的特點(diǎn):使用-p選項(xiàng)指明協(xié)議時(shí),無需再同時(shí)使用-m選項(xiàng)指明擴(kuò)展模塊以及不需要手動(dòng)加載擴(kuò)展模塊;  

    顯示匹配的特點(diǎn):必須使用-m選項(xiàng)指明要調(diào)用的擴(kuò)展模塊的擴(kuò)展機(jī)制以及需要手動(dòng)加載擴(kuò)展模塊。

    基本匹配的使用選項(xiàng)及功能

1

2

3

4

5

6

-p 指定規(guī)則協(xié)議,tcp udp icmp all

-s 指定數(shù)據(jù)包的源地址,ip hostname

-d 指定目的地址

-i 輸入接口

-o 輸出接口                                              

! 取反

    隱式匹配的使用選項(xiàng)及功能 

-p tcp

  --sport 匹配報(bào)文源端口;可以給出多個(gè)端口,但只能是連續(xù)的端口范圍 

  --dport 匹配報(bào)文目標(biāo)端口;可以給出多個(gè)端口,但只能是連續(xù)的端口范圍

  --tcp-flags mask comp 匹配報(bào)文中的tcp協(xié)議的標(biāo)志位

-p udp

  --sport 匹配報(bào)文源端口;可以給出多個(gè)端口,但只能是連續(xù)的端口范圍

  --dport 匹配報(bào)文目標(biāo)端口;可以給出多個(gè)端口,但只能是連續(xù)的端口范圍

--icmp-type

  /0: echo reply 允許其他主機(jī)ping

  8/0echo request 允許ping其他主機(jī)

   

  • 1

    2

    3

    例子:

            iptables -I INPUT -d 172.16.100.7 -p tcp -m multiport --dports 22,80 -j ACCEPT

            iptables -I OUTPUT -s 172.16.100.7 -p tcp -m multiport --sports 22,80 -j ACCEPT

  •     2.iprange(ip范圍)

         以連續(xù)地址塊的方式來指明多IP地址匹配條件。

    1. 1

      2

      3

      例子:

          iptables -A INPUT -d 172.16.100.7 -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.7 -p tcp --sport 23 -m iprange --dst-range 172.16.100.1-172.16.100.100 -j ACCEPT

        3.time(時(shí)間范圍)

         指定時(shí)間范圍。

    1. 1

      2

      3

       例子:

              iptables -A INPUT -d 172.16.100.7 -p tcp --dport 901 -m time --weekdays Mon,Tus,Wed,Thu,Fri --timestart 08:00:00 --time-stop 18:00:00 -j ACCEPT

              iptables -A OUTPUT -s 172.16.100.7 -p tcp --sport 901 -j ACCEPT

        4.string(字符串)

         對(duì)報(bào)文中的應(yīng)用層數(shù)據(jù)做字符串模式匹配檢測(cè)(通過算法實(shí)現(xiàn))。

    1. 1

      2

      3

          --algo {bm|kmp}:字符匹配查找時(shí)使用算法

          --string "STRING": 要查找的字符串

          --hex-string “HEX-STRING”: 要查找的字符,先編碼成16進(jìn)制格式

        5.connlimit(連接限制)

         根據(jù)每個(gè)客戶端IP作并發(fā)連接數(shù)量限制。

    1

    2

        --connlimit-upto n  連接數(shù)小于等于n時(shí)匹配

        --connlimit-above n 連接數(shù)大于n時(shí)匹配

        6.limit(速率限制)

         報(bào)文速率控制。  

        7.state(狀態(tài))

         追蹤本機(jī)上的請(qǐng)求和響應(yīng)之間的數(shù)據(jù)報(bào)文的狀態(tài)。狀態(tài)有五種:INVALID, ESTABLISHED, NEW, RELATED, UNTRACKED.

    iptables從入門到應(yīng)用的實(shí)例分析

    1.  法則:

    2.         1、對(duì)于進(jìn)入的狀態(tài)為ESTABLISHED都應(yīng)該放行;

    3.         2、對(duì)于出去的狀態(tài)為ESTABLISHED都應(yīng)該放行;

    4.         3、嚴(yán)格檢查進(jìn)入的狀態(tài)為NEW的連接;

    5.         4、所有狀態(tài)為INVALIED都應(yīng)該拒絕;  

       

     3.4.5、處理動(dòng)作

        處理動(dòng)作有內(nèi)置的處理動(dòng)作和自定義的處理動(dòng)作。自定義的處理動(dòng)作用的比較少,因此只介紹內(nèi)置的處理動(dòng)作。

    1

    2

    3

    4

    5

    6

    7

    8

    9

    10

    11

    12

    13

    14

    15

    16

    17

    18

    19

    20

    21

    ACCEPT:允許數(shù)據(jù)包通過

     

    DROP:直接丟棄數(shù)據(jù)包,不給出任何回應(yīng)信息

     

    REJECT:拒絕數(shù)據(jù)包通過,必要時(shí)會(huì)給數(shù)據(jù)發(fā)送端一個(gè)響應(yīng)信息

     

    LOG:在日志文件中記錄日志信息,然后將數(shù)據(jù)包傳遞給下一條規(guī)則

     

    QUEUE: 防火墻將數(shù)據(jù)包移交到用戶空間

     

    RETURN:防火墻停止執(zhí)行當(dāng)前鏈中的后續(xù)Rules,并返回到調(diào)用鏈 

     

    REDIRECT:端口重定向  

     

    MARK:做防火墻標(biāo)記

     

    DNAT:目標(biāo)地址轉(zhuǎn)換

     

    SNAT:源地址轉(zhuǎn)換   

                                                     

    MASQUERADE:地址偽裝

     3.5、保存和載入規(guī)則

        CentOS6和CentOS7保存和載入的規(guī)則稍有差異。

     


        保存:iptables-save > /PATH/TO/SOME_RULE_FILE   

       重載:iptabls-restore < /PATH/FROM/SOME_RULE_FILE    

        -n, --noflush:不清除原有規(guī)則    

        -t, --test:僅分析生成規(guī)則集,但不提交

     

        保存規(guī)則:service iptables save   #保存規(guī)則于/etc/sysconfig/iptables文件,覆蓋保存;   

       重載規(guī)則:service iptables restart #默認(rèn)重載/etc/sysconfig/iptables文件中的規(guī)則   

       配置文件:/etc/sysconfig/iptables-config

    四、iptables的實(shí)踐應(yīng)用

        iptables十分重要與網(wǎng)絡(luò)的安全息息相關(guān),我們理所應(yīng)當(dāng)掌握。不過我們大可不必死記硬背,一定結(jié)合實(shí)際項(xiàng)目,多多練習(xí),效果才會(huì)更好。

     4.1、iptables常用規(guī)則

        1.放行sshd服務(wù)

    1

    2

     iptables -t filter -A INPUT -s 192.168.0.0/24 -d 192.168.0.1 -p tcp --dport 22 -j ACCEPT

     iptables -t filter -A OUTPUT -s 192.168.0.1  -p tcp --sport 22 -j ACCEPT


  •  iptables -I OUTPUT -s 192.168.0.1 -p tcp --sport 80 -j ACCEPT

     iptables -I INPUT -d 192.168.0.1 -p tcp --dport 80 -j ACCEPT

    1

    2

    3

      iptables -A  INPUT  -s 127.0.0.1 -d 127.0.0.1 -i lo -j ACCEPT

      iptables -A  OUTPUT  -s 127.0.0.1 -d 127.0.0.1 -o lo -j ACCEPT

      #不放行本機(jī)的流入與流出,訪問本機(jī)的httpd服務(wù),網(wǎng)頁會(huì)出現(xiàn)Error establishing a database connection。

    1

    iptables -A INPUT -i ens33 -d 192.168.0.1 -p icmp --icmp-type 8 -m limit --limit 2/second --limit-burst 3 -j ACCEPT

     4.2、如何配置iptables

    1

    2

    3

    4

    5

    6

    7

    8

    9

    10

    11

    12

    13

    14

    15

    a) 1. 刪除現(xiàn)有規(guī)則

    iptables -F

    b) 2. 配置默認(rèn)鏈策略

    iptables -P INPUT DROP

    iptables -P FORWARD DROP

    iptables -P OUTPUT DROP

    c) 3. 允許遠(yuǎn)程主機(jī)進(jìn)行SSH連接

    iptables -A INPUT -i eth0 -p tcp –dport 22 -m state –state NEW,ESTABLISHED -j ACCEPT

    iptables -A OUTPUT -o eth0 -p tcp –sport 22 -m state –state ESTABLISHED -j ACCEPT

    d) 4. 允許本地主機(jī)進(jìn)行SSH連接

    iptables -A OUTPUT -o eth0 -p tcp –dport 22 -m state –state NEW,ESTABLISHED -j ACCEPT

    iptables -A INPUT -i eth0 -p tcp –sport 22 -m state –state ESTABLISHED -j ACCEPT

    e) 5. 允許HTTP請(qǐng)求

    iptables -A INPUT -i eth0 -p tcp –dport 80 -m state –state NEW,ESTABLISHED -j ACCEPT

    iptables -A OUTPUT -o eth0 -p tcp –sport 80 -m state –state ESTABLISHED -j ACCEPT

     4.3、iptables初始化腳本

    1

    2

    3

    4

    5

    6

    7

    8

    9

    10

    11

    12

    13

    14

    15

    16

    17

    18

    19

    20

    21

    22

    23

    24

    25

    26

    27

    28

    29

    30

    31

    32

    33

    34

    35

    36

    37

    38

    39

    40

    41

    42

    43

    44

    45

    46

    #!/bin/bash

      

    echo &quot;Setting firewall . . . . start&quot;

      

    #--------RULESET INIT----------#

    iptables -F

    iptables -X

    iptables -P INPUT DROP

    iptables -P OUTPUT ACCEPT

    iptables -P FORWARD ACCEPT

    iptables -A INPUT -s 127.0.0.1 -d 127.0.0.1 -j ACCEPT

    #------------------------------#

    iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

    iptables -A INPUT -i eth0 -p tcp ! --syn -j ACCEPT

    iptables -A OUTPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

    iptables -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT

    #------------------------------#

    #zabbix

    iptables -A INPUT -p tcp --destination-port 10050 -j ACCEPT

    iptables -A INPUT -p udp --destination-port 10051 -j ACCEPT

    iptables -A OUTPUT -p tcp --destination-port 10050 -j ACCEPT

    iptables -A OUTPUT -p udp --destination-port 10051 -j ACCEPT

    #for web

    iptables -A INPUT -p tcp --destination-port 21 -j ACCEPT

    iptables -A INPUT -p tcp --destination-port 80 -j ACCEPT

    iptables -A OUTPUT -p tcp --destination-port 80 -j ACCEPT

    iptables -A OUTPUT -p tcp --destination-port 21 -j ACCEPT

    #for mysql

    iptables -A INPUT -p tcp --destination-port 3306 -j ACCEPT

    iptables -A OUTPUT -p tcp --destination-port 3306 -j ACCEPT

    #for mail

    iptables -A INPUT -p tcp --destination-port 25 -j ACCEPT

    iptables -A OUTPUT -p tcp --destination-port 25 -j ACCEPT

    iptables -A OUTPUT -p tcp --destination-port 110 -j ACCEPT

    #for ssh

    iptables -A INPUT -p tcp -s any/0 --destination-port 22 -j ACCEPT

    iptables -N icmp_allowed

    iptables -A icmp_allowed -p ICMP --icmp-type 11 -j ACCEPT

    iptables -A icmp_allowed -p ICMP --icmp-type 8 -j ACCEPT

    iptables -A icmp_allowed -p ICMP -j DROP

    iptables -A OUTPUT -p icmp -j ACCEPT

    iptables -A INPUT -p icmp -j ACCEPT

    iptables -A FORWARD -p tcp --tcp-flags SYN,ACK,FIN,RST RST -m limit --limit 1/s -j ACCEPT

    iptables -A FORWARD -p icmp --icmp-type echo-request -m limit --limit 1/s -j ACCEPT

    iptables -A FORWARD -p tcp --syn -m limit --limit 1/s -j ACCEPT

    /etc/init.d/iptables save

限制ping 192.168.0.1主機(jī)的數(shù)據(jù)包數(shù),平均2/s個(gè),最多不能超過3個(gè)

放行本機(jī)端的流入流出

看完上述內(nèi)容是否對(duì)您有幫助呢?如果還想對(duì)相關(guān)知識(shí)有進(jìn)一步的了解或閱讀更多相關(guān)文章,請(qǐng)關(guān)注億速云行業(yè)資訊頻道,感謝您對(duì)億速云的支持。

向AI問一下細(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