天天看點

主機防火牆的設定與優化

一、設定主機防火牆。

開放: 伺服器的:web服務、vsftpd 檔案服務、ssh遠端連接配接服務、ping 請求。

1、開放sshd服務

開放流入本地主機,22端口的資料封包。

1

<code>[root@stu13 ~]</code><code># iptables -A INPUT --destination 192.168.60.99 -p tcp --dport 22 -j ACCEPT</code>

開放從本地主機22端口流出的資料封包

<code>[root@stu13 ~]</code><code># iptables -A OUTPUT --source 192.168.60.99 -p tcp --sport 22 -j ACCEPT</code>

修改預設政策為:DROP。 目的禁止所有封包通過本機的TCP/IP協定棧,再開放指定端口的服務。

2

<code>[root@stu13 ~]</code><code># iptables -P INPUT DROP</code>

<code>[root@stu13 ~]</code><code># iptables -P OUTPUT DROP</code>

如:

3

4

5

6

7

8

9

10

11

<code>[root@stu13 ~]</code><code># iptables -L -n -v</code>

<code>Chain INPUT (policy DROP 554 packets, 53329 bytes) ----&gt; 已經阻止到資料包了</code>

<code> </code><code>pkts bytes target prot opt </code><code>in</code>  <code>out   </code><code>source</code>          <code>destination</code>

<code> </code><code>1162 60532 ACCEPT tcp  --  *   *     0.0.0.0</code><code>/0</code>       <code>192.168.60.99       tcp dpt:22</code>

<code>   </code><code>比對到資料包</code>

<code>Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)</code>

<code> </code><code>pkts bytes target prot opt </code><code>in</code>  <code>out   </code><code>source</code>        <code>destination</code>

<code>Chain OUTPUT (policy DROP 0 packets, 0 bytes)</code>

<code> </code><code>pkts bytes target prot opt </code><code>in</code>  <code>out   </code><code>source</code>           <code>destination</code>

<code>  </code><code>681 96248 ACCEPT tcp  --  *      *  192.168.60.99    0.0.0.0</code><code>/0</code>           <code>tcp spt:22</code>

2、開放本機提供的web服務:

開放通路本機的80,443服務。

開放流入本地主機,80端口的資料封包

<code>[root@stu13 ~]</code><code># iptables -A INPUT --dst 192.168.60.99 -p tcp --dport 80 -j ACCEP</code>

開放從本地主機80端口流出的資料封包

<code>[root@stu13 ~]</code><code># iptables -A OUTPUT --src 192.168.60.99 -p tcp --sport 80 -j ACCEPT</code>

開放流入本地主機,443端口的資料封包

<code>[root@stu13 ~]</code><code># iptables -A INPUT --dst 192.168.60.99 -p tcp --dport 443 -j ACCEPT</code>

開放從本地主機443端口流出的資料封包

<code>[root@stu13 ~]</code><code># iptables -A OUTPUT --src 192.168.60.99 -p tcp --sport 443 -j ACCEPT</code>

3、本機可以接受ping

開放應用層協定為icmp資料封包流入本機

<code>[root@stu13 ~]</code><code># iptables -A INPUT -p icmp -j ACCEPT</code>

開放應用層協定為icmp資料封包流出本機

<code>[root@stu13 ~]</code><code># iptables -A OUTPUT -p icmp -j ACCEPT</code>

4、開放被動模式FTP服務

開放指令連接配接的21端口

裝載子產品:這是連接配接追蹤ftp伺服器的資料連接配接的子產品。

<code>[root@stu13 httpd-2.4.9]</code><code># modprobe nf_conntrack_ftp</code>

檢視是否裝載成功

<code>[root@stu13 ~]</code><code># lsmod  | grep "nf_conntrack_ftp"</code>

<code>nf_conntrack_ftp       10475  0</code>

<code>nf_conntrack           65428  3 nf_conntrack_ftp,nf_conntrack_ipv4,xt_</code>

開放應用層協定為tcp,目标端口為21的資料封包流入本機

<code>[root@stu13 ~]</code><code># iptables -A INPUT --dst 192.168.60.99 -p tcp --dport 21 -m state --state NEW -j ACCEPT</code>

使用iptables的狀态追蹤功能,追蹤ftp伺服器的資料傳輸端口,意思是說:隻要是找開的資料傳輸連接配接傳輸的資料封包與某個已經建立連接配接有關連,就允許開資料包通過。

<code>[root@stu13 ~]</code><code># iptables -A INPUT --dst 192.168.60.99 -m state --state ESTABLISHED,RELATED -j ACCEPT</code>

資料流出

<code>[root@stu13 ~]</code><code># iptables -A OUTPUT --src 192.168.60.99 -m state --state RELATED,ESTABLISHED -j ACCEPT</code>

二、測試:主機防火牆開放的服務是否成功:

1、PING 測試:本機PING其它主機 

<code>[root@stu13 ~]</code><code># ping -c 1 192.168.60.1</code>

<code>PING 192.168.60.1 (192.168.60.1) 56(84) bytes of data.</code>

<code>64 bytes from 192.168.60.1: icmp_seq=1 ttl=64 </code><code>time</code><code>=1.81 ms</code>

<code>--- 192.168.60.1 </code><code>ping</code> <code>statistics ---</code>

<code>1 packets transmitted, 1 received, 0% packet loss, </code><code>time</code> <code>2ms</code>

<code>rtt min</code><code>/avg/max/mdev</code> <code>= 1.812</code><code>/1</code><code>.812</code><code>/1</code><code>.812</code><code>/0</code><code>.000 ms</code>

在windows下ping 192.168.60.99主機

<code>D:\&gt;</code><code>ping</code> <code>192.168.60.99</code>

<code>正在 Ping 192.168.60.99 具有 32 位元組的資料:</code>

<code>來自 192.168.60.99 的回複: 位元組=32 時間=2ms TTL=64</code>

<code>來自 192.168.60.99 的回複: 位元組=32 時間&lt;1ms TTL=64</code>

<code>192.168.60.99 的 Ping 統計資訊:</code>

<code>    </code><code>資料包: 已發送 = 2,已接收 = 2,丢失 = 0 (0% 丢失),</code>

<code>往返行程的估計時間(以毫秒為機關):</code>

<code>    </code><code>最短 = 0ms,最長 = 2ms,平均 = 1ms</code>

2、測試80服務

<code>[root@nfs ~]</code><code># curl -eI http://192.168.60.99/index.html</code>

<code>&lt;h1&gt;This Server is OK...&lt;</code><code>/h1</code><code>&gt;</code>

3、在Windows 下測試:檔案伺服器。

12

13

<code>D:\&gt;</code><code>ftp</code> <code>192.168.60.99</code>

<code>連接配接到 192.168.60.99。</code>

<code>220 (vsFTPd 2.2.2)</code>

<code>使用者(192.168.60.99:(none)): </code><code>ftp</code>

<code>331 Please specify the password.</code>

<code>密碼:</code>

<code>230 Login successful.</code>

<code>ftp</code><code>&gt; get pub</code><code>/inittab</code>

<code>200 PORT </code><code>command</code> <code>successful. Consider using PASV.</code>

<code>150 Opening BINARY mode data connection </code><code>for</code> <code>pub</code><code>/inittab</code> <code>(884 bytes).</code>

<code>226 Transfer complete.</code>

<code>ftp</code><code>: 收到 884 位元組,用時 0.00秒 884000.00千位元組/秒。</code>

<code>ftp</code><code>&gt;</code>

4、測試連接配接到ssh服務

<code>[root@nfs ~]</code><code># ssh 192.168.60.99</code>

<code>Last login: Mon Aug 18 17:51:20 2014</code>

三、分析優化防火牆

設定開放特定服務後的filter表的規則如下:

14

15

16

17

18

19

20

<code>[root@stu13 ~]</code><code># iptables --line-numbers -L -n -v</code>

<code>Chain INPUT (policy DROP 1911 packets, 223K bytes)</code>

<code>num   pkts bytes target   prot opt </code><code>in</code>   <code>out  </code><code>source</code>        <code>destination</code>

<code>1     7470  441K ACCEPT   </code><code>cp</code>   <code>--  *    *    0.0.0.0</code><code>/0</code>     <code>192.168.60.99 tcp dpt:22</code>

<code>2       51  4545 ACCEPT   tcp  --  *    *    0.0.0.0</code><code>/0</code>     <code>192.168.60.99 tcp dpt:80</code>

<code>3        1    60 ACCEPT   </code><code>cp</code>   <code>--  *    *    0.0.0.0</code><code>/0</code>     <code>192.168.60.99 tcp dpt:443</code>

<code>4        4   288 ACCEPT   icmp --  *    *    0.0.0.0</code><code>/0</code>     <code>0.0.0.0</code><code>/0</code>

<code>5       12   624 ACCEPT   tcp  --  *    *    0.0.0.0</code><code>/0</code>     <code>192.168.60.99 tcp dpt:21 state NEW</code>

<code>6      174  8122 ACCEPT   all  --  *    *    0.0.0.0</code><code>/0</code>     <code>192.168.60.99 state RELATED,ESTABLISHED</code>

<code>Chain FORWARD (policy DROP 0 packets, 0 bytes)</code>

<code>num   pkts bytes target     prot opt </code><code>in</code>     <code>out     </code><code>source</code>               <code>destination</code>

<code>Chain OUTPUT (policy DROP 8 packets, 480 bytes)</code>

<code>num   pkts bytes target   prot opt </code><code>in</code>  <code>out  </code><code>source</code>           <code>destination</code>

<code>1     5761  701K ACCEPT   tcp  --  *   *    192.168.60.99    0.0.0.0</code><code>/0</code>     <code>tcp spt:22</code>

<code>2       40  4522 ACCEPT   tcp  --  *   *    192.168.60.99    0.0.0.0</code><code>/0</code>     <code>tcp spt:80</code>

<code>3        1    40 ACCEPT   tcp  --  *   *    192.168.60.99    0.0.0.0</code><code>/0</code>     <code>tcp spt:443</code>

<code>4        4   288 ACCEPT   icmp --  *   *    0.0.0.0</code><code>/0</code>        <code>0.0.0.0</code><code>/0</code>

<code>5      328 22614 ACCEPT   all  --  *   *    192.168.60.99    0.0.0.0</code><code>/0</code>    <code>state RELATED,ESTABLISHED</code>

1、優化政策:将多條規則合并成一條。

(1)、使用umltiport擴充子產品合并端口子產品:

<code>[root@stu13 httpd-2.4.9]</code><code># ll /lib/xtables-1.4.7/ | grep "multiport"</code>

<code>-rwxr-xr-x. 1 root root 10772 Feb 22  2013 libxt_multiport.so</code>

<code>[root@stu13 httpd-2.4.9]</code><code># iptables -I INPUT --dst 192.168.60.99 -p tcp -m multiport --dports 80,443,22 -j ACCEPT</code>

<code>[root@stu13 httpd-2.4.9]</code><code># iptables -D INPUT 2</code>

<code>[root@stu13 httpd-2.4.9]</code><code># iptables -I OUTPUT --src 192.168.60.99 -p tcp -m multiport --sports 80,443,22 -j ACCEPT</code>

<code>[root@stu13 httpd-2.4.9]</code><code># iptables -D OUTPUT 2</code>

(2)、檢視合并端口後filter過濾表

<code>Chain INPUT (policy DROP 20 packets, 2060 bytes)</code>

<code>1      813 49587 ACCEPT     tcp  --  *      *       0.0.0.0</code><code>/0</code>            <code>192.168.60.99       multiport dports 80,443,22</code>

<code>2        4   288 ACCEPT     icmp --  *      *       0.0.0.0</code><code>/0</code>            <code>0.0.0.0</code><code>/0</code>

<code>3       13   676 ACCEPT     tcp  --  *      *       0.0.0.0</code><code>/0</code>            <code>192.168.60.99       tcp dpt:21 state NEW</code>

<code>4      196  9102 ACCEPT     all  --  *      *       0.0.0.0</code><code>/0</code>            <code>192.168.60.99       state RELATED,ESTABLISHED</code>

<code>1      165 21277 ACCEPT     tcp  --  *      *       192.168.60.99        0.0.0.0</code><code>/0</code>           <code>multiport sports 80,443,22</code>

<code>3      355 24153 ACCEPT     all  --  *      *       192.168.60.99        0.0.0.0</code><code>/0</code>           <code>state RELATED,ESTABLISHED</code>

2、使用iptables/netfiltes提供的狀态追蹤功能優化防火牆;

iptables/netfiter提供有一個狀态追蹤功能,隻要第一次連接配接都是NEW狀态。下一次連接配接隻要在狀态追蹤表的計數器的時間沒到之前,該用戶端重建立立的連接配接,iptables/netfilter 也認為該連接配接是ESTABLISHED狀态的。

     通常情況下,處于ESTABLISHED狀态的連接配接要比處于NEW狀态的連接配接要多得多,那麼意味着:ESTABLISHED狀态的連接配接傳輸的資料封包通常要比NEW狀态的連接配接傳輸的資料封包要多得多。資料封包經過某鍊時,資料封包與鍊中的定義的規則一一做比對,順序是從上到下依次做比對操作。如果資料封包的某些特征,如:源IP位址、目标IP位址、源端口、目标端口、連接配接的狀态、TCP的标志位等,與鍊中定義的規則比對到了,就執行【-j】後面的 action(如:DROP|ACCEPT等)。如果資料封包與它經過的鍊中的規則從上到下一一做比對,都沒有比對到的話,就執行iptables中定義的預設規policy。因為,定義防火牆規則的時候,首先拒絕所有(預設政策都為:DROP),開放某些服務的資料封包通過.處于ESTABLISHED狀态的連接配接傳輸的資料封包通常是安全的,應該允許它通過,而資料封包通過的鍊的要做規則檢查的規則又有很多,而處于ESTABLISHED狀态的連接配接,要傳輸的資料封包很多,那麼怎麼樣要它快速通過iptables/netfilter的防火牆的規則檢查呢?

<code>(1)、根據防火牆做資料封包的比對規則,應該讓處于ESTABLISHED狀态的連接配接傳輸的資料封包快速      通過變卦的規則檢查,意思是說:防火牆根據連接配接追蹤功能一發現該資料封包是ESTABLISHED      狀态的連接配接發送的,立馬發行。做法:把允許處于ESTABLISHED連接配接的資料封包通過的政策放       在鍊的所有規則的最前面。</code>

<code>(2)、狀态檢測,是連接配接追蹤子產品實作的。連接配接追蹤子產品在核心記憶體中維護一張追蹤表,記錄每個連     接的狀态,以及連接配接處于ESTABLISHED的狀态的逾時時間和可以追蹤多少個連接配接以及目前正追      蹤的連接配接數等等。注意:要根據實際應用開啟或關閉連接配接追蹤功能。</code>

 連接配接追蹤子產品可以追蹤的連接配接數量

<code>[root@stu13 httpd-2.4.9]</code><code># cat /proc/sys/net/nf_conntrack_max</code>

<code> </code><code>31928</code>

 連接配接處于ESTABLISHED狀态的逾時時長

<code>[root@stu13 /]</code><code># cat /proc/sys/net/netfilter/nf_conntrack_tcp_timeout_established</code>

<code> </code><code>432000  約等于5天。</code>

 目前追蹤的所有連接配接:

<code> </code><code>[root@stu13 httpd-2.4.9]</code><code># cat /proc/sys/net/netfilter/nf_conntrack_count</code>

<code>  </code><code>3</code>

注意:

    如果,我們啟用了iptables/netfilterr 的連接配接追蹤功能的話,目前追蹤的所有連接配接數已經達到連接配接追蹤子產品可以追蹤的連接配接數量的上限了,且連接配接追蹤到的連接配接處于ESTABLISHED狀态的連接配接,還沒到失效時間。後續新的連接配接隻能等待,iptables/netfilter的連接配接追蹤表有連接配接的逾時時間到。才可以通過我們的防火牆。而防火牆定義的ESTABLISHED狀态的走逾時時長為5天,而我們的TCP連接配接在TCP的各種狀态的逾時時長,都是很短的。是以。會導緻大量的後續新的連接配接被拒絕。也就是出現連接配接伺服器逾時的情況發生。是以,根據實際應用調整這些參數很關鍵。或比較繁忙的伺服器就不應該開啟iptables/netflter的連接配接追蹤功能。

iptables/netfilter的連接配接追蹤功能是通過下述擴充子產品實作的。

<code>[root@stu13 httpd-2.4.9]</code><code># ll /lib/xtables-1.4.7/ | grep "state"</code>

<code>-rwxr-xr-x. 1 root root  5860 Feb 22  2013 libxt_state.so</code>

提供,允許發往特定端口處于ESTABLISHED狀态連接配接的資料封包通過TCP/IP協定棧,且把該規則放在鍊的所有規則的最前面。

INPUT表

<code>[root@stu13 httpd-2.4.9]</code><code># iptables -I INPUT 1 --dst 192.168.60.99 -p tcp -m multiport --dports 80,443,22 -m state --state  ESTABLISHED,NEW -j ACCEPT</code>

OUTPUT表:允許處于ESTABLISHED狀态連接配接的資料封包從本機出去。且把該規則放在鍊的所有規則的最前面。

<code>[root@stu13 httpd-2.4.9]</code><code># iptables -I OUTPUT 1 --src 192.168.60.99 -p tcp -m multiport --sports 80,443,22 -m state --state ESTABLISHE -j ACCEPT</code>

<code>[root@stu13 ~]</code><code># iptables -D OUTPUT 2</code>

使用狀态檢測功能優化後的:

<code>Chain INPUT (policy DROP 138 packets, 12760 bytes)</code>

<code>1      760 49519 ACCEPT     tcp  --  *      *       0.0.0.0</code><code>/0</code>            <code>192.168.60.99       multiport dports 80,443,22 state NEW,ESTABLISHED</code>

<code>2       14  1128 ACCEPT     icmp --  *      *       0.0.0.0</code><code>/0</code>            <code>0.0.0.0</code><code>/0</code>

<code>3       18   936 ACCEPT     tcp  --  *      *       0.0.0.0</code><code>/0</code>            <code>192.168.60.99       tcp dpt:21 state NEW</code>

<code>4      299 13853 ACCEPT     all  --  *      *       0.0.0.0</code><code>/0</code>            <code>192.168.60.99       state RELATED,ESTABLISHED</code>

<code>1     1194  153K ACCEPT     tcp  --  *      *       192.168.60.99        0.0.0.0</code><code>/0</code>           <code>multiport sports 80,443,22 state ESTABLISHED</code>

<code>3      465 30940 ACCEPT     all  --  *      *       192.168.60.99        0.0.0.0</code><code>/0</code>           <code>state RELATED,ESTABLISHED</code>

分析:

   因為,隻要是ESTABLISHED狀态的連接配接的資料封包,是不會有問題的。不需要檢測端口了。這樣提高了iptable/netfiler檢測資料封包的速度。隻要是ESTABLISHED狀态的連接配接的資料封包都允許通過。

是以,對上述的INPUT表的第一條規則進行拆分,如下

<code>[root@stu13 httpd-2.4.9]</code><code># iptables -I INPUT 1 --dst 192.168.60.99 -p tcp -m state --state ESTABLISHED -j ACCEPT</code>

并把發往指定端口的資料封包,進行NEW狀态的資料封包檢測組成一條規則

<code>[root@stu13 httpd-2.4.9]</code><code># iptables -I INPUT 2 --dst 192.168.60.99 -p tcp -m multiport --dports 80,443,21,22 -m state --state NEW -j ACCEPT</code>

修改第三條規則

<code>[root@stu13 httpd-2.4.9]</code><code># iptables -R INPUT 3 --dst 192.168.60.99 -m state --state RELATED -j ACCEPT</code>

删除

<code>[root@stu13 httpd-2.4.9]</code><code># iptables -D INPUT 3</code>

<code>[root@stu13 httpd-2.4.9]</code><code># iptables -D INPUT 4</code>

修改後INPUT表變成

<code>Chain INPUT (policy DROP 129 packets, 11581 bytes)</code>

<code>1     4793  374K ACCEPT     tcp  --  *      *       0.0.0.0</code><code>/0</code>            <code>192.168.60.99       state ESTABLISHED</code>

<code>2       35  1820 ACCEPT     tcp  --  *      *       0.0.0.0</code><code>/0</code>            <code>192.168.60.99       multiport dports 80,443,21,22 state NEW</code>

<code>3        7   364 ACCEPT     all  --  *      *       0.0.0.0</code><code>/0</code>            <code>192.168.60.99       state RELATED</code>

<code>4        0     0 ACCEPT     icmp --  *      *       0.0.0.0</code><code>/0</code>            <code>0.0.0.0</code><code>/0</code>

<code>。。。。。。</code>

分析OUTPU表

<code>1     3466  482K ACCEPT     tcp  --  *      *       192.168.60.99        0.0.0.0</code><code>/0</code>           <code>multiport sports 80,443,22 state ESTABLISHED</code>

<code>2       22  1608 ACCEPT     icmp --  *      *       0.0.0.0</code><code>/0</code>            <code>0.0.0.0</code><code>/0</code>

<code>3      547 36931 ACCEPT     all  --  *      *       192.168.60.99        0.0.0.0</code><code>/0</code>           <code>state RELATED,ESTABLISHED</code>

分析:跟上述一樣,允許處于ESTABLISHED狀态的連接配接的資料封包通過TCP/IP協定棧。修改OUTPUT表的第1條與第3條規則

修改第一條規則

<code>[root@stu13 httpd-2.4.9]</code><code># iptables -R OUTPUT 1 --src 192.168.60.99 -p tcp -m state --state ESTABLISHED -j ACCEPT</code>

<code>修改第三條規則</code>

<code>[root@stu13 httpd-2.4.9]</code><code># iptables -R OUTPUT 3 --src 192.168.60.99 -m state --state RELATED -j ACCEPT</code>

修改後的OOUPUT表的規則如下:

<code>。。。。。</code>

<code>1      794  148K ACCEPT     tcp  --  *      *       192.168.60.99        0.0.0.0</code><code>/0</code>           <code>state ESTABLISHED</code>

<code>3        0     0 ACCEPT     all  --  *      *       192.168.60.99        0.0.0.0</code><code>/0</code>           <code>state RELATED</code>

經過使用端口合并和iptables/netfilter的狀态追蹤功能優化規則表之後:

<code>Chain INPUT (policy DROP 540 packets, 53525 bytes)</code>

<code>1      225 10816 ACCEPT     tcp  --  *      *       0.0.0.0</code><code>/0</code>            <code>192.168.60.99       state ESTABLISHED</code>

<code>2        0     0 ACCEPT     tcp  --  *      *       0.0.0.0</code><code>/0</code>            <code>192.168.60.99       multiport dports 80,443,21,22 state NEW</code>

<code>3        0     0 ACCEPT     all  --  *      *       0.0.0.0</code><code>/0</code>            <code>192.168.60.99       state RELATED</code>

<code>1      194 27924 ACCEPT     tcp  --  *      *       192.168.60.99        0.0.0.0</code><code>/0</code>           <code>state ESTABLISHED</code>

<code>2        0     0 ACCEPT     icmp --  *      *       0.0.0.0</code><code>/0</code>            <code>0.0.0.0</code><code>/0</code>

3、使用自定義鍊分成分成等級iptables規則:

如果,防火牆規則很多的話,這樣寫就顯示得很亂,不明了。造成後續添加規則就在很多不便。因為,每種服務的通路量都不一樣。簡單的合并多個端口的做法并是不很理想。

最好為開放的每個服務都使用一條自定義鍊。這樣,以後我們要為某服務添加或删除規則隻要找到該服務對應的自定義鍊,就可以操作了,很友善。如下:

(1)、為http 80服務自定義一條鍊

<code>[root@stu13 ~]</code><code># iptables -t filter -N http_in</code>

<code>[root@stu13 ~]</code><code># iptables -A http_in -d 192.168.60.99 -p tcp --dport 80  -m state --state NEW -j ACCEPT</code>

INPUT鍊調用該鍊

<code>[root@stu13 ~]</code><code># iptables -I INPUT 2 -d 192.168.60.99 -p tcp --dport 80 -j http_in</code>

如果,使用自定義規則檢測資料封包沒有比對到則傳回主鍊INPUT

<code>[root@stu13 httpd-2.4.9]</code><code># iptables -A http_in -j RETURN</code>

(2)、為https 443 服務自定義一條鍊

<code>[root@stu13 ~]</code><code># iptables -t filter -N https_in</code>

<code>[root@stu13 ~]</code><code># iptables -A https_in -d 192.168.60.99 -p tcp --dport 443 -m state --state NEW -j ACCEPT</code>

調用自定義鍊

<code>[root@stu13 httpd-2.4.9]</code><code># iptables -I INPUT 3 -d 192.168.60.99 -p tcp --dport 443 -j https_in</code>

<code>[root@stu13 httpd-2.4.9]</code><code># iptables -A https_in -j RETURN</code>

(3)、為ssh服務自定義一條鍊

<code>[root@stu13 ~]</code><code># iptables -t filter -N ssh_in</code>

<code>[root@stu13 ~]</code><code># iptables -A ssh_in -d 192.168.60.99 -p tcp --dport 22 -m state --state NEW -j ACCEPT</code>

調用該鍊

<code>[root@stu13 httpd-2.4.9]</code><code># iptables -I INPUT 4 -d 192.168.60.99 -p tcp --dport 22 -j ssh_in</code>

<code>[root@stu13 httpd-2.4.9]</code><code># iptables -A ssh_in -j RETURN</code>

(4)、為vsftp檔案服務自定義一條鍊

<code>[root@stu13 ~]</code><code># iptables -t filter -N vsftp_in</code>

<code>[root@stu13 ~]</code><code># iptables -A vsftp_in -d 192.168.60.99 -p tcp --dport 21 -m state --state NEW -j ACCEPT</code>

<code>[root@stu13 httpd-2.4.9]</code><code># iptables -I INPUT 5 -d 192.168.60.99 -p tcp --dport 21 -j vsftp_in</code>

<code>[root@stu13 httpd-2.4.9]</code><code># iptables -A vsftp_in -j RETURN</code>

(5)、删除INPUT鍊的第6條規則(端口合并那條鍊)

<code>[root@stu13 httpd-2.4.9]</code><code># iptables -D INPUT 6</code>

使用自定義鍊後,規則表如下:

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

<code>Chain INPUT (policy DROP 928 packets, 83409 bytes)</code>

<code>1     7351  435K ACCEPT     tcp  --  *      *       0.0.0.0</code><code>/0</code>            <code>192.168.60.99       state ESTABLISHED</code>

<code>2        6   312 http_in    tcp  --  *      *       0.0.0.0</code><code>/0</code>            <code>192.168.60.99       tcp dpt:80</code>

<code>3        0     0 https_in   tcp  --  *      *       0.0.0.0</code><code>/0</code>            <code>192.168.60.99       tcp dpt:443</code>

<code>4        2   104 ssh_in     tcp  --  *      *       0.0.0.0</code><code>/0</code>            <code>192.168.60.99       tcp dpt:22</code>

<code>5        2   104 vsftp_in   tcp  --  *      *       0.0.0.0</code><code>/0</code>            <code>192.168.60.99       tcp dpt:21</code>

<code>6        8   416 ACCEPT     all  --  *      *       0.0.0.0</code><code>/0</code>            <code>192.168.60.99       state RELATED</code>

<code>7        8   672 ACCEPT     icmp --  *      *       0.0.0.0</code><code>/0</code>            <code>0.0.0.0</code><code>/0</code>

<code>Chain OUTPUT (policy DROP 2 packets, 120 bytes)</code>

<code>1     5842  751K ACCEPT     tcp  --  *      *       192.168.60.99        0.0.0.0</code><code>/0</code>           <code>state ESTABLISHED</code>

<code>2        0     0 ACCEPT     all  --  *      *       192.168.60.99        0.0.0.0</code><code>/0</code>           <code>state RELATED</code>

<code>3        8   672 ACCEPT     icmp --  *      *       0.0.0.0</code><code>/0</code>            <code>0.0.0.0</code><code>/0</code>

<code>Chain http_in (1 references)</code>

<code>1        6   312 ACCEPT     tcp  --  *      *       0.0.0.0</code><code>/0</code>            <code>192.168.60.99       tcp dpt:80 state NEW</code>

<code>2        0     0 RETURN     all  --  *      *       0.0.0.0</code><code>/0</code>            <code>0.0.0.0</code><code>/0</code>

<code>Chain https_in (1 references)</code>

<code>1        0     0 ACCEPT     tcp  --  *      *       0.0.0.0</code><code>/0</code>            <code>192.168.60.99       tcp dpt:443 state NEW</code>

<code>Chain ssh_in (1 references)</code>

<code>1        2   104 ACCEPT     tcp  --  *      *       0.0.0.0</code><code>/0</code>            <code>192.168.60.99       tcp dpt:22 state NEW</code>

<code>Chain vsftp_in (1 references)</code>

<code>1        2   104 ACCEPT     tcp  --  *      *       0.0.0.0</code><code>/0</code>            <code>192.168.60.99       tcp dpt:21 state NEW</code>

說明:

   在INPUT鍊,根據實際應用情況,服務的通路繁忙程式調整,http_in、https_in、ssh_in、vsftp_in的先後順序,來優化iptables/netfilter

的效率。

有了自定義鍊後,資料封包的檢查流程如下圖:

<a href="http://s3.51cto.com/wyfs02/M02/46/BC/wKiom1P0LNWBiKtPAASuyAzTig4758.jpg" target="_blank"></a>

四、測試優化後的防火牆政策是否成功:

1、測試 http 80 服務

<code>[root@nfs ~]</code><code># curl http://192.168.60.99/index.html</code>

2、測試 ssh 服務

<code>Last login: Mon Aug 18 20:21:25 2014 from 192.168.60.88</code>

3、測試vsftp 服務

<code>ftp</code><code>: 收到 884 位元組,用時 0.07秒 12.63千位元組/秒。</code>

4、測試ping

(1)、ping本主機

<code>來自 192.168.60.99 的回複: 位元組=32 時間=1ms TTL=64</code>

<code>    </code><code>資料包: 已發送 = 4,已接收 = 4,丢失 = 0 (0% 丢失),</code>

<code>    </code><code>最短 = 0ms,最長 = 1ms,平均 = 0ms</code>

(2)、本主機ping别的主機

<code>[root@stu13 ~]</code><code># ping -c 1 192.168.60.88</code>

<code>PING 192.168.60.88 (192.168.60.88) 56(84) bytes of data.</code>

<code>64 bytes from 192.168.60.88: icmp_seq=1 ttl=64 </code><code>time</code><code>=0.590 ms</code>

<code>--- 192.168.60.88 </code><code>ping</code> <code>statistics ---</code>

<code>1 packets transmitted, 1 received, 0% packet loss, </code><code>time</code> <code>5ms</code>

<code>rtt min</code><code>/avg/max/mdev</code> <code>= 0.590</code><code>/0</code><code>.590</code><code>/0</code><code>.590</code><code>/0</code><code>.000 ms</code>

<code>(3)、回環位址</code>

<code>[root@stu13 ~]</code><code># ping -c 1 127.0.0.1</code>

<code>PING 127.0.0.1 (127.0.0.1) 56(84) bytes of data.</code>

<code>64 bytes from 127.0.0.1: icmp_seq=1 ttl=64 </code><code>time</code><code>=0.375 ms</code>

<code>--- 127.0.0.1 </code><code>ping</code> <code>statistics ---</code>

<code>1 packets transmitted, 1 received, 0% packet loss, </code><code>time</code> <code>0ms</code>

<code>rtt min</code><code>/avg/max/mdev</code> <code>= 0.375</code><code>/0</code><code>.375</code><code>/0</code><code>.375</code><code>/0</code><code>.000 ms</code>

<code></code>

     本文轉自成長的小蟲 51CTO部落格,原文連結:http://blog.51cto.com/9528du/1542464,如需轉載請自行聯系原作者

繼續閱讀