在上一篇中,我們介紹了如何安裝和使用ShoreWall工具來進(jìn)行防火墻配置,在本篇文章中,將給大家介紹它的一些高級(jí)組件的使用實(shí)例。
一、進(jìn)階組件介紹
1、params
這是用來設(shè)定shell變量的一個(gè)檔案,這個(gè)檔案有點(diǎn)像是C語言中的include功能一樣,把include進(jìn)來的檔案的變量放到現(xiàn)在這個(gè)檔案中,只是在shorewall的設(shè)定檔中,并不需要再使用include來引入,params這個(gè)檔案的目的在于將所有相關(guān)的變量都統(tǒng)一設(shè)定在里面,當(dāng)您的規(guī)則全都設(shè)定好了之后,只要變更params的內(nèi)容就可以套用在別的網(wǎng)絡(luò)狀態(tài),管理起來非常的方便,以下就是一個(gè)例子:
在/etc/shorewall/params中的設(shè)定: NET_IF=eth0 NET_BCAST=130.252.100.255 NET_OPTIONS=blacklist,norfc1918 在/etc/shorewall/interfaces中的設(shè)定: net$NET_IF$NET_BCAST$NET_OPTIONS |
這樣子的話,其它的規(guī)則就都可以使用變量的方式來寫,所以說規(guī)則只要寫一次,就可以重復(fù)的使用啰!
2、rules
這個(gè)檔案是整個(gè)shorewall的重點(diǎn)檔案,policy檔案的目的在于制定整個(gè)防火墻政策,比方說loc這個(gè)接口對(duì)dmz這個(gè)接口的政策是REJECT或是ACCEPT等,通常由防火墻外至內(nèi)部網(wǎng)絡(luò)的政策都是全部先設(shè)定為關(guān)閉的。而rules這個(gè)檔案則是在制定一些的狀況,比方說,您的防火墻將所有的port都給關(guān)閉了,以至于從外不能由ssh連結(jié)進(jìn)來,那么這個(gè)時(shí)候就可以在rules這個(gè)檔案中來定義,它的格式如下所示:
#ACTIONSOURCEDESTPROTODESTSOURCEORIGINAL #PORTPORT(S)DEST DNAT fw loc:192.168.1.3 tcp ssh,http |
以上的設(shè)定是指轉(zhuǎn)送所有fw防火墻接口的ssh及http的請(qǐng)求至loc的界面,而IP為192.168.1.3的機(jī)器上。
在這個(gè)檔案中有幾個(gè)較常用到的字段,分別說明如下,其它較少用的字段在此筆者就不多加說明了:
◆字段名稱設(shè)定項(xiàng)目說明
ACTIONACCEPT允許這個(gè)聯(lián)機(jī)的要求。
ACCEPT+和ACCETP一樣,但是會(huì)排除之后有關(guān)REDIRECT-及DNAT-的規(guī)則。
DROP:忽略這個(gè)聯(lián)機(jī)的請(qǐng)求。
REJECT:不接受這聯(lián)機(jī)的請(qǐng)求,并回復(fù)一個(gè)icmp-unreachable或是RST的封包給對(duì)方。
DNAT:轉(zhuǎn)送這個(gè)封包至另一個(gè)系統(tǒng)(或是其它的port號(hào))。
DNAT-:只有進(jìn)階的使用才會(huì)用到,這和DNAT的規(guī)則一樣,但是只產(chǎn)生DNAT的iptables的規(guī)則而且也不是ACCEPT成對(duì)的規(guī)則。
REDIRECT:重導(dǎo)這個(gè)聯(lián)機(jī)的請(qǐng)求到local的另一個(gè)埠號(hào)中。
REDIRECT-:只有進(jìn)階的使用才會(huì)用到,這和REDIRECT的規(guī)則一樣,但是只產(chǎn)生REDIRECT的iptables的規(guī)則而且也不是ACCEPT成對(duì)的規(guī)則。
CONTINUE:專家模式專用,對(duì)于這里所定義的來源及目的端的請(qǐng)求就會(huì)被pass通過。
LOG:簡(jiǎn)單的記錄封包信息
QUEUE:將這個(gè)封包佇放在使用者的應(yīng)用程序中。
<action>;定義在/etc/shorewall/actions或是/usr/share/shorewall/actions.std中的動(dòng)作。
SOURCE:來源地址,格式可設(shè)定以下幾種樣式:loc、net(在zones檔案中所定義的接口)192.168.1.1(IP格式)192.168.1.0/24(子網(wǎng)絡(luò)格式)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:目的地址,設(shè)定的方式和SOURCE一樣,但是如果SOURCE設(shè)定為all時(shí),則有以下的限制:并不允許使用MACAddress在DNAT的規(guī)則中只允許使用IPAddress不可同時(shí)使用interface及IP
PROTO:必需是tcp、udp、icmp或是all,或者是數(shù)字。
DESTPORT(S):目的端的端口號(hào),可用數(shù)字或名稱,在設(shè)定這個(gè)字段時(shí),可以用逗號(hào)(,)來建立多個(gè)端口號(hào)清單,也可以用一整個(gè)范圍的埠號(hào)(1024:2048->;意思是從1024到2048之中所有的端口號(hào))來建立清單。
CLIENTPORT(S):客戶端的埠號(hào),這個(gè)字段可以忽略掉。
3、nat
這個(gè)檔案主要是用來定義one-to-one型式的NAT,所謂的"one-to-one"是代表說一個(gè)真實(shí)IP將所有的服務(wù)都轉(zhuǎn)向內(nèi)部的一個(gè)虛擬IP,所以通常是一個(gè)真實(shí)的IP就指向一個(gè)虛擬的IP,這通常是用在當(dāng)這臺(tái)NAT主機(jī)是只有跑防火墻服務(wù),然后所有提供外部服務(wù)的主機(jī)都是藏在內(nèi)部虛擬IP的狀況下,在一般的情況下比較少用到這個(gè)檔案,如果想要使用forward或是DNAT的功能的話,就不能使用這個(gè)檔案來設(shè)定,必需去設(shè)定rules這個(gè)檔案才行,有關(guān)于nat的設(shè)定內(nèi)容如下所示:
#EXTERNALINTERFACEINTERNALALLLOCAL #INTERFACES x.x.x.x eth0192.168.1.23 |
EXTERNAL設(shè)定此臺(tái)服務(wù)器所要對(duì)外的。
INTERFACE設(shè)定此臺(tái)服務(wù)器的對(duì)外網(wǎng)絡(luò)網(wǎng)卡接口名稱。
INTERNAL設(shè)定想將此真實(shí)IP轉(zhuǎn)向內(nèi)部的虛擬IP地址。
ALLINTERFACES如果不想同時(shí)套用到其它的網(wǎng)絡(luò)接口時(shí),請(qǐng)?jiān)诖嗽O(shè)定為no,如果為空白的話,就只會(huì)套用到這個(gè)界面。
LOCAL如果這個(gè)選項(xiàng)設(shè)定為Yes或yes,還有ALLINTERFACES也被設(shè)定為Yes或yes的話,那么由EXTERNAL傳送至INTERNAL的封包就會(huì)被限制在內(nèi)部,要開啟這個(gè)功能的話,核心版本必需要在2.4.19以上,并且要確認(rèn)開啟CONFIG_IP_NF_NAT_LOCAL的功能,
4、masq
這個(gè)檔案是用來架設(shè)一般所謂的NAT服務(wù)器,masq設(shè)定的內(nèi)容如下所示:
#INTERFACESUBNETADDRESSPROTOPORT(S)IPSEC eth0 eth1 206.124.146.176 #LASTLINE--ADDYOURENTRIESABOVETHISLINE--DONOTREMOVE |
INTERFACE設(shè)定負(fù)責(zé)對(duì)外部網(wǎng)絡(luò)的接口名稱。
SUBNET設(shè)定負(fù)責(zé)對(duì)內(nèi)部網(wǎng)絡(luò)的接口名稱。
ADDRESS設(shè)定負(fù)責(zé)對(duì)外部網(wǎng)絡(luò)的IP地址,這個(gè)選項(xiàng)可以不設(shè)定。
PROTO在此您可以設(shè)定的內(nèi)容為/etc/protocols的服務(wù)內(nèi)容。
PORT(S)如果在PROTO的部份設(shè)定為TCP或是UDP的話,那么在這個(gè)選項(xiàng)中就可以設(shè)定端口號(hào),或者是服務(wù)名稱了。
IPSEC設(shè)定是否要對(duì)這個(gè)網(wǎng)絡(luò)接口的聯(lián)機(jī)進(jìn)行加密,如果是空白,就是不需要,如果是yes的話,就會(huì)進(jìn)行加密。
范例:
eth0 eth1 206.124.146.177 tcps mtp eth0 eth1 206.124.146.176 |
以上的設(shè)定內(nèi)容是代表所有由eth1的tcp協(xié)議的smtp封包,都會(huì)把IP的標(biāo)頭設(shè)定為206.124.146.177,然后由eth0送出去,然后其余的封包都是將封包的標(biāo)頭設(shè)定為206.124.146.176,然后由eth0送出去。
5、modules
這個(gè)檔案會(huì)將所有Iptables所需要的模塊都加載進(jìn)去,預(yù)設(shè)的內(nèi)容如下所示:
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這個(gè)檔案即可。
6、blacklist
這個(gè)檔案是設(shè)定聯(lián)機(jī)的黑名單,您可以在這個(gè)檔案中限制某些網(wǎng)絡(luò)地址的聯(lián)機(jī)動(dòng)作
ADDRESS/SUBNET PROTOCOL PORT ADDRESS/SUBNET設(shè)定所要限制的網(wǎng)絡(luò)地址,或是子網(wǎng)絡(luò)及MAC Address,格式分別為下列三種:網(wǎng)絡(luò)地址:192.168.1.10 子網(wǎng)絡(luò):192.168.1.0/24 MACAddress:~00-A0-C9-15-39-78
PROTOCOL可以設(shè)定的內(nèi)容為/etc/protocols的服務(wù)內(nèi)容,這個(gè)字段可以選擇不設(shè)定。
PORT如果在PROTOCOL的部份設(shè)定為TCP或是UDP的話,那么在這個(gè)選項(xiàng)中就可以設(shè)定端口號(hào),或者是服務(wù)名稱了,這個(gè)字段可以選擇不設(shè)定。
范例:
192.0.2.126 udp 53 |
上面這行所表示的是封鎖由IP192.0.2.126所請(qǐng)求的DNS查詢服務(wù)。
二、進(jìn)階應(yīng)用介紹
1、開放服務(wù)
前面的政策就是將所有由外而內(nèi)的服務(wù)都給封鎖掉了,所以現(xiàn)在要一個(gè)一個(gè)的打開,在此開放HTTP、SMTP、POP3、SSH、DNS、還有一個(gè)port10000的Webmin的服務(wù),那么在rules的設(shè)定就會(huì)如下所示:
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 |
以上所有的服務(wù)因?yàn)槎际窃谶@臺(tái)防火墻中,所以DEST的字段都是設(shè)定為fw這個(gè)接口,另外因?yàn)榉謩e有對(duì)內(nèi)及對(duì)外的接口,所以每一個(gè)服務(wù)都會(huì)設(shè)定兩次,不過也有另外一種設(shè)定的方式,如下所示:
2、實(shí)例:阻擋MSN
MSN是1863,而MSN連結(jié)的網(wǎng)站地址則是為gateway.messenger.hotmail.com。
先擋掉gateway.messenger.hotmail.com的所有tcp連結(jié),在rules的檔案中加入以下的記錄:
DROPlocnet:gateway.messenger.hotmail.comtcp- |
接著再擋掉連結(jié)到任何地址的1863端口,
DROP local tcp1863 |
這樣子就可以擋掉大部份msn連結(jié)的服務(wù)了。