iptables配置工具
iptables配置工具用好了,那配置iptables就簡(jiǎn)單了。
在過去幾年中,Linux作為防火墻平臺(tái)的應(yīng)用顯著增長(zhǎng)。從早期1.2版內(nèi)核的ipfwadm開始,Linux的防火墻代碼也走過了很長(zhǎng)一段路程了。在2.4版的Linux內(nèi)核中,使用了netfilter體系。在最新的2.4版中,Linux大大加強(qiáng)了安全性,例如:更好的加密支持和netfilter體系的使用。netfilter具有完全的向后兼容性。
本文將對(duì)iptables的配置做一個(gè)綜述并且重點(diǎn)介紹一些iptables的配置工具。本文的討論將著眼于Linux內(nèi)核的IP防火墻以及其各種界面的配置工具,比如:GUI或者腳本(shell、Perl或者特定的配置語言)。使用這些工具能夠簡(jiǎn)化iptables的配置減少配置的錯(cuò)誤。關(guān)于iptables的知識(shí)請(qǐng)參考Rusty Russell寫的Linux iptables HOWTO。
使用命令行配置iptables的困難
使用iptables的命令行接口來配置iptables防火墻對(duì)一個(gè)人來說是一個(gè)挑戰(zhàn),用戶很難指定所有IP報(bào)文的行為。用戶需要對(duì)TCP/IP和應(yīng)用層協(xié)議有較深的了解。象其前輩ipchains一樣,iptables把IP過濾規(guī)則歸并到鏈中,IP報(bào)文遍歷規(guī)則鏈接受處理,還可以送到另外的鏈接受處理,或者最后由默認(rèn)策略(ACCEPT、DROP、REJECT)處理。有些網(wǎng)絡(luò)應(yīng)用程序比其它一些程序更容易穿過防火墻,因此需要理解網(wǎng)絡(luò)連接的建立和斷開。
我們看一下POP3協(xié)議,這是最簡(jiǎn)單的協(xié)議之一。允許所有向內(nèi)目標(biāo)端口是110的報(bào)文通過通過無法解決所有的管理問題,因?yàn)檫@樣只能使客戶端向發(fā)出申請(qǐng),而服務(wù)器卻無法應(yīng)答。另外,如果使用網(wǎng)絡(luò)地址轉(zhuǎn)換(NAT)和其它方式的報(bào)文轉(zhuǎn)發(fā),也存在許多問題。因?yàn)榉阑饓Φ呐渲脤⒂绊懙秸麄€(gè)企業(yè)的安全,所以應(yīng)該特別小心。下面將大概地討論iptables的配置,要獲得更多細(xì)節(jié)請(qǐng)參考Linux iptables HOWTO
iptables的命令行選項(xiàng)
在進(jìn)入這時(shí)的討論之前,我們看一下iptables命令行選項(xiàng)的一個(gè)總結(jié)。
規(guī)則鏈維護(hù)選項(xiàng)
1.建立新的規(guī)則鏈(-N)
2.刪除一個(gè)空的規(guī)則鏈(-X)
3.改變一個(gè)內(nèi)置規(guī)則鏈的策略(-P)
4.列出一條規(guī)則鏈中的規(guī)則(-L)
5.擦寫一條規(guī)則鏈中的規(guī)則(-F)
規(guī)則維護(hù)
1.在一條規(guī)則鏈中加入一條新的規(guī)則(-A)
2.刪除一條規(guī)則鏈中某個(gè)位置的規(guī)則(-D)
iptables的優(yōu)點(diǎn)
在討論各種iptables配置工具之前,讓我們看一下iptables的優(yōu)點(diǎn),尤其是netfilter比ipchains具有的優(yōu)勢(shì)。
iptables允許建立狀態(tài)(stateful)防火墻,就是在內(nèi)存中保存穿過防火墻的每條連接。這種模式對(duì)于有效地配置FTP和DNS以及其它網(wǎng)絡(luò)服務(wù)是必要的。
iptables能夠過濾TCP標(biāo)志任意組合報(bào)文,還能夠過濾MAC地址。
系統(tǒng)日志比ipchains更容易配置,擴(kuò)展性也更好。
對(duì)于網(wǎng)絡(luò)地址轉(zhuǎn)換(Network Address Translation)和透明代理的支持,netfilter更為強(qiáng)大和易于使用。
iptable能夠阻止某些DOS攻擊,例如SYS洪泛攻擊。
iptables配置工具
現(xiàn)在,我們看一下Linux iptables的一些配置工具。我主要關(guān)注每個(gè)工具的特征、彈性和易用性。我們將討論以下的工具:
MonMotha's Firewall 2.3.5 作者:MonMotha
Firewallscript (iptables 4.4c-3 devel) 作者:Patrik Hildingsson
Ferm-0.0.18 作者:Auke Kok
AGT-0.83 作者:Andy Gilligan
Knetfilter-1.2.4 作者:Luigi Genoni
gShield-2.0.2 作者:R. Gregory
MonMotha的Firewall 2.3.5
MonMotha寫的Firewall 2.3.5是一個(gè)大約30K的shell腳本。目前,主要適用于基于主機(jī)的保護(hù),因?yàn)橐恍┗诰W(wǎng)絡(luò)的選項(xiàng)正在開發(fā)中。這個(gè)腳本的界面(例如:給iptables傳遞配置選項(xiàng)的方法)有點(diǎn)混亂。不過,它不需要配置文件而且安裝容易,直接復(fù)制到任何地方都可以。默認(rèn)情況下,它根本不做什么,實(shí)際上根本就不執(zhí)行,也缺少文檔。這個(gè)腳本對(duì)于撥號(hào)用戶可能有點(diǎn)用處。
Firewallscript
Firewallscript(IFS 4.4d)也是一個(gè)bash腳本,大約有85K。這個(gè)腳本可以用于基于主機(jī)和網(wǎng)絡(luò)的防護(hù)。首次運(yùn)行時(shí),它會(huì)直接產(chǎn)生一個(gè)配置文件。不過,在默認(rèn)情況下,這個(gè)文件不起什么作用,只有測(cè)試作用。這個(gè)腳本可以配置NAT和地址偽裝。這個(gè)腳本非常復(fù)雜,但是缺少文檔,因此最好能夠仔細(xì)閱讀它的代碼,使用iptables -L命令哪個(gè)鏈已經(jīng)生效,什么被允許/拒絕。這個(gè)腳本的IP報(bào)文追蹤功能還可以為你提供娛樂。此外,它還會(huì)自動(dòng)探測(cè)、加載iptables需要的內(nèi)核模塊。這個(gè)腳本和上一個(gè)腳本還具有取消(undo)功能,能夠恢復(fù)iptables原來的配置文件。
Ferm
Ferm是一個(gè)Perl腳本,使用一種類C語言寫成的配置文件。這種語言非常容易閱讀和理解。這個(gè)腳本有很好的文檔和豐富的示例作為參考。
這是一個(gè)例子:
-----------------------------------------------------------------------------
- # simple workstation example for ferm
- chain input {
- if ppp0 # put your outside interface here
- {
- proto tcp goto fw_tcp;
- proto udp goto fw_udp;
- proto icmp goto fw_icmp;
- }
- }
- chain fw_tcp proto tcp {
- dport ssh ACCEPT;
- syn DENY log;
- dport domain ACCEPT;
- dport 0:1023 DENY log;
- }
- chain fw_udp proto udp {
- DENY log;
- }
- chain fw_icmp proto icmp {
- icmptype (
- destination-unreachable time-exceeded
- ) ACCEPT;
- DENY log;
- }
-----------------------------------------------------------------------------
這個(gè)配置文件將使ferm產(chǎn)生iptables如下規(guī)則:允許向外的ssh和DNS報(bào)文通過;阻塞所有的UDP報(bào)文;只允許兩種類型的ICMP消息通過:目的不可達(dá)和超時(shí),并絕拒絕和日志其它類型的ICMP消息。
AGT
AGT是一個(gè)使用C語言編寫的程序。從它的代碼來看,目前還處于開發(fā)階段。不支持automake,需要手工編輯Makefile文件,文檔也不是很豐富,但是其配置文件非常簡(jiǎn)單。下面就是一個(gè)配置文件:
NEW | FROM-INT
NEW | RESET
|| FROM-INT | icmp | ACCEPT |||||
|| FROM-INT | tcp | ACCEPT ||||| pop3
|| FROM-INT | tcp | ACCEPT ||||| imap
|| RESET | tcp | REJECT --reject-with tcp-reset |||||
這樣的文件格式,加上缺乏必要的文檔,對(duì)使用者來說是一個(gè)很大的挑戰(zhàn)。而且最好多花些時(shí)間學(xué)學(xué)iptables。
knetfilter
knetfilter是一個(gè)非常棒的圖形化iptables配置工具,它是基于KDE的(有KDE1和KDE2兩個(gè)版本)。knetfilter非常易于上手,你可以很容易地使用它來配置基于主機(jī)保護(hù)的規(guī)則和規(guī)則列表;保存和恢復(fù)測(cè)這些規(guī)則和規(guī)則列表;測(cè)試規(guī)則和規(guī)則列表(在同一個(gè)面板上運(yùn)行tcpdump網(wǎng)絡(luò)嗅探器),這一切只要點(diǎn)幾下鼠標(biāo)就可以了。它也支持NAT和網(wǎng)絡(luò)地址偽裝的配置。但是,對(duì)于撥號(hào)工作站,knetfilter工作的不太好,因?yàn)樗枰镜豂P,而且只探測(cè)eth0網(wǎng)絡(luò)接口,不進(jìn)行PPP探測(cè)。這個(gè)工程的文檔也很少,不過因?yàn)槭腔趫D形界面,所以即使不用手冊(cè)也可以很好地使用。
gShield
gShield是一個(gè)bash shell腳本,可能是當(dāng)前最成熟的一個(gè)工具。它的文檔非常豐富,配置文件也比較合理直觀,還能夠設(shè)置NAT。它不但能夠處靜態(tài)IP地址,還能夠處理動(dòng)態(tài)IP地址(例如:PPP)。
gShield還有圖形界面,目前仍然處于早期開發(fā)階段,可以從http://members.home.com/vhodges/gshieldconf.html下載。不過,它似乎只兼容gShield的早期版本(1.x)。
下面是一個(gè)示例配置文件:
FW_ROOT="/etc/firewall"
IPTABLES=`which iptables`
LOCALIF="eth0"
DNS="24.31.195.65"
LTIME="20/m"
ALLOW_DHCP_LEASES="YES"
...
gShield使用的默認(rèn)配置非常安全,特別適合不愿意擺弄配置文件的用戶,不過軟件的編者建議用戶最好能夠通讀整個(gè)配置文件。據(jù)README文件講,gShield實(shí)現(xiàn)了"類tcpwrapper風(fēng)格的服務(wù)訪問控制功能",使用這個(gè)功能用戶可以很容易地阻塞/允許某項(xiàng)服務(wù),而不必考慮報(bào)文方向之類的問題,只要關(guān)心什么客戶連接到服務(wù)器就可以了。
結(jié)論
雖然本文介紹了一些防火墻配置工具,但是實(shí)際上目前還沒有理想的配置工具。最好的配置工具還是iptables命令,這里介紹的這些工具,只適用于對(duì)于使用iptables命令行感覺困難的用戶。
通過文章,我們可以清楚的知道iptables配置工具其實(shí)很好用!
【編輯推薦】