一、設置主機防火墻。
開放: 服務器的:web服務、vsftpd 文件服務、ssh遠程連接服務、ping 請求。
1、開放sshd服務
開放流入本地主機,22端口的數據報文。
[root@stu13?~]#?iptables?-A?INPUT?--destination?192.168.60.99?-p?tcp?--dport?22?-j?ACCEPT
開放從本地主機22端口流出的數據報文
[root@stu13?~]#?iptables?-A?OUTPUT?--source?192.168.60.99?-p?tcp?--sport?22?-j?ACCEPT
修改默認策略為:DROP。 目的禁止所有報文通過本機的TCP/IP協議棧,再開放指定端口的服務。
[root@stu13?~]#?iptables?-P?INPUT?DROP
[root@stu13?~]#?iptables?-P?OUTPUT?DROP
如:
[root@stu13?~]#?iptables?-L?-n?-v
Chain?INPUT?(policy?DROP?554?packets,?53329?bytes)?---->?已經阻止到數據包了
pkts?bytes?target?prot?opt?in??out???source??????????destination
1162?60532?ACCEPT?tcp??--??*???*?????0.0.0.0/0???????192.168.60.99???????tcp?dpt:22
匹配到數據包
Chain?FORWARD?(policy?ACCEPT?0?packets,?0?bytes)
pkts?bytes?target?prot?opt?in??out???source????????destination
Chain?OUTPUT?(policy?DROP?0?packets,?0?bytes)
pkts?bytes?target?prot?opt?in??out???source???????????destination
681?96248?ACCEPT?tcp??--??*??????*??192.168.60.99????0.0.0.0/0???????????tcp?spt:22
2、開放本機提供的web服務:
開放訪問本機的80,443服務。
開放流入本地主機,80端口的數據報文
[root@stu13?~]#?iptables?-A?INPUT?--dst?192.168.60.99?-p?tcp?--dport?80?-j?ACCEP
開放從本地主機80端口流出的數據報文
[root@stu13?~]#?iptables?-A?OUTPUT?--src?192.168.60.99?-p?tcp?--sport?80?-j?ACCEPT
開放流入本地主機,443端口的數據報文
[root@stu13?~]#?iptables?-A?INPUT?--dst?192.168.60.99?-p?tcp?--dport?443?-j?ACCEPT
開放從本地主機443端口流出的數據報文
[root@stu13?~]#?iptables?-A?OUTPUT?--src?192.168.60.99?-p?tcp?--sport?443?-j?ACCEPT
3、本機可以接受ping
開放應用層協議為icmp數據報文流入本機
[root@stu13?~]#?iptables?-A?INPUT?-p?icmp?-j?ACCEPT
開放應用層協議為icmp數據報文流出本機
[root@stu13?~]#?iptables?-A?OUTPUT?-p?icmp?-j?ACCEPT
4、開放被動模式FTP服務
開放命令連接的21端口
裝載模塊:這是連接追蹤ftp服務器的數據連接的模塊。
[root@stu13?httpd-2.4.9]#?modprobe?nf_conntrack_ftp
查看是否裝載成功
[root@stu13?~]#?lsmod??|?grep?"nf_conntrack_ftp"
nf_conntrack_ftp???????10475??0
nf_conntrack???????????65428??3?nf_conntrack_ftp,nf_conntrack_ipv4,xt_
開放應用層協議為tcp,目標端口為21的數據報文流入本機
[root@stu13?~]#?iptables?-A?INPUT?--dst?192.168.60.99?-p?tcp?--dport?21?-m?state?--state?NEW?-j?ACCEPT
使用iptables的狀態追蹤功能,追蹤ftp服務器的數據傳輸端口,意思是說:只要是找開的數據傳輸連接傳輸的數據報文與某個已經建立連接有關連,就允許開數據包通過。
[root@stu13?~]#?iptables?-A?INPUT?--dst?192.168.60.99?-m?state?--state?ESTABLISHED,RELATED?-j?ACCEPT
數據流出
[root@stu13?~]#?iptables?-A?OUTPUT?--src?192.168.60.99?-m?state?--state?RELATED,ESTABLISHED?-j?ACCEPT
二、測試:主機防火墻開放的服務是否成功:
、PING 測試:本機PING其它主機
[root@stu13?~]#?ping?-c?1?192.168.60.1
PING?192.168.60.1?(192.168.60.1)?56(84)?bytes?of?data.
64?bytes?from?192.168.60.1:?icmp_seq=1?ttl=64?time=1.81?ms
---?192.168.60.1?ping?statistics?---
1?packets?transmitted,?1?received,?0%?packet?loss,?time?2ms
rtt?min/avg/max/mdev?=?1.812/1.812/1.812/0.000?ms
在windows下ping 192.168.60.99主機
D:\>ping?192.168.60.99
正在?Ping?192.168.60.99?具有?32?字節的數據:
來自?192.168.60.99?的回復:?字節=32?時間=2ms?TTL=64
來自?192.168.60.99?的回復:?字節=32?時間<1ms?TTL=64
192.168.60.99?的?Ping?統計信息:
數據包:?已發送?=?2,已接收?=?2,丟失?=?0?(0%?丟失),
往返行程的估計時間(以毫秒為單位):
最短?=?0ms,最長?=?2ms,平均?=?1ms
2、測試80服務
[root@nfs?~]#?curl?-eI?http://192.168.60.99/index.html
This?Server?is?OK...
3、在Windows 下測試:文件服務器。
D:\>ftp?192.168.60.99
連接到?192.168.60.99。
220?(vsFTPd?2.2.2)
用戶(192.168.60.99:(none)):?ftp
331?Please?specify?the?password.
密碼:
230?Login?successful.
ftp>?get?pub/inittab
200?PORT?command?successful.?Consider?using?PASV.
150?Opening?BINARY?mode?data?connection?for?pub/inittab?(884?bytes).
226?Transfer?complete.
ftp:?收到?884?字節,用時?0.00秒?884000.00千字節/秒。
ftp>
4、測試連接到ssh服務
[root@nfs?~]#?ssh?192.168.60.99
Last?login:?Mon?Aug?18?17:51:20?2014
三、分析優化防火墻
設置開放特定服務后的filter表的規則如下:
[root@stu13?~]#?iptables?--line-numbers?-L?-n?-v
Chain?INPUT?(policy?DROP?1911?packets,?223K?bytes)
num???pkts?bytes?target???prot?opt?in???out??source????????destination
1?????7470??441K?ACCEPT???cp???--??*????*????0.0.0.0/0?????192.168.60.99?tcp?dpt:22
2???????51??4545?ACCEPT???tcp??--??*????*????0.0.0.0/0?????192.168.60.99?tcp?dpt:80
3????????1????60?ACCEPT???cp???--??*????*????0.0.0.0/0?????192.168.60.99?tcp?dpt:443
4????????4???288?ACCEPT???icmp?--??*????*????0.0.0.0/0?????0.0.0.0/0
5???????12???624?ACCEPT???tcp??--??*????*????0.0.0.0/0?????192.168.60.99?tcp?dpt:21?state?NEW
6??????174??8122?ACCEPT???all??--??*????*????0.0.0.0/0?????192.168.60.99?state?RELATED,ESTABLISHED
Chain?FORWARD?(policy?DROP?0?packets,?0?bytes)
num???pkts?bytes?target?????prot?opt?in?????out?????source???????????????destination
Chain?OUTPUT?(policy?DROP?8?packets,?480?bytes)
num???pkts?bytes?target???prot?opt?in??out??source???????????destination
1?????5761??701K?ACCEPT???tcp??--??*???*????192.168.60.99????0.0.0.0/0?????tcp?spt:22
2???????40??4522?ACCEPT???tcp??--??*???*????192.168.60.99????0.0.0.0/0?????tcp?spt:80
3????????1????40?ACCEPT???tcp??--??*???*????192.168.60.99????0.0.0.0/0?????tcp?spt:443
4????????4???288?ACCEPT???icmp?--??*???*????0.0.0.0/0????????0.0.0.0/0
5??????328?22614?ACCEPT???all??--??*???*????192.168.60.99????0.0.0.0/0????state?RELATED,ESTABLISHED
1、優化策略:將多條規則合并成一條。
(1)、使用umltiport擴展模塊合并端口模塊:
[root@stu13?httpd-2.4.9]#?ll?/lib/xtables-1.4.7/?|?grep?"multiport"
-rwxr-xr-x.?1?root?root?10772?Feb?22??2013?libxt_multiport.so
[root@stu13?httpd-2.4.9]#?iptables?-I?INPUT?--dst?192.168.60.99?-p?tcp?-m?multiport?--dports?80,443,22?-j?ACCEPT
[root@stu13?httpd-2.4.9]#?iptables?-D?INPUT?2
[root@stu13?httpd-2.4.9]#?iptables?-D?INPUT?2
[root@stu13?httpd-2.4.9]#?iptables?-D?INPUT?2
[root@stu13?httpd-2.4.9]#?iptables?-I?OUTPUT?--src?192.168.60.99?-p?tcp?-m?multiport?--sports?80,443,22?-j?ACCEPT
[root@stu13?httpd-2.4.9]#?iptables?-D?OUTPUT?2
[root@stu13?httpd-2.4.9]#?iptables?-D?OUTPUT?2
[root@stu13?httpd-2.4.9]#?iptables?-D?OUTPUT?2
(2)、查看合并端口后filter過濾表
[root@stu13?~]#?iptables?--line-numbers?-L?-n?-v
Chain?INPUT?(policy?DROP?20?packets,?2060?bytes)
num???pkts?bytes?target?????prot?opt?in?????out?????source???????????????destination
1??????813?49587?ACCEPT?????tcp??--??*??????*???????0.0.0.0/0????????????192.168.60.99???????multiport?dports?80,443,22
2????????4???288?ACCEPT?????icmp?--??*??????*???????0.0.0.0/0????????????0.0.0.0/0
3???????13???676?ACCEPT?????tcp??--??*??????*???????0.0.0.0/0????????????192.168.60.99???????tcp?dpt:21?state?NEW
4??????196??9102?ACCEPT?????all??--??*??????*???????0.0.0.0/0????????????192.168.60.99???????state?RELATED,ESTABLISHED
Chain?FORWARD?(policy?DROP?0?packets,?0?bytes)
num???pkts?bytes?target?????prot?opt?in?????out?????source???????????????destination
Chain?OUTPUT?(policy?DROP?0?packets,?0?bytes)
num???pkts?bytes?target?????prot?opt?in?????out?????source???????????????destination
1??????165?21277?ACCEPT?????tcp??--??*??????*???????192.168.60.99????????0.0.0.0/0???????????multiport?sports?80,443,22
2????????4???288?ACCEPT?????icmp?--??*??????*???????0.0.0.0/0????????????0.0.0.0/0
3??????355?24153?ACCEPT?????all??--??*??????*???????192.168.60.99????????0.0.0.0/0???????????state?RELATED,ESTABLISHED
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的防火墻的規則檢查呢?
2(1)、根據防火墻做數據報文的匹配規則,應該讓處于ESTABLISHED狀態的連接傳輸的數據報文快速??????通過變卦的規則檢查,意思是說:防火墻根據連接追蹤功能一發現該數據報文是ESTABLISHED??????狀態的連接發送的,立馬發行。做法:把允許處于ESTABLISHED連接的數據報文通過的策略放???????在鏈的所有規則的最前面。
(2)、狀態檢測,是連接追蹤模塊實現的。連接追蹤模塊在內核內存中維護一張追蹤表,記錄每個連?????接的狀態,以及連接處于ESTABLISHED的狀態的超時時間和可以追蹤多少個連接以及目前正追??????蹤的連接數等等。注意:要根據實際應用開啟或關閉連接追蹤功能。
連接追蹤模塊可以追蹤的連接數量
[root@stu13?httpd-2.4.9]#?cat?/proc/sys/net/nf_conntrack_max
31928
連接處于ESTABLISHED狀態的超時時長
[root@stu13?/]#?cat?/proc/sys/net/netfilter/nf_conntrack_tcp_timeout_established
432000??約等于5天。
當前追蹤的所有連接:
[root@stu13?httpd-2.4.9]#?cat?/proc/sys/net/netfilter/nf_conntrack_count
3
注意:
如果,我們啟用了iptables/netfilterr 的連接追蹤功能的話,當前追蹤的所有連接數已經達到連接追蹤模塊可以追蹤的連接數量的上限了,且連接追蹤到的連接處于ESTABLISHED狀態的連接,還沒到失效時間。后續新的連接只能等待,iptables/netfilter的連接追蹤表有連接的超時時間到。才可以通過我們的防火墻。而防火墻定義的ESTABLISHED狀態的走超時時長為5天,而我們的TCP連接在TCP的各種狀態的超時時長,都是很短的。所以。會導致大量的后續新的連接被拒絕。也就是出現連接服務器超時的情況發生。所以,根據實際應用調整這些參數很關鍵。或比較繁忙的服務器就不應該開啟iptables/netflter的連接追蹤功能。
iptables/netfilter的連接追蹤功能是通過下述擴展模塊實現的。
[root@stu13?httpd-2.4.9]#?ll?/lib/xtables-1.4.7/?|?grep?"state"
-rwxr-xr-x.?1?root?root??5860?Feb?22??2013?libxt_state.so
提供,允許發往特定端口處于ESTABLISHED狀態連接的數據報文通過TCP/IP協議棧,且把該規則放在鏈的所有規則的最前面。
INPUT表
[root@stu13?httpd-2.4.9]#?iptables?-I?INPUT?1?--dst?192.168.60.99?-p?tcp?-m?multiport?--dports?80,443,22?-m?state?--state??ESTABLISHED,NEW?-j?ACCEPT
[root@stu13?httpd-2.4.9]#?iptables?-D?INPUT?2
OUTPUT表:允許處于ESTABLISHED狀態連接的數據報文從本機出去。且把該規則放在鏈的所有規則的最前面。
[root@stu13?httpd-2.4.9]#?iptables?-I?OUTPUT?1?--src?192.168.60.99?-p?tcp?-m?multiport?--sports?80,443,22?-m?state?--state?ESTABLISHE?-j?ACCEPT
[root@stu13?~]#?iptables?-D?OUTPUT?2
使用狀態檢測功能優化后的:
[root@stu13?~]#?iptables?--line-numbers?-L?-n?-v
Chain?INPUT?(policy?DROP?138?packets,?12760?bytes)
num???pkts?bytes?target?????prot?opt?in?????out?????source???????????????destination
1??????760?49519?ACCEPT?????tcp??--??*??????*???????0.0.0.0/0????????????192.168.60.99???????multiport?dports?80,443,22?state?NEW,ESTABLISHED
2???????14??1128?ACCEPT?????icmp?--??*??????*???????0.0.0.0/0????????????0.0.0.0/0
3???????18???936?ACCEPT?????tcp??--??*??????*???????0.0.0.0/0????????????192.168.60.99???????tcp?dpt:21?state?NEW
4??????299?13853?ACCEPT?????all??--??*??????*???????0.0.0.0/0????????????192.168.60.99???????state?RELATED,ESTABLISHED
Chain?FORWARD?(policy?DROP?0?packets,?0?bytes)
num???pkts?bytes?target?????prot?opt?in?????out?????source???????????????destination
Chain?OUTPUT?(policy?DROP?0?packets,?0?bytes)
num???pkts?bytes?target?????prot?opt?in?????out?????source???????????????destination
1?????1194??153K?ACCEPT?????tcp??--??*??????*???????192.168.60.99????????0.0.0.0/0???????????multiport?sports?80,443,22?state?ESTABLISHED
2???????14??1128?ACCEPT?????icmp?--??*??????*???????0.0.0.0/0????????????0.0.0.0/0
3??????465?30940?ACCEPT?????all??--??*??????*???????192.168.60.99????????0.0.0.0/0???????????state?RELATED,ESTABLISHED
分析:
因為,只要是ESTABLISHED狀態的連接的數據報文,是不會有問題的。不需要檢測端口了。這樣提高了iptable/netfiler檢測數據報文的速度。只要是ESTABLISHED狀態的連接的數據報文都允許通過。
所以,對上述的INPUT表的第一條規則進行拆分,如下
1
[root@stu13?httpd-2.4.9]#?iptables?-I?INPUT?1?--dst?192.168.60.99?-p?tcp?-m?state?--state?ESTABLISHED?-j?ACCEPT
并把發往指定端口的數據報文,進行NEW狀態的數據報文檢測組成一條規則
[root@stu13?httpd-2.4.9]#?iptables?-I?INPUT?2?--dst?192.168.60.99?-p?tcp?-m?multiport?--dports?80,443,21,22?-m?state?--state?NEW?-j?ACCEPT
修改第三條規則
[root@stu13?httpd-2.4.9]#?iptables?-R?INPUT?3?--dst?192.168.60.99?-m?state?--state?RELATED?-j?ACCEPT
刪除
[root@stu13?httpd-2.4.9]#?iptables?-D?INPUT?3
[root@stu13?httpd-2.4.9]#?iptables?-D?INPUT?4
修改后INPUT表變成
[root@stu13?~]#?iptables?--line-numbers?-L?-n?-v
Chain?INPUT?(policy?DROP?129?packets,?11581?bytes)
num???pkts?bytes?target?????prot?opt?in?????out?????source???????????????destination
1?????4793??374K?ACCEPT?????tcp??--??*??????*???????0.0.0.0/0????????????192.168.60.99???????state?ESTABLISHED
2???????35??1820?ACCEPT?????tcp??--??*??????*???????0.0.0.0/0????????????192.168.60.99???????multiport?dports?80,443,21,22?state?NEW
3????????7???364?ACCEPT?????all??--??*??????*???????0.0.0.0/0????????????192.168.60.99???????state?RELATED
4????????0?????0?ACCEPT?????icmp?--??*??????*???????0.0.0.0/0????????????0.0.0.0/0
。。。。。。
分析OUTPU表
Chain?OUTPUT?(policy?DROP?0?packets,?0?bytes)
num???pkts?bytes?target?????prot?opt?in?????out?????source???????????????destination
1?????3466??482K?ACCEPT?????tcp??--??*??????*???????192.168.60.99????????0.0.0.0/0???????????multiport?sports?80,443,22?state?ESTABLISHED
2???????22??1608?ACCEPT?????icmp?--??*??????*???????0.0.0.0/0????????????0.0.0.0/0
3??????547?36931?ACCEPT?????all??--??*??????*???????192.168.60.99????????0.0.0.0/0???????????state?RELATED,ESTABLISHED
分析:跟上述一樣,允許處于ESTABLISHED狀態的連接的數據報文通過TCP/IP協議棧。修改OUTPUT表的第1條與第3條規則
修改第一條規則
[root@stu13?httpd-2.4.9]#?iptables?-R?OUTPUT?1?--src?192.168.60.99?-p?tcp?-m?state?--state?ESTABLISHED?-j?ACCEPT
修改第三條規則
[root@stu13?httpd-2.4.9]#?iptables?-R?OUTPUT?3?--src?192.168.60.99?-m?state?--state?RELATED?-j?ACCEPT
修改后的OOUPUT表的規則如下:
[root@stu13?~]#?iptables?--line-numbers?-L?-n?-v
。。。。。
Chain?OUTPUT?(policy?DROP?0?packets,?0?bytes)
num???pkts?bytes?target?????prot?opt?in?????out?????source???????????????destination
1??????794??148K?ACCEPT?????tcp??--??*??????*???????192.168.60.99????????0.0.0.0/0???????????state?ESTABLISHED
2???????22??1608?ACCEPT?????icmp?--??*??????*???????0.0.0.0/0????????????0.0.0.0/0
3????????0?????0?ACCEPT?????all??--??*??????*???????192.168.60.99????????0.0.0.0/0???????????state?RELATED
經過使用端口合并和iptables/netfilter的狀態追蹤功能優化規則表之后:
[root@stu13?~]#?iptables?--line-numbers?-L?-n?-v
Chain?INPUT?(policy?DROP?540?packets,?53525?bytes)
num???pkts?bytes?target?????prot?opt?in?????out?????source???????????????destination
1??????225?10816?ACCEPT?????tcp??--??*??????*???????0.0.0.0/0????????????192.168.60.99???????state?ESTABLISHED
2????????0?????0?ACCEPT?????tcp??--??*??????*???????0.0.0.0/0????????????192.168.60.99???????multiport?dports?80,443,21,22?state?NEW
3????????0?????0?ACCEPT?????all??--??*??????*???????0.0.0.0/0????????????192.168.60.99???????state?RELATED
4????????0?????0?ACCEPT?????icmp?--??*??????*???????0.0.0.0/0????????????0.0.0.0/0
Chain?FORWARD?(policy?DROP?0?packets,?0?bytes)
num???pkts?bytes?target?????prot?opt?in?????out?????source???????????????destination
Chain?OUTPUT?(policy?DROP?0?packets,?0?bytes)
num???pkts?bytes?target?????prot?opt?in?????out?????source???????????????destination
1??????194?27924?ACCEPT?????tcp??--??*??????*???????192.168.60.99????????0.0.0.0/0???????????state?ESTABLISHED
2????????0?????0?ACCEPT?????icmp?--??*??????*???????0.0.0.0/0????????????0.0.0.0/0
3????????0?????0?ACCEPT?????all??--??*??????*???????192.168.60.99????????0.0.0.0/0???????????state?RELATED
3、使用自定義鏈分成分成等級iptables規則:
如果,防火墻規則很多的話,這樣寫就顯示得很亂,不明了。造成后續添加規則就在很多不便。因為,每種服務的訪問量都不一樣。簡單的合并多個端口的做法并是不很理想。
最好為開放的每個服務都使用一條自定義鏈。這樣,以后我們要為某服務添加或刪除規則只要找到該服務對應的自定義鏈,就可以操作了,很方便。如下:
(1)、為http 80服務自定義一條鏈
[root@stu13?~]#?iptables?-t?filter?-N?http_in
[root@stu13?~]#?iptables?-A?http_in?-d?192.168.60.99?-p?tcp?--dport?80??-m?state?--state?NEW?-j?ACCEPT
INPUT鏈調用該鏈
[root@stu13?~]#?iptables?-I?INPUT?2?-d?192.168.60.99?-p?tcp?--dport?80?-j?http_in
如果,使用自定義規則檢測數據報文沒有匹配到則返回主鏈INPUT
1
[root@stu13?httpd-2.4.9]#?iptables?-A?http_in?-j?RETURN
(2)、為https 443 服務自定義一條鏈
[root@stu13?~]#?iptables?-t?filter?-N?https_in
[root@stu13?~]#?iptables?-A?https_in?-d?192.168.60.99?-p?tcp?--dport?443?-m?state?--state?NEW?-j?ACCEPT
調用自定義鏈
[root@stu13?httpd-2.4.9]#?iptables?-I?INPUT?3?-d?192.168.60.99?-p?tcp?--dport?443?-j?https_in
如果,使用自定義規則檢測數據報文沒有匹配到則返回主鏈INPUT
[root@stu13?httpd-2.4.9]#?iptables?-A?https_in?-j?RETURN
(3)、為ssh服務自定義一條鏈
[root@stu13?~]#?iptables?-t?filter?-N?ssh_in
[root@stu13?~]#?iptables?-A?ssh_in?-d?192.168.60.99?-p?tcp?--dport?22?-m?state?--state?NEW?-j?ACCEPT
調用該鏈
[root@stu13?httpd-2.4.9]#?iptables?-I?INPUT?4?-d?192.168.60.99?-p?tcp?--dport?22?-j?ssh_in
如果,使用自定義規則檢測數據報文沒有匹配到則返回主鏈INPUT
[root@stu13?httpd-2.4.9]#?iptables?-A?ssh_in?-j?RETURN
(4)、為vsftp文件服務自定義一條鏈
[root@stu13?~]#?iptables?-t?filter?-N?vsftp_in
[root@stu13?~]#?iptables?-A?vsftp_in?-d?192.168.60.99?-p?tcp?--dport?21?-m?state?--state?NEW?-j?ACCEPT
調用該鏈
[root@stu13?httpd-2.4.9]#?iptables?-I?INPUT?5?-d?192.168.60.99?-p?tcp?--dport?21?-j?vsftp_in
如果,使用自定義規則檢測數據報文沒有匹配到則返回主鏈INPUT
[root@stu13?httpd-2.4.9]#?iptables?-A?vsftp_in?-j?RETURN
(5)、刪除INPUT鏈的第6條規則(端口合并那條鏈)
1
[root@stu13?httpd-2.4.9]#?iptables?-D?INPUT?6
使用自定義鏈后,規則表如下:
[root@stu13?~]#?iptables?--line-numbers?-L?-n?-v
Chain?INPUT?(policy?DROP?928?packets,?83409?bytes)
num???pkts?bytes?target?????prot?opt?in?????out?????source???????????????destination
1?????7351??435K?ACCEPT?????tcp??--??*??????*???????0.0.0.0/0????????????192.168.60.99???????state?ESTABLISHED
2????????6???312?http_in????tcp??--??*??????*???????0.0.0.0/0????????????192.168.60.99???????tcp?dpt:80
3????????0?????0?https_in???tcp??--??*??????*???????0.0.0.0/0????????????192.168.60.99???????tcp?dpt:443
4????????2???104?ssh_in?????tcp??--??*??????*???????0.0.0.0/0????????????192.168.60.99???????tcp?dpt:22
5????????2???104?vsftp_in???tcp??--??*??????*???????0.0.0.0/0????????????192.168.60.99???????tcp?dpt:21
6????????8???416?ACCEPT?????all??--??*??????*???????0.0.0.0/0????????????192.168.60.99???????state?RELATED
7????????8???672?ACCEPT?????icmp?--??*??????*???????0.0.0.0/0????????????0.0.0.0/0
Chain?FORWARD?(policy?DROP?0?packets,?0?bytes)
num???pkts?bytes?target?????prot?opt?in?????out?????source???????????????destination
Chain?OUTPUT?(policy?DROP?2?packets,?120?bytes)
num???pkts?bytes?target?????prot?opt?in?????out?????source???????????????destination
1?????5842??751K?ACCEPT?????tcp??--??*??????*???????192.168.60.99????????0.0.0.0/0???????????state?ESTABLISHED
2????????0?????0?ACCEPT?????all??--??*??????*???????192.168.60.99????????0.0.0.0/0???????????state?RELATED
3????????8???672?ACCEPT?????icmp?--??*??????*???????0.0.0.0/0????????????0.0.0.0/0
Chain?http_in?(1?references)
num???pkts?bytes?target?????prot?opt?in?????out?????source???????????????destination
1????????6???312?ACCEPT?????tcp??--??*??????*???????0.0.0.0/0????????????192.168.60.99???????tcp?dpt:80?state?NEW
2????????0?????0?RETURN?????all??--??*??????*???????0.0.0.0/0????????????0.0.0.0/0
Chain?https_in?(1?references)
num???pkts?bytes?target?????prot?opt?in?????out?????source???????????????destination
1????????0?????0?ACCEPT?????tcp??--??*??????*???????0.0.0.0/0????????????192.168.60.99???????tcp?dpt:443?state?NEW
2????????0?????0?RETURN?????all??--??*??????*???????0.0.0.0/0????????????0.0.0.0/0
Chain?ssh_in?(1?references)
num???pkts?bytes?target?????prot?opt?in?????out?????source???????????????destination
1????????2???104?ACCEPT?????tcp??--??*??????*???????0.0.0.0/0????????????192.168.60.99???????tcp?dpt:22?state?NEW
2????????0?????0?RETURN?????all??--??*??????*???????0.0.0.0/0????????????0.0.0.0/0
Chain?vsftp_in?(1?references)
num???pkts?bytes?target?????prot?opt?in?????out?????source???????????????destination
1????????2???104?ACCEPT?????tcp??--??*??????*???????0.0.0.0/0????????????192.168.60.99???????tcp?dpt:21?state?NEW
2????????0?????0?RETURN?????all??--??*??????*???????0.0.0.0/0????????????0.0.0.0/0
說明:
在INPUT鏈,根據實際應用情況,服務的訪問繁忙程序調整,http_in、https_in、ssh_in、vsftp_in的先后順序,來優化iptables/netfilter
的效率。
有了自定義鏈后,數據報文的檢查流程如下圖:
四、測試優化后的防火墻策略是否成功:
1、測試 http 80 服務
1
2[root@nfs?~]#?curl?http://192.168.60.99/index.html
This?Server?is?OK...
2、測試 ssh 服務
[root@nfs?~]#?ssh?192.168.60.99
Last?login:?Mon?Aug?18?20:21:25?2014?from?192.168.60.88
3、測試vsftp 服務
D:\>ftp?192.168.60.99
連接到?192.168.60.99。
220?(vsFTPd?2.2.2)
用戶(192.168.60.99:(none)):?ftp
331?Please?specify?the?password.
密碼:
230?Login?successful.
ftp>?get?pub/inittab
200?PORT?command?successful.?Consider?using?PASV.
150?Opening?BINARY?mode?data?connection?for?pub/inittab?(884?bytes).
226?Transfer?complete.
ftp:?收到?884?字節,用時?0.07秒?12.63千字節/秒。
ftp>
4、測試ping
(1)、ping本主機
D:\>ping?192.168.60.99
正在?Ping?192.168.60.99?具有?32?字節的數據:
來自?192.168.60.99?的回復:?字節=32?時間=1ms?TTL=64
來自?192.168.60.99?的回復:?字節=32?時間<1ms?TTL=64
來自?192.168.60.99?的回復:?字節=32?時間<1ms?TTL=64
來自?192.168.60.99?的回復:?字節=32?時間<1ms?TTL=64
192.168.60.99?的?Ping?統計信息:
數據包:?已發送?=?4,已接收?=?4,丟失?=?0?(0%?丟失),
往返行程的估計時間(以毫秒為單位):
最短?=?0ms,最長?=?1ms,平均?=?0ms
(2)、本主機ping別的主機
1
[root@stu13?~]#?ping?-c?1?192.168.60.88
PING?192.168.60.88?(192.168.60.88)?56(84)?bytes?of?data.
64?bytes?from?192.168.60.88:?icmp_seq=1?ttl=64?time=0.590?ms
---?192.168.60.88?ping?statistics?---
1?packets?transmitted,?1?received,?0%?packet?loss,?time?5ms
rtt?min/avg/max/mdev?=?0.590/0.590/0.590/0.000?ms
(3)、回環地址
1
[root@stu13?~]#?ping?-c?1?127.0.0.1
PING?127.0.0.1?(127.0.0.1)?56(84)?bytes?of?data.
64?bytes?from?127.0.0.1:?icmp_seq=1?ttl=64?time=0.375?ms
---?127.0.0.1?ping?statistics?---
1?packets?transmitted,?1?received,?0%?packet?loss,?time?0ms
rtt?min/avg/max/mdev?=?0.375/0.375/0.375/0.000?ms