溫馨提示×

溫馨提示×

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

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

iptables 詳解

發(fā)布時間:2020-07-19 20:48:05 來源:網(wǎng)絡(luò) 閱讀:419 作者:會飛的鳥0 欄目:安全技術(shù)

一、iptables簡介


iptables 的前身叫ipfirewall (內(nèi)核1.x時代),這是一個從freeBSD上移植過來的,能夠工作在內(nèi)核當(dāng)中的,對數(shù)據(jù)包進行檢測的一款簡易訪問控制工具。但是 ipfirewall工作功能極其有限(它需要將所有的規(guī)則都放進內(nèi)核當(dāng)中,這樣規(guī)則才能夠運行起來,而放進內(nèi)核,這個做法一般是極其困難的)。當(dāng)內(nèi)核發(fā) 展到2.x系列的時候,軟件更名為ipchains,它可以定義多條規(guī)則,將他們串起來,共同發(fā)揮作用,而現(xiàn)在,它叫做iptables,可以將規(guī)則組成一個列表,實現(xiàn)絕對詳細的訪問控制功能。

iptables和netfilter的關(guān)系是一個很容易讓人搞不清的問題。很多的知道iptables卻不知道 netfilter。其實iptables只是Linux防火墻的管理工具而已,位于/sbin/iptables。真正實現(xiàn)防火墻功能的是 netfilter,它是Linux內(nèi)核中實現(xiàn)包過濾的內(nèi)部結(jié)構(gòu)。



二、iptables基礎(chǔ)


規(guī)則(rules)其實就是網(wǎng)絡(luò)管理員預(yù)定義的條件,規(guī)則一般的定義為“如果數(shù)據(jù)包頭符合這樣的條件,就這樣處理這個數(shù)據(jù)包”。規(guī)則存儲在內(nèi)核空間的信息 包過濾表中,這些規(guī)則分別指定了源地址、目的地址、傳輸協(xié)議(如TCP、UDP、ICMP)和服務(wù)類型(如HTTP、FTP和SMTP)等。當(dāng)數(shù)據(jù)包與規(guī) 則匹配時,iptables就根據(jù)規(guī)則所定義的方法來處理這些數(shù)據(jù)包,如放行(accept)、拒絕(reject)和丟棄(drop)等。配置防火墻的 主要工作就是添加、修改和刪除這些規(guī)則。



三、iptables傳輸數(shù)據(jù)包的過程


① 當(dāng)一個數(shù)據(jù)包進入網(wǎng)卡時,它首先進入PREROUTING鏈,內(nèi)核根據(jù)數(shù)據(jù)包目的IP判斷是否需要轉(zhuǎn)送出去。 
② 如果數(shù)據(jù)包就是進入本機的,它就會沿著圖向下移動,到達INPUT鏈。數(shù)據(jù)包到了INPUT鏈后,任何進程都會收到它。本機上運行的程序可以發(fā)送數(shù)據(jù)包,這些數(shù)據(jù)包會經(jīng)過OUTPUT鏈,然后到達POSTROUTING鏈輸出。 
③ 如果數(shù)據(jù)包是要轉(zhuǎn)發(fā)出去的,且內(nèi)核允許轉(zhuǎn)發(fā),數(shù)據(jù)包就會如圖所示向右移動,經(jīng)過FORWARD鏈,然后到達POSTROUTING鏈輸出。

iptables 詳解



四、iptables的規(guī)則和鏈


上圖中的五個位置也被稱為五個鉤子函數(shù)(hook functions),也叫五個規(guī)則鏈。

1.PREROUTING (路由前)

2.INPUT (數(shù)據(jù)包流入口)

3.FORWARD (轉(zhuǎn)發(fā)管卡)

4.OUTPUT(數(shù)據(jù)包出口)

5.POSTROUTING(路由后)

 這是netfilter規(guī)定的五個規(guī)則鏈,任何一個數(shù)據(jù)包,只要經(jīng)過本機,必將經(jīng)過這五個鏈中的其中一個鏈。

iptables包含4個表,5個鏈。其中表是按照對數(shù)據(jù)包的操作區(qū)分的,鏈?zhǔn)前凑詹煌腍ook點來區(qū)分的,表和鏈實際上是netfilter的兩個維度。      

(1)4表:

   filter,nat,mangle,raw,默認表是filter(沒有指定表的時候就是filter表)

    filter:一般的過濾功能

    nat:用于nat功能(端口映射,地址映射等)

    mangle:用于對特定數(shù)據(jù)包的修改

    raw:有限級最高,設(shè)置raw時一般是為了不再讓iptables做數(shù)據(jù)包的鏈接跟蹤處理,提高性能

(2)5鏈:PREROUTING,INPUT,FORWARD,OUTPUT,POSTROUTING。

    PREROUTING:數(shù)據(jù)包進入路由表之前

    INPUT:通過路由表后目的地為本機

    FORWARDING:通過路由表后,目的地不為本機

    OUTPUT:由本機產(chǎn)生,向外轉(zhuǎn)發(fā)

    POSTROUTING:發(fā)送到網(wǎng)卡接口之前。


(3)規(guī)則表:
1.filter表——三個鏈:INPUT、FORWARD、OUTPUT
作用:過濾數(shù)據(jù)包  內(nèi)核模塊:iptables_filter.
2.Nat表——三個鏈:PREROUTING、POSTROUTING、OUTPUT
作用:用于網(wǎng)絡(luò)地址轉(zhuǎn)換(IP、端口) 內(nèi)核模塊:iptable_nat
3.Mangle表——五個鏈:PREROUTING、POSTROUTING、INPUT、OUTPUT、FORWARD
作用:修改數(shù)據(jù)包的服務(wù)類型、TTL、并且可以配置路由實現(xiàn)QOS內(nèi)核模塊:iptable_mangle(別看這個表這么麻煩,咱們設(shè)置策略時幾乎都不會用到它)
4.Raw表——兩個鏈:OUTPUT、PREROUTING
作用:決定數(shù)據(jù)包是否被狀態(tài)跟蹤機制處理  內(nèi)核模塊:iptable_raw


(4)規(guī)則鏈:
1.INPUT——進來的數(shù)據(jù)包應(yīng)用此規(guī)則鏈中的策略
2.OUTPUT——外出的數(shù)據(jù)包應(yīng)用此規(guī)則鏈中的策略
3.FORWARD——轉(zhuǎn)發(fā)數(shù)據(jù)包時應(yīng)用此規(guī)則鏈中的策略
4.PREROUTING——對數(shù)據(jù)包作路由選擇前應(yīng)用此鏈中的規(guī)則
(記??!所有的數(shù)據(jù)包進來的時侯都先由這個鏈處理)
5.POSTROUTING——對數(shù)據(jù)包作路由選擇后應(yīng)用此鏈中的規(guī)則
(所有的數(shù)據(jù)包出來的時侯都先由這個鏈處理)

iptables 詳解(5)規(guī)則表之間的優(yōu)先順序:

raw——mangle——nat——filter



五、iptables的命令管理



命令格式:iptables [-t table] SUBCOMMAND chain [matches...] [target]    

如圖示

   iptables 詳解

   iptables 詳解

詳細介紹:


(1)鏈管理
    -N: new,新增一條自定義鏈;
    -X:delete,刪除自定義的空鏈;
    -P:policy,設(shè)置鏈的默認策略;
         ACCEPT:接受
         DROP:丟棄
         REJECT:拒絕
    -E:rename,重命名自定義的未被引用(引用計數(shù)為0)的鏈;


(2)規(guī)則管理
    -A:append,追加,默認為最后一個;
    -I:insert,插入,默認為第一個;
    -D:delete,刪除
        (1) rule specification
        (2) rule number 
    -R:replace,替換
    -F:flush,清除規(guī)則
    -Z:zero,置0;
        iptables的每條規(guī)則都有兩個計數(shù)器:
             (1) 由本規(guī)則匹配到的所有的packets;
             (2) 由本規(guī)則匹配到的所有的bytes;
    -S:selected,以iptables-save命令的格式顯示鏈上的規(guī)則;


例:虛擬機ip地址為192.168.1.108,已安裝httpd服務(wù),編寫一條規(guī)則讓所有主機不可訪問

1
[root@bogon ~]# iptables -t filter -A INPUT -d 192.168.1.108 -p tcp --dport 80 -j REJECT

此時再通過瀏覽器就不能訪問apache測試頁面了

再編寫一條規(guī)則,讓192.168.1.X網(wǎng)段內(nèi)的主機可以訪問

1
2
3
4
5
6
7
8
9
10
11
12
[root@bogon ~]# iptables -t filter -D INPUT 1 #先刪除之前的規(guī)則
[root@bogon ~]# iptables -t filter -I INPUT -s 192.168.1.0/24 -d 192.168.1.108 -j ACCEPT #添加規(guī)則
[root@bogon ~]# iptables -nvL --line-number #查看
Chain INPUT (policy ACCEPT 3 packets, 840 bytes)
num   pkts bytes target     prot opt in     out     source               destination         
1       72  5308 ACCEPT     all  --  *      *       192.168.1.0/24       192.168.1.108       
 
Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
num   pkts bytes target     prot opt in     out     source               destination         
 
Chain OUTPUT (policy ACCEPT 51 packets, 5708 bytes)
num   pkts bytes target     prot opt in     out     source               destination

修改本規(guī)則,讓本網(wǎng)段內(nèi)的不能訪問apache測試頁面

1
[root@bogon ~]# iptables -t filter -R INPUT 1 -s 192.168.1.0/24 -d 192.168.1.108 -j REJECT

(3)查看
    -L: list,列出規(guī)則
    -n:numeric,以數(shù)字格式顯示地址和端口;
    -v:verbose,詳細信息;-vv, -vvv
    -x:exactly,顯示計數(shù)器的精確值而非單位換算后的結(jié)果;
    --line-numbers:顯示鏈上的規(guī)則的編號;            
    組合:-nvL

1
2
3
4
5
6
7
8
9
[root@bogon ~]# iptables -nvL
Chain INPUT (policy ACCEPT 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination         
 
Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination         
 
Chain OUTPUT (policy ACCEPT 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination

    
匹配條件
(4)基本匹配:netfilter自帶的匹配機制
    [!] -s, --source address[/mask][,...]:原地址匹配
    [!] -d, --destination address[/mask][,...]:目標(biāo)地址匹配
    [!] -i, --in-interface name:限制報文流入的接口,只能用于PREROUTING,INPUT及FORWARD;
    [!] -o, --out-interface name:限制報文流出的接口,只能用于OUTPUT,F(xiàn)ORWARD及POSTROUTING;

(5)擴展匹配:經(jīng)由擴展模塊引入的匹配機制,-m matchname
    隱式擴展:可以不用使用-m選項專門加載響應(yīng)模塊;前提是要使用-p選項可匹配何種協(xié)議;

        tcp、udp、icmp

    顯式擴展:必須由-m選項專門加載響應(yīng)模塊;
        multiport
        iprange
        string
        time
        connlimit
        limit
        state


(5.1)隱式擴展
    [!]  -p, --protocol PROTOCOL PROTOCOL:
    協(xié)議:tcp, udp, icmp, icmpv6, esp, ah, sctp, mh or "all"
                    
    tcp: 隱含指明了“-m tcp”,有專用選項:
    [!] --source-port,--sport  port[:port]:匹配報文中的tcp首部的源端口;可以是端口范圍;
    [!] --destination-port,--dport port[:port]:匹配報文中的tcp首部的目標(biāo)端口;可以是端口范圍;
    [!] --tcp-flags mask comp:檢查報文中mask指明的tcp標(biāo)志位,而要這些標(biāo)志位comp中必須為1;
        --tcp-flags  syn,fin,ack,rst  syn
        --tcp-flags  syn,fin,ack,rst  ack,fin 
    [!] --syn:
        --syn相當(dāng)于“--tcp-flags  syn,fin,ack,rst  syn”;tcp三次握手的第一次                       
    udp:隱含指明了“-m udp”,有專用選項:
    [!] --source-port,--sport  port[:port]:匹配報文中的udp首部的源端口;可以是端口范圍;
    [!] --destination-port,--dport port[:port]:匹配報文中udp首部的目標(biāo)端口;可以是端口范圍
                        
    icmp:隱含指明了“-m icmp”,有專用選項:
    [!] --icmp-type {type[/code]|typename}
        type/code: 
            0/0:echo reply   別人可以ping自己
            8/0:echo request 自己可以ping別人    

例:將虛擬機192.168.1.108設(shè)置為,自己可以ping別人,而別人不能ping自己

對于ping這個協(xié)議,進來的為8(ping),出去的為0(響應(yīng)).我們?yōu)榱诉_到目的,需要8出去,允許0進來

1
2
[root@bogon ~]# iptables -t filter -A INPUT -d 192.168.1.108 -p icmp --icmp-type 8 -j DROP #設(shè)置別人ping自己的數(shù)據(jù)包不能通過
[root@bogon ~]# iptables -t filter -A OUTPUT -s 192.168.1.108 -p icmp --icmp-type 0 -j ACCEPT #設(shè)置自己ping別人的數(shù)據(jù)包可以通過

               

       
(5.2)顯式擴展          
5.2.1 multiport:多端口匹配
    以離散方式定義多端口匹配,最多可以指定15個端口;           
    [!] --source-ports,--sports port[,port|,port:port]...
    [!] --destination-ports,--dports port[,port|,port:port]...
    [!] --ports port[,port|,port:port]...

1
2
 [root@bogon ~]# iptables -I INPUT -s 0/0 -d 192.168.1.108 -p tcp  -m multiport --dports 22,80 -j ACCEPT #允許所有主機訪問192.168.1.108的22和80端口
 [root@bogon ~]# iptables -I OUTPUT -d 0/0 -s 192.168.1.108 -p tcp  -m multiport --sports 22,80 -j ACCEPT #允許192.168.1.108的主機可以通過22和80端口發(fā)送數(shù)據(jù)包

5.2.2 iprange:指明一段連續(xù)的ip地址范圍做為源地址或目標(biāo)地址匹配;
    [!] --src-range from[-to]:源地址范圍 
    [!] --dst-range from[-to]:目標(biāo)地址范圍

1
 [root@bogon ~]# iptables -A INPUT -p tcp -m iprange --src-range 192.168.0.100-192.168.0.105 --dport 22 -j ACCEPT #匹配一組ip地址192.168.0.100-192.168.0.105

                
5.2.3 string:對報文中的應(yīng)用層數(shù)據(jù)做字符串匹配檢測;
        --algo {bm|kmp}:指明算法
            (bm = Boyer-Moore, kmp = Knuth-Pratt-Morris)
    [!] --string pattern:給定要檢查的字符串模式;
    [!] --hex-string pattern:給定要檢查的字符串模式;
                

1
[root@bogon ~]# iptables -I OUTPUT -s 192.168.1.108 -d 0/0 -p tcp --sport 80 -m string --algo bm --string "old" -j REJECT #有"old"字符串的拒絕訪問

                


向AI問一下細節(jié)

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

AI