天天看點

9個實驗帶你了解iptables的顯示擴充規則設定

本小結重點講解一下iptables的顯示擴充規則設定

顯示擴充:必須顯式地指明使用的擴充子產品進行擴充;

                 使用幫助:

                        Centos 6:man Iptables

                        Centos 7:man iptables-extensions

實驗1:

multiport擴充

                   以離散的方式定義多端口比對;最多指定15個端口;

                    [!]--source-ports,--sports port,port,....:指定多個源端口;

                    [!]--destination-ports,--dports port,port....:指定多個目标端口

                    [!]--ports port ,port...:指明多個端口,不管是源端口還是目标端口都比對

                    允許192.168.32.163這台主機通路本機的22,80端口

                    iptables -A INPUT -s 192.168.32.163 -d 192.168.32.144 -p tcp -m multiport --dports 22,80 -j ACCEPT

實驗2:

iprange擴充   

                    指明連續的(但一般不能是整個網絡)ip位址範圍;

                    [!]--src-rang from[-to]:源IP位址;

                    [!]--dst-rang from[-to]:目标IP位址;

                    172.16.100.5主機到172.16.100.10主機不能通路本機的web服務

                    iptables -A INPUT -d 192.168.32.144 -p tcp --dport 80 -m iprange --src-range 172.16.100.5-172.16.100.10 -j DROP

實驗3:

string擴充

                     對封包中的應用層資料做字元串模式比對檢測;

                     --algo{bm|kmp}:字元串比對檢測算法;

                     bm:Boyer-Moore

                     kmp:Knuth-Pratt_Morrls

                     [!]--string patter:要檢測的字元串模式;

                     [!]--hex-string patter:要檢測的字元創模式,16進制格式;

                     限制192.168.32.163通路本機web網頁中含有have内容的網頁。

                     必須定義到OUTPUT中因為請求的封包中是不帶需要限制的字元串的,隻有響應的封包中才帶有需要限制的字元串

                     iptables -A OUTPUT -s 192.168.32.144 -d 192.168.32.163 -p tcp --sport 80 -m string --algo bm --string "have" -j REJECT

                    在本機安裝web服務,并建立兩個頁面,其中一個含有have字元串,

                    初始狀态防火牆未做任何規則

9個實驗帶你了解iptables的顯示擴充規則設定

                    此時用戶端可以正常通路web伺服器

9個實驗帶你了解iptables的顯示擴充規則設定

                    添加防火牆規則

                    iptables -A OUTPUT -s 192.168.32.144 -d 192.168.32.163 -p tcp --sport 80 -m string --algo bm --string "have" -j REJECT

9個實驗帶你了解iptables的顯示擴充規則設定

                    含有have字段的網頁不能夠通路

實驗4:

time擴充

                   根據将封包到達時間與指定的時間範圍進行比對

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

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

                    --datestart 1970-01-01T00:00:00 

                    --datestop 2030-01-19T04:17:07

                    --timestart hh:mm[:ss]

                    --timestop hh:mm[:ss]

                    [!]--monthdays day[,day]

                    Possible values are 1 to 31.

                    [!]--weekdays day[,day]

                    Possible values are Mon,Tue,Wed,Thu,Fri,Sat,Sun

                    --kerneltz:使用核心上的時區,而非預設的UTC;      

                    定義本機的web服務在每周末下午的14:30到18:30不允許192.168.32.145主機通路

                    iptables  -A INPUT -s  192.168.32.163  -d  192.168.32.144 -p tcp --dport  80  -m time  --timestart  14:30  --timestop 18:30   --weekdays Sat,Sun   --kerneltz  -j DROP  

                    未使用time擴充設定防火牆規則時用戶端可以正常網站

9個實驗帶你了解iptables的顯示擴充規則設定

                    用戶端可以正常通路web服務

9個實驗帶你了解iptables的顯示擴充規則設定

                    添加time擴充通路規則

9個實驗帶你了解iptables的顯示擴充規則設定

實驗5:

connlimit擴充

                     根據每用戶端IP做并發連接配接數量比對;

                     --connlimit-upto n:連接配接的數量小于等于n時比對;

                     --connlimit-above n:連接配接的數量大于n時比對;    

                     我們要求每個用戶端IP最多能夠連接配接兩個

                     iptables  -A  INPUT -d 192.168.32.144 -p tcp --dport 21 -m connlimit  --connlimit-above  2   -j  REJECT

實驗6:

limit擴充

                    基于收發封包的速率做比對;

                    令牌桶過濾器:

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

                     --limit-burst number

                     每分鐘隻允許其它主機對本主機進行ping操作三次,峰值最大為5

                     iptables -I INPUT -d 192.168.32.144 -p icmp  --icmp-type  8  -m limit  --limit  10/minute  --limit-burst  5  -j  ACCEPT  滿足條件執行放行政策

                     iptables -I INPUT 2 -p icmp  -j REJECT 加一條拒絕規則

                     設定規則之前:

9個實驗帶你了解iptables的顯示擴充規則設定

                    添加規則:

9個實驗帶你了解iptables的顯示擴充規則設定

實驗7:

state擴充

                   根據“連接配接追蹤機制”去檢查連接配接的狀态;跟TCP協定沒有關系

                   如何判斷從本機發出的一個連接配接是對别人請求的響應還是自己發起的請求?

                   可以通過本機記錄的conntrack追蹤結果,在有效時間内,可以檢視到每個對本機的請求連接配接跟本機回報的結果的之間的對應關系

                   conntrack機制:追蹤本機上的請求和響應之間關系;狀态有如下幾種;

                                NEW:新送出請求;連接配接追蹤模闆中不存在此連接配接的資訊條目,是以,将其識别為第一次發出的請求;

                                ESTABLISHED:NEW狀态之後,連接配接追蹤模闆中為其建立的條目失效之前期間内所進行的通信狀态;

                                RELATED:相關聯的連接配接;如ftp協定中的指令連接配接與書籍之間的關系;

                                INVALID:無效的連接配接;

                                UNTRACKEN:為進行追蹤的連接配接;     

                    正常情況下,伺服器是不會通過80端口主動發起連接配接請求,22号端口正常情況下也是不會主動發起連接配接請求

                    允許NEW請求連接配接進來

                    iptables -A INPUT -d 192.168.32.144  -p tcp --dport 80 -m state --state NEW -j ACCEPT

                    INPUT鍊放行NEW,ESTABLISHED

                    iptables -A INPUT -d 192.168.32.144 -p tcp -m multiport  --dports 22,80  -m state  --state  NEW,ESTABLISHED  -j ACCEPT                        

                    OUTPUT鍊放行ESTABLISHED   

                    iptables -A OUTPUT -s 192.168.32.144  -p tcp -m multiport  --sports 22,80  -m state  --state  ESTABLISHED  -j ACCEPT     

                    更改預設政策全部為DROP:

                    iptables -P INPUT DROP

                    iptables -P OUTPUT DROP 

                    iptables -P FORWARD DROP

9個實驗帶你了解iptables的顯示擴充規則設定

                   用戶端可以正常通路:

9個實驗帶你了解iptables的顯示擴充規則設定

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

                    /proc/sys/net/nf_contrack_max

                    已經追蹤到的并記錄下來的連接配接:

                    /proc/net/nf_conntrack

                    不同的協定的連續追蹤時長

                    /proc/sys/net/netfilter/ 

                    iptables的連結跟蹤最大容量為/proc/sys/net/ipv4/ip_conntrack_max,連結碰到各種狀态的逾時後就會從表中删除;當模闆滿載時,後續的連接配接可能會逾時

                    解決方法一般有兩個:

                  (1)加大nf_conntrack_max值

                     vim /etc/sysctl.conf

                      net.ipv4.nf_conntrack_max=393216

                      net.ipv4.netfilter.nf_conntrack_max=393216

                      (2)降低nf_conntrack timeout時間

                      vim /etc/sysctl.conf  

                       net.ipv4.netfilter.nf_conntrack_tcp_timeout_established=300

                       net.ipv4.netfilter.nf_conntrack_tcp_timeout_time_wait=120

                       net.ipv4.netfilter.nf_conntrack_tcp_timeout_close_wait=60

                       net.ipv4.netfilter.nf_conntrack_tcp_timeout_fin_wait=120

 實驗8:  

 如何開放被動模式的ftp

                      ftp主動連結模式。用戶端發起請求連接配接伺服器21号端口,伺服器端程序會通過本機的20号端口主動去連接配接用戶端随機端口+1的端口(新資料請求),用戶端有可能存在防火牆,

                      ftp被動連接配接模式。用戶端請伺服器發起資料下載下傳請求,伺服器端随機使用一個端口響應,

                       伺服器端判斷資料連接配接是不是與此前的某個指令連接配接有關聯關系, 隻要資料連與此前的指令連接配接有關聯關系,防火牆就放行,不從端口放行,以轉态為标準。

                       先複制一個檔案到/var/ftp/pub

                       cp   /etc/issue   /var/ftp/pub/

9個實驗帶你了解iptables的顯示擴充規則設定

                       防火牆初始狀态:

                       因為要使用遠端連接配接功能,是以放行了22号端口

9個實驗帶你了解iptables的顯示擴充規則設定

                        用戶端使用lftp連接配接發現連接配接失敗

9個實驗帶你了解iptables的顯示擴充規則設定
9個實驗帶你了解iptables的顯示擴充規則設定

                         手動記載連接配接追蹤的子產品

                          modprobe nf_conntrack_ftp

9個實驗帶你了解iptables的顯示擴充規則設定

                          設定防火牆規則放行指令連接配接:

                          iptables -A INPUT -d 192.168.32.144 -p tcp --dport 21 -m state  --state  NEW,ESTABLISHED  -j ACCEPT

                          iptables -A OUTPUT -s 192.168.32.144  -p tcp --sport 21 -m state --state ESTABLISHED -j ACCEPT

                          放行資料連接配接:

                          iptables -A INPUT -d 192.168.32.144 -p tcp -m state --state RELATED,ESTABLISHED -j ACCEPT

                          iptables -A OUTPUT -s 192.168.32.144 -p tcp -m state --state  ESTABLISHED  -j ACCEPT

                          此時繼續通路可以看到

9個實驗帶你了解iptables的顯示擴充規則設定
9個實驗帶你了解iptables的顯示擴充規則設定

實驗9:

規則優化:

                       伺服器規則優化設定:任何不允許的通路,應該在請求到達時給予拒絕;

                     (1)可安全放行所有入站的狀态為ESTABLISHED狀态連接配接;

                     (2)可安全放行所有出站的狀态為ESTABLISHED狀态連接配接;

                     (3)謹慎放行入站的新請求;

                     (4)有特殊目的的限制通路功能,要于芳心規則之前加以決絕;

9個實驗帶你了解iptables的顯示擴充規則設定

                        iptables -I  INPUT -d  192.168.32.144 -m state --state ESTABLISHED -j ACCEPT                                    

9個實驗帶你了解iptables的顯示擴充規則設定

                        iptables -I INPUT  2 -d 192.168.32.144 -p tcp -m multiport --dport 21,22,80  -m state --state NEW -j ACCEPT

                        iptables -I INPUT 3 -d 192.168.32.144 -p tcp -m state --state RELATED -j ACCEPT

                        iptables -D INPUT 4

                        iptables -D INPUT 4        

                         出站規則設定

                         iptables -I OUTPUT -s 192.168.32.144 -m state --state ESTABLISHED -j ACCEPT     

                         iptables -D OUTPUT 2

                         iptables -D OUTPUT 2

9個實驗帶你了解iptables的顯示擴充規則設定

                         限制掉web服務回報的請求中含有have的頁面

9個實驗帶你了解iptables的顯示擴充規則設定
9個實驗帶你了解iptables的顯示擴充規則設定

                         iptables -I OUTPUT -m string --algo kmp --string "have" -j REJECT

9個實驗帶你了解iptables的顯示擴充規則設定
9個實驗帶你了解iptables的顯示擴充規則設定

                         備注:其實在前端的web服務異常繁忙的伺服器上的使用state連接配接追蹤功能是不明智的,在講到叢集負載的時候我們将重點讨論這個問題

繼續閱讀