Linux之iptables

面對現如今的網絡環境,網絡安全意識是相當重要,而網絡安全也越來越受到人們的重視,而網絡防護中最簡單且便捷的就是防火牆。

今天就來爲大家介紹Linux下的防火牆的應用。

 

 

一、簡介

Iptables一般分爲主機防火牆(工作與主機邊緣)和網絡擴防火牆(工作與網絡邊緣)

 

防火牆主要作用:工作於主機或網絡邊緣,對於進出的報文根據定義的規則作檢查,進而對被規則匹配到的報文作爲相應處理。

 

而現實環境中會有硬件廠商設計的專門的防火牆硬件設備,其性能要比軟件防火牆好。(但此設備也並非完全依靠硬件,畢竟每個企業的網絡環境不一樣,也需要軟件搭配來完成防火功能)

 

硬件設備分類:IDS(***檢測系統)、IPS(***防禦系統)大部分還用到了HoneyPot(蜜罐)

 

Linuxiptables並不是防火牆,而只是一種規則生成器,真正的防火牆是netfilter,所有的包過濾等功能都是由netfilter提供的。

 

netfilter有五個鏈來實現控制:INPUT到達本機內部的報文必經之路

                             PREROUTING:路由前

                             FORWARD:由本機轉發的報文必經之路

                             OUTPUT:由本機發出的報文的必經之路

                             POSTROUTING:路由後

netfilter規則的功能(表):raw用戶請求nat時限制追蹤功能

                           mangle修改TCP報文首部內容

                           nat地址轉換

                           filter包過濾

表和鏈的關係:filter表用到的鏈有INPUT, FORWARD, OUTPUT

              mangle表用到全部的鏈

              nat表用到的鏈有PREROUTINGSNAT),POSTROUTINGDNAT),OUTPUT

              raw表用到的鏈有PREROUTING, OUTPUT

 

數據報文流程:

   跟本機內部進程通信:

         進入:PREROUTING, INPUT

         出去:OUTPUT, POSTROUTING

 

由本機轉發:

        PREROUTING, FORWARD, POSTROUTING

 

 

數據報文的流向:

        源IP和目標IP由流向決定;

 

 

對於上述表和鏈的敘述我們用一張圖片來展示會更加直觀wKiom1P0uHOy1KYjAAD7JCobOdc184.jpg


如圖示,主機A與主機B之間的通信過程

1、主機A的請求到達網卡1,網卡1交給PREROUTING

2PREROUTING查看該信息是請求的本機還是別的主機,不是本機的話就交給    FORWARD

3、由FORWARD轉發給POSTROUTING

4、由POSTROUTING決定給網卡2,讓網卡2發給主機B

 

主機A與中間應用通信過程

1、主機A的請求到達網卡1,網卡1交給PREROUTING

2、PREROUTING查看該信後發現是請求的本機,所以交給INPUT處理

3、INPUT把信息交給上層處理

4、處理完信息後需要給主機A回覆,所以交給了OUTPUT處理

5、OUTPUT在交給POSTROUTING,由POSTROUTING決定從哪個網卡發給主機A

 


 

二、iptables配置語法

基本語法:iptables  [-t 表名鏈管理 鏈名 匹配條件 -j 處理動作

注:如果不指明表明默認爲filter

對鏈中規則的管理:-A 添加規則

                  -I 插入新規則

                  -D刪除規則

                  -R替換規則

對規則的查詢:-L 列出規則表

              -L -n 以數字格式顯示主機地址和端口

              -L -v 詳細格式

              -L --line-numbers 顯示規則編號

對鏈的管理:    -Fflush, 清空規則鏈;

                -Nnew, 自建一條鏈

                -X: delete, 刪除一條自定義的空鏈

                -Zzero,計數器歸零

                -Ppolicy,設置默認策略,對filter表來講,默認規則爲ACCEPTDROP

                -E:重命名自定義鏈

匹配條件:

   通用匹配: -s 地址:指定報文源IP地址匹配的範圍;可以是IP,也可以是網絡地址;可使用!取反;

              -d 地址:指定報文目標IP地址匹配的範圍;

              -p 協議:指定匹配報文的協議類型,一般有三種tcp, udpicmp;

              -i INTERFACE: 數據報文流入的接口;PREROUTING, INPUT, FORWARD

              -o INTERFACE: 數據報文流出的接口;OUTPUT, FORWARD, POSTROUITING

 

擴展匹配

    隱式擴展:當使用-p {tcp|udp|icmp}中的一種時,可以直接使用擴展專用選項;

              -p tcp:

                 --sport PORT[-PORT]: 指定源端口

                 --dport PORT[-PORT]: 指定目標端口

                 --tcp-flags

 

               -p udp:

                   --sport 

                   --dport

 

顯式擴展:必須明確說明使用哪個模塊進行擴展,而後才能使用其擴展專用選項;

-m state --state 

注:這些規則定義後是立即生效的,但不會永久有效,若想永久有效則需要修改規則文件

Iptables-save > /etc/sysconfig/iptables

 

【示例1】我們在本機上做訪問規則,我們把本機的默認規則全部設置爲拒絕

iptables -t filter -P INPUT -j DROP
iptables -t filter -P OUTPUT -j DROP
iptables -t filter -P FORWORD -j DROP


【示例2】在示例1的基礎上開放自己ping自己

iptables -I INPUT -i lo -j ACCEPT
iptables -I OUTPUT -o lo -j ACCEPT


顯式擴展: -m 擴展模塊名稱

    multiport: 多端口匹配

       專用選項:

           --source-ports, --sports port[,port,port:port]

           --destination-ports, --dports

           --ports

 

【示例3】:開放本機的web服務和ssh服務

 iptables -I INPUT -d 172.16.249.29 -p tcp -m multiport --dports 22,80 -j ACCEPT
 iptables -I OUTPUT -s 172.16.249.29 -p tcp -m multiport --sports 22,80 -j ACCEPT


iprange: 匹配指定範圍內的地址;

   專用選項:

          [!] --src-ragne IP[-IP]

          [!] --dst-range

【示例4】:允許來自172.16.250.1-100的主機telnet本機

iptables -A INPUT -d 172.16.249.29 -p tcp --dport 23 -m iprange --src-range 172.16.250.1-172.16.250.100 -j ACCEPT
iptables -A OUTPUT -s 172.16.249.29 -p tcp --sport 23 -m iprange --dst-range 172.16.250.1-172.16.250.100 -j ACCEPT


string: 字符串匹配,能夠檢測報文應用層中的字符串

字符匹配檢查高效算法kmp, bm

             專用選項:

                   --algo {kmp|bm}

                   --string "STRING"

                   --hex-string "HEX_STRING": HEX_STRING爲編碼成16進制格式的字串;

【示例5】:禁止訪問本機含有“sex”的內容

iptables -I OUTPUT -m string --algo kmp --string "sex" -j DROP


time: 基於時間做訪問控制

專用選項:

     --datestart YYYY[-MM][-DD[Thh[:mm[:ss]]]]

     --datestop 

                --timestart hh:mm[:ss]

     --timestop hh:mm[:ss]

                --weekdays day[,day]

【示例6】:僅週一週二週四週五的8:20-18:40開放本機的web服務

iptables -I INPUT -d 172.16.249.29 -p tcp --dport 80 -m time --timestart 08:20 --timestop 18:40 --weekdays Mon,Tue,Thu,Fri -j REJECT


connlimit: 連接數限制,對每IP所能夠發起併發連接數做限制;

專用選項:

    !] --connlimit-above [n] 

 

【示例7】:限制每個IP最多能迸發2ssh請求

iptables -A INPUT -d 172.16.249.29 -p tcp --dport 22 -m connlimit --connlimit-above 2 -j DROP


limit: 速率限制

專用選項:

     --limit n[/second|/minute|/hour|/day]

     --limit-burst n

 

【示例8】:限制每分鐘只能對本機發起20ICMP請求報文並且空閒5個令牌

iptables -A INPUT -d 172.16.249.29 -p icmp --icmp-type 8 -m limit --limit 20/minute --limit-burst 5 -j ACCEPT


state: 狀態檢查

專用選項:

  --state 

 

連接追蹤中的狀態:

     NEW: 新建立一個會話

     ESTABLISHED:已建立的連接

     RELATED: 有關聯關係的連接

     INVALID: 無法識別的連接

 

調整連接追蹤功能所能容納的連接的最大數目:

/proc/sys/net/nf_conntrack_max


當前追蹤的所有連接

/proc/net/nf_conntrack


不同協議或連接類型追蹤時的屬性:

/proc/sys/net/netfilter目錄:


注:優化規則方法,儘量減少規則條目,彼此不相關的條目,匹配機會較多的放在上邊,屬於同一功能的條目,匹配規則更嚴格的放在上面。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章