開源防火牆配置工具簡介

開源防火牆配置工具簡介

 

對所有的Linux系統和網絡管理員來說,一個最基本的技巧是知道如何從頭開始編寫一個強健的iptables防火牆,並且知道如何修改它,使其適應多種不同的情況。然而,在現實世界中,這看起來似乎少之又少。對iptables的學習並非是一個簡單的過程。所有的管理員都應徹底地理解Iptables,不過,另外一個可選擇的方法是運用出色的Linux防火牆生成工具。

 

 

一、Firewall Builder

Firewall Builder又叫Fwbuilder,是一種與廠商無關的防火牆配置和管理軟件。它是一個完善的多平臺的圖形化的防火牆配置和管理工具。它運行在iptablesipfilterOpenBSDPF、思科的PIX之上。通過設計,它將規則設計的細節隱藏起來,而着重於編寫策略。它允許對多個服務器的多個防火牆同時進行管理。被稱作策略編譯器的程序組件能對不同的防火牆策略很容易的進行精確調整,而不需要管理員記住所有服務器防火牆的細節。策略編譯器還確保防火牆是“健全的”,即沒有任何可能對用戶正常使用網絡造成影響的衝突和錯誤。不過,不要在你真實的防火牆上運行防火牆生成器,因爲它需要XWindow。你需要將其運行在一臺工作站上,然後將腳本複製到防火牆上。最後,它遵從雙授權機制,一種是商業慣例的授權,另一種是GNU公共授權(GPL)

 

 

二、Firestarter

Firestarter是一款優秀的圖形化的防火牆生成嚮導,它可以引導你一步一步地通過構建防火牆的過程。對於與局域網共享唯一公共IP地址的NAT防火牆來說,這是一個不錯的選擇,並且在防火牆之後,它還有一些公共服務,或者一個分離的DMZ。它擁有打開或關閉防火牆的一些簡易命令,可以查看狀態視圖和當前的活動。你可以將其運行在一臺headless計算機上,並遠程監視之,或者將其用作一個獨立的防火牆。

 

注意:

Firefaster很笨,它不懂中文,如果在中文Xwindow下使用,請編輯/etc/firestarter/firestarter.sh

# External network interface data 這行註釋的上面,添加一行:

LANG=en_US

 

 

三、Shorewall

Shorewall是一個流行的防火牆生成器,它比Firestarter更加複雜和靈活,並且它適合用於更加複雜的網絡。Shorewall的學習曲線類似於iptables,不過其文檔資料豐富,並且提供提供不同情況的解決方法指南,如單一主機防火牆,兩接口和三接口防火牆,以及擁有多個公共IP地址的防火牆等等。你可以獲得許多關於過濾P2P服務的幫助,如Kazaa速率限制、QqS(質量服務)***轉移歸向等內容。

 

1.Shorewall簡單配置(shorewall版本爲3.2

安裝完畢後,必需先要設定各個設定檔才能啓動shorewall

1.1 /etc/shorewall/shorewall.conf

shorewall.conf這個設定文件是整個軟件配置中最重要的一個檔案,裏面有許多的設定,若是搞錯的話,很可能會造成shorewall的啓動失敗或是錯誤:

STARTUP_ENABLED=Yes

預設是爲No,如果您決定要使用shorewall來管理您的防火牆的話,那麼強烈的建議您將這個選項設定爲Yes

LOGFILE=/var/log/messages

設定記錄文件的位置,預設的記錄文件是messages這個檔案,您也可以指定另外的檔案,以區分防火牆及一般訊息,便於除錯時較能快速掌握狀況。

LOGNEWNOTSYN=info

設定記錄文件的等級,一般來說shorewall的記錄是由syslog這隻程序來進行,一共有八級,而shorewall預設的記錄等級爲info,您可以參考/etc/syslog.conf來了解其它等級的記錄內容爲何。

CONFIG_PATH=/etc/shorewall:/usr/share/shorewall

設定shorewall的所有配置文件所存放的目錄位置爲何,如果您的設定檔不是放在這個位置的話,請自行修改至正確的路徑。

FW=fw

預設的防火牆接口名稱,在shorewall中,會內定一個防火牆的Zone名稱,這個名稱不需要在/etc/shorewall/zones中定義,直接可以在各個設定檔中使用。

IP_FORWARDING=On

預設是打開的,這個選項代表是開啓IPForward的功能,如果您的Linux主機是獨立型的主機,並不需要使用到NAT或者是DNAT等功能的話,那麼這個選項就可以把它給關閉。

以一個最簡單的網絡架構來做爲設定的例子,以一臺Linux主機爲主要單位,有兩張以太網絡卡,eth0是對外部的網絡卡,而eth1則是對內的網絡卡,內部局域網絡透過NAT連結到外部網絡,而這臺Linux主機同時具備有簡易防火牆的功能,針對下面的各個設定檔案做說明。

1.2 /etc/shorewall/zones

zones這個檔案中,您可以定義您的網絡區域代碼,限制在5個或5個字符之下,總共有三個字段,分別說明如下:

ZONE:定義的名稱,限制在5個或5個字符以下。

DISPLAY:這個接口所顯示的名稱,通常和ZONE設定是一樣的。

COMMENTS:對這個接口的簡略說明。

那麼在這個例子中,筆者就定義了二個接口,在zones的設定內容如下所示:

#ZONEDISPLAYCOMMENTS

loc Local Localhost

net Net Internet

#LAST LINE - ADD YOUR ENTRIES ABOVE THIS ONE - DO NOT REMOVE

其中loc就是對內的網絡接口,而net就是對外部網絡的網絡接口。

1.3 /etc/shorewall/interfaces

接下來就要建立網絡接口及ZONE的對照表了,前面說過eth0是對因特網的接口,而eth1是對內部局域網絡的接口,那麼設定的內容如下所示:

#ZONE INTERFACE BROADCAST OPTIONS

net eth0 xxx.xxx.xxx.128

loc eth1 192.168.1.255 dhcp

#LAST LINE -- ADD YOUR ENTRIES BEFORE THIS ONE -- DO NOT REMOVE

其中第一個字段就是對應到/etc/shorewall/zonesZONE名稱,而第二個字段就是對應到在Linux系統中的接口名稱,在這個例子中,eth0是對外部網絡的接口,所以對應到net,而eth1是對內部局域網絡的接口,所以對應到loc,第三個字段是設定該網絡接口的 BROADCAST,如果是Cclass的話,就是設定成x.x.x.255。而最後一個OPTIPNS的字段就是這個接口要用什麼樣的功能,比方說在這個例子中,eth1接口還要負責DHCP配發的動作,所以就在OPTIONS的字段上加入dhcp的記錄,其它的功能請參照interfaces的批註,在此不做太多的說明。

1.4 /etc/shorewall/policy

這個檔案是設定整個大方向的防火牆政策,通常建議較安全的方案是先將所有由外而內的政策都設定成爲拒絕,然後再一個一個的打開可用的port號,所以policy的設定內容如下:

#SOURCE DEST POLICY LOG LIMIT:BURST

loc net ACCEPT

net all DROP info

all all REJECT info

#LAST LINE -- DO NOT REMOVE

其中第一行是允許由內部局域網絡連到外部網絡,第二行是將所有外部來的封包都丟棄,並記錄到記錄文件中,第三行的功能也是一樣。

1.5 /etc/shorewall/masq

這個檔案是設定讓內部的虛擬IP可以僞造真實的IP聯機出去,也就是NAT的功能,設定內容如下:

#INTERFACE SUBNET ADDRESS

eth0 eth1 xxx.xxx.xxx.xxx

#LAST LINE -- ADD YOUR ENTRIES ABOVE THIS LINE -- DO NOT REMOVE

其中INTERFACE是對外的網絡卡,而SUBNET則是對內部虛擬網絡的網絡卡,最後的字段ADDRESS則是對外網卡的真實IP,輸入完後就存檔離開。

最後再重新啓動shorewall的防火牆,請依照下列指令重新啓動

#shorewall check

#shorewall restart

#chkconfig --level2345 shorewall on

完成!

這樣子就完成了最基本的防火牆建置,所有由外部對內部的服務全部都被關閉,只讓內部的虛擬IPNAT的方式聯機到外部網絡,這樣子就算是成功的建立一座防火牆了。

 

2.進階組件

2.1 params

這是用來設定shell變量的一個檔案,這個檔案有點像是C語言中的include功能一樣,把include進來的檔案的變量放到現在這個檔案中,只是在shorewall的設定檔中,並不需要再使用include來引入,params這個檔案的目的在於將所有相關的變量都統一設定在裏面,當您的規則全都設定好了之後,只要變更params的內容就可以套用在別的網絡狀態,管理起來非常的方便,以下就是一個例子:

 

/etc/shorewall/params中的設定:

NET_IF=eth0 NET_BCAST=130.252.100.255

NET_OPTIONS=blacklist,norfc1918

 

/etc/shorewall/interfaces中的設定:

net$NET_IF$NET_BCAST$NET_OPTIONS

這樣子的話,其它的規則就都可以使用變量的方式來寫,所以說規則只要寫一次,就可以重複的使用囉!

 

2.2 rules

這個檔案是整個shorewall的重點檔案,policy檔案的目的在於制定整個防火牆政策,比方說loc這個接口對 dmz這個接口的政策是REJECT或是ACCEPT等,通常由防火牆外至內部網絡的政策都是全部先設定爲關閉的。而rules這個檔案則是在制定一些【例外】的狀況,比方說,您的防火牆將所有的port都給關閉了,以至於從外不能由ssh連結進來,那麼這個時候就可以在rules這個檔案中來定義,它的格式如下所示:

#ACTIONSOURCEDESTPROTODESTSOURCEORIGINAL

#PORTPORT(S)DEST

DNAT fw loc:192.168.1.3 tcp ssh,http

以上的設定是指轉送所有fw防火牆接口的sshhttp的請求至loc的界面,而IP192.168.1.3的機器上。

在這個檔案中有幾個較常用到的字段,分別說明如下,其它較少用的字段在此筆者就不多加說明了:

 

字段名稱設定項目說明

ACTIONACCEPT允許這個聯機的要求。

ACCEPT+ACCETP一樣,但是會排除之後有關REDIRECT-DNAT-的規則。

DROP忽略這個聯機的請求。

REJECT不接受這聯機的請求,並回復一個icmp-unreachable或是RST的封包給對方。

DNAT轉送這個封包至另一個系統(或是其它的port)

DNAT-只有進階的使用纔會用到,這和DNAT的規則一樣,但是隻產生DNATiptables的規則而且也不是ACCEPT成對的規則。

REDIRECT重導這個聯機的請求到local的另一個埠號中。

REDIRECT-只有進階的使用纔會用到,這和REDIRECT的規則一樣,但是隻產生REDIRECTiptables的規則而且也不是ACCEPT成對的規則。

CONTINUE專家模式專用,對於這裏所定義的來源及目的端的請求就會被pass通過。

LOG簡單的記錄封包信息

QUEUE將這個封包佇放在使用者的應用程序中。

<action>;定義在/etc/shorewall/actions或是/usr/share/shorewall/actions.std中的動作。

SOURCE  來源地址,格式可設定以下幾種樣式:locnet(zones檔案中所定義的接口)192.168.1.1(IP格式)192.168.1.0/24(子網絡格式)loc:192.168.1.1loc:192.168.1.0 /24loc:192.168.1.1,192.168.1.2loc:~00-A0-C9-15-39-78(MACAddress)

DEST 目的地址,設定的方式和SOURCE一樣,但是如果SOURCE設定爲all時,則有以下的限制:並不允許使用MACAddressDNAT的規則中只允許使用IPAddress不可同時使用interfaceIP

PROTO 必需是tcpudpicmp或是all,或者是數字。

DESTPORT(S) 目的端的端口號,可用數字或名稱,在設定這個字段時,可以用逗號(,)來建立多個端口號清單,也可以用一整個範圍的埠號(1024:2048->;意思是從10242048之中所有的端口號)來建立清單。

CLIENTPORT(S) 客戶端的埠號,這個字段可以忽略掉。

 

2.3 nat

這個檔案主要是用來定義one-to-one型式的NAT,所謂的"one-to-one"是代表說一個真實IP將所有的服務都轉向內部的一個虛擬IP,所以通常是一個真實的IP就【只能】指向一個虛擬的IP,這通常是用在當這臺NAT主機是隻有跑防火牆服務,然後所有提供外部服務的主機都是藏在內部虛擬IP的狀況下,在一般的情況下比較少用到這個檔案,如果想要使用forward或是DNAT的功能的話,就不能使用這個檔案來設定,必需去設定rules這個檔案才行,有關於nat的設定內容如下所示:

#EXTERNALINTERFACEINTERNALALLLOCAL

#INTERFACES

x.x.x.x eth0192.168.1.23

 

EXTERNAL設定此臺服務器所要對外的【真實IP】。

INTERFACE設定此臺服務器的對外網絡網卡接口名稱。

INTERNAL設定想將此真實IP轉向內部的虛擬IP地址。

ALLINTERFACES如果不想同時套用到其它的網絡接口時,請在此設定爲no,如果爲空白的話,就只會套用到這個界面。

LOCAL 如果這個選項設定爲Yesyes,還有ALLINTERFACES也被設定爲Yesyes的話,那麼由EXTERNAL傳送至INTERNAL的封包就會被限制在內部,要開啓這個功能的話,核心版本必需要在2.4.19以上,並且要確認開啓CONFIG_IP_NF_NAT_LOCAL的功能,

2.4 masq

這個檔案是用來架設一般所謂的NAT服務器,masq設定的內容如下所示:

#INTERFACESUBNETADDRESSPROTOPORT(S)IPSEC

eth0 eth1 206.124.146.176

#LASTLINE--ADDYOURENTRIESABOVETHISLINE--DONOTREMOVE

 

INTERFACE設定負責對外部網絡的接口名稱。

SUBNET設定負責對內部網絡的接口名稱。

ADDRESS設定負責對外部網絡的IP地址,這個選項可以不設定。

PROTO在此您可以設定的內容爲/etc/protocols的服務內容。

PORT(S)如果在PROTO的部份設定爲TCP或是UDP的話,那麼在這個選項中就可以設定端口號,或者是服務名稱了。

IPSEC設定是否要對這個網絡接口的聯機進行加密,如果是空白,就是不需要,如果是yes的話,就會進行加密。

範例:

eth0 eth1 206.124.146.177 tcps mtp

eth0 eth1 206.124.146.176

以上的設定內容是代表所有由eth1tcp協議的smtp封包,都會把IP的標頭設定爲206.124.146.177,然後由eth0送出去,然後其餘的封包都是將封包的標頭設定爲206.124.146.176,然後由eth0送出去。

2.5 modules

這個檔案會將所有Iptables所需要的模塊都加載進去,預設的內容如下所示:

loadmoduleip_tables

loadmoduleiptable_filter

loadmoduleip_conntrack

loadmoduleip_conntrack_ftp

loadmoduleip_conntrack_tftp

loadmoduleip_conntrack_irc

loadmoduleiptable_nat

loadmoduleip_nat_ftp

loadmoduleip_nat_tftp

loadmoduleip_nat_irc

如果您有其它的模塊的話,只要加入modules這個檔案即可。

2.6 blacklist

這個檔案是設定聯機的黑名單,您可以在這個檔案中限制某些網絡地址的聯機動作

ADDRESS/SUBNET PROTOCOL PORT

 

ADDRESS/SUBNET設定所要限制的網絡地址,或是子網絡及MAC Address,格式分別爲下列三種:網絡地址:192.168.1.10 子網絡:192.168.1.0/24 MACAddress~00-A0-C9-15-39-78

PROTOCOL可以設定的內容爲/etc/protocols的服務內容,這個字段可以選擇不設定。

PORT如果在PROTOCOL的部份設定爲TCP或是UDP的話,那麼在這個選項中就可以設定端口號,或者是服務名稱了,這個字段可以選擇不設定。

範例:

192.0.2.126 udp 53

上面這行所表示的是封鎖由IP192.0.2.126所請求的DNS查詢服務。

 

3. 進階應用

3.1 開放服務

前面的政策就是將所有由外而內的服務都給封鎖掉了,所以現在要一個一個的打開,在此開放HTTPSMTPPOP3SSHDNS、還有一個port10000Webmin的服務,那麼在rules的設定就會如下所示:

ACTION SOURCE DEST PROTO DEST PORT

ACCEPT net fw tcp http

ACCEPT loc fw tcp http

ACCEPT net fw tcp smtp

ACCEPT loc fw tcp smtp

ACCEPTnetfwtcppop3

ACCEPClocfwtcppop3

ACCEPT net fw tcp ssh

ACCEPT loc fw tcp ssh

ACCEPT net fw tcp dns

ACCEPT loc fw tcp dns

ACCEPT net fw udp dns

ACCEPT loc fw udp dns

ACCEPT net fw tcp10000

ACCEPT loc fw tcp10000

以上所有的服務因爲都是在這臺防火牆中,所以DEST的字段都是設定爲fw這個接口,另外因爲分別有對內及對外的接口,所以每一個服務都會設定兩次,不過也有另外一種設定的方式,如下所示:

3.2 實例:阻擋MSN

MSN1863,而MSN連結的網站地址則是爲gateway.messenger.hotmail.com

先擋掉gateway.messenger.hotmail.com的所有tcp連結,在rules的檔案中加入以下的記錄:

DROPlocnet:gateway.messenger.hotmail.comtcp-

接着再擋掉連結到任何地址的1863端口,

DROP local tcp1863

這樣子就可以擋掉大部份msn連結的服務了。

 


四、MonMotha's Firewall 2.3.5

MonMotha's Firewall 2.3.5是一個大約30Kshell腳本。目前,主要適用於基於主機的保護,因爲一些基於網絡的選項正在開發中。這個腳本的界面(例如:給 iptables傳遞配置選項的方法)有點混亂。不過,它不需要配置文件而且安裝容易,直接複製到任何地方都可以。默認情況下,它根本不做什麼,實際上根本就不執行,也缺少文檔。這個腳本對於撥號用戶可能有點用處。

 


五、Firewallscript

Firewallscript(IFS 4.4d)也是一個bash腳本,大約有85K。這個腳本可以用於基於主機和網絡的防護。首次運行時,它會直接產生一個配置文件。不過,在默認情況下,這個文件不起什麼作用,只有測試作用。這個腳本可以配置NAT和地址僞裝。這個腳本非常複雜,但是缺少文檔,因此最好能夠仔細閱讀它的代碼,使用 iptables -L命令哪個鏈已經生效,什麼被允許/拒絕。這個腳本的IP報文追蹤功能還可以爲你提供娛樂。此外,它還會自動探測、加載iptables需要的內核模塊。這個腳本和上一個腳本還具有取消(undo)功能,能夠恢復iptables原來的配置文件。

 


六、Ferm

Ferm是一個Perl腳本,使用一種類C語言寫成的配置文件。這種語言非常容易閱讀和理解。這個腳本有很好的文檔和豐富的示例作爲參考。

這是一個例子:

-----------------------------------------------------------------------------

# 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;

}

-----------------------------------------------------------------------------

這個配置文件將使ferm產生iptables如下規則:允許向外的sshDNS報文通過;阻塞所有的UDP報文;只允許兩種類型的ICMP消息通過:目的不可達和超時,並絕拒絕和日誌其它類型的ICMP消息。

 


七、AGT

AGT是一個使用C語言編寫的程序。從它的代碼來看,目前還處於開發階段。不支持automake,需要手工編輯Makefile文件,文檔也不是很豐富,但是其配置文件非常簡單。下面就是一個配置文件:

 

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 |||||

這樣的文件格式,加上缺乏必要的文檔,對使用者來說是一個很大的挑戰。而且最好多花些時間學學iptables

 


八、knetfilter

knetfilter是一個非常棒的圖形化iptables配置工具,它是基於KDE(KDE1KDE2兩個版本)knetfilter非常易於上手,你可以很容易地使用它來配置基於主機保護的規則和規則列表;保存和恢復測這些規則和規則列表;測試規則和規則列表(在同一個面板上運行 tcpdump網絡嗅探器),這一切只要點幾下鼠標就可以了。它也支持NAT和網絡地址僞裝的配置。但是,對於撥號工作站,knetfilter工作的不太好,因爲它需要本地IP,而且只探測eth0網絡接口,不進行PPP探測。這個工程的文檔也很少,不過因爲是基於圖形界面,所以即使不用手冊也可以很好地使用。

 


九、gShield

gShield是一個bash shell腳本,可能是當前最成熟的一個工具。它的文檔非常豐富,配置文件也比較合理直觀,還能夠設置NAT。它不但能夠處靜態IP地址,還能夠處理動態IP地址(例如:PPP)

 

gShield還有圖形界面,目前仍然處於早期開發階段,可以從[url]http://members.home.com/vhodges[/url] /gshieldconf.html下載。不過,它似乎只兼容gShield的早期版本(1.x)

 

下面是一個示例配置文件:

 

FW_ROOT="/etc/firewall"

IPTABLES=`which iptables`

LOCALIF="eth0"

DNS="24.31.195.65"

LTIME="20/m"

ALLOW_DHCP_LEASES="YES"

...

 

gShield使用的默認配置非常安全,特別適合不願意擺弄配置文件的用戶,不過軟件的編者建議用戶最好能夠通讀整個配置文件。據README文件講,gShield實現了"tcpwrapper風格的服務訪問控制功能",使用這個功能用戶可以很容易地阻塞/允許某項服務,而不必考慮報文方向之類的問題,只要關心什麼客戶連接到服務器就可以了。

 

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