基于Linux的IPv6復(fù)合防火墻的設(shè)計(jì)
Squid是Linux下一個(gè)高性能的代理緩存服務(wù)器,支持FTP、gopher和HTTP協(xié)議。和一般的代理緩存軟件不同,Squid用一個(gè)單獨(dú)的、非模塊化的、I/O驅(qū)動(dòng)的進(jìn)程來處理所有的客戶端請(qǐng)求。可從www.squid-cache.org獲取該軟件的源代碼安裝包squid-2.5.STABLE.tar.gz,解壓縮包:
#tarxvfzsquid-2.5.STABLE2.tar.gz
然后,進(jìn)入相應(yīng)目錄對(duì)源代碼進(jìn)行配置和編譯:
#cdsquid-2.5.STABLE2
#./configure--prefix=/var/squid
--sysconfdir=/etc
--enable-arp-acl
--enable-linux-netfilter
--enable-pthreads
--enable-err-language=Simplify_Chinese
--enable-storeio=ufs,null
--enable-default-err-language=Simplify_Chinese
最后執(zhí)行#make;makeinstall將源代碼編譯為可執(zhí)行文件完成安裝。為了使squid支持IPv6,從devel.squid-cache.org/projects.html#squid3-ipv6下載squid3-ipv6.patch補(bǔ)丁并安裝。接下來在/etc/squid.conf中對(duì)squid的運(yùn)行進(jìn)行配置。
下面是一個(gè)在配置文件中有關(guān)IPv6部分的簡(jiǎn)單例子:
#IPv6的訪問控制列表
aclallsrc::/0
aclsitelocalsrcfec0:/16
aclipv4::ffff:0:0/96
#對(duì)列表所做的處理
http_accessdenyipv4
http_accessallowsitelocal
http_accessdenyall
IPv6復(fù)合型防火墻的設(shè)計(jì)
把分組過濾系統(tǒng)ip6tables和應(yīng)用代理squid結(jié)合使用,由分組過濾控制通信的底層,代理服務(wù)器用于過濾應(yīng)用層的服務(wù),這樣就能從網(wǎng)絡(luò)層到應(yīng)用層進(jìn)行全方位的安全處理。比如若要對(duì)http協(xié)議進(jìn)行控制,則用ip6tables把對(duì)Web端口80的請(qǐng)求轉(zhuǎn)發(fā)到squid端口,由squid對(duì)這個(gè)應(yīng)用層協(xié)議進(jìn)行控制,而用戶瀏覽器仍然認(rèn)為它訪問的是對(duì)方的80端口。如下面這條命令:
#ip6tables-tnat-APREROUTING-ieth0-s3ffe:ffff:200:: 1/128-ptcp--dport80-jREDIRECT--to-ports3128(eth0為防火墻主機(jī)輸入接口,3128是squid監(jiān)聽HTTP客戶連接請(qǐng)求的缺省端口)。系統(tǒng)的工作流程如圖4所示。當(dāng)一個(gè)數(shù)據(jù)包進(jìn)入防火墻后,首先由ip6tables的nat表中PREROUTING鏈的規(guī)則來判斷這個(gè)數(shù)據(jù)包的高層協(xié)議(如HTTP、FTP等)是否應(yīng)受控制,若應(yīng)受控制,則將其定向到squid端口,由squid代理進(jìn)程進(jìn)行處理,如上命令所示。之后,進(jìn)行路由判斷,若是防火墻本地包,則要由INPUT鏈處理,若是外地包,則要由FORWARD鏈來處理,最后經(jīng)過POSTROUTING鏈的snat處理把數(shù)據(jù)包轉(zhuǎn)發(fā)出防火墻,形成透明代理。如下命令所示:
圖4 IPv6復(fù)合型防火墻系統(tǒng)的工作流程
ip6tables-APOSTROUTING-tnat-sIPv6(s1)-oeth1-jSNAT--to-sourceIPv6(s)。其中IPv6(s1)指數(shù)據(jù)包的源IPv6地址,eth1為防火墻主機(jī)輸出接口,IPv6(s)指防火墻主機(jī)的出口地址。
若數(shù)據(jù)包來自防火墻主機(jī)本身,經(jīng)過PREROUTING鏈規(guī)則處理,判斷是否應(yīng)進(jìn)行squid代理,若是,則進(jìn)行squid處理,之后經(jīng)過OUTPUT鏈規(guī)則處理,再判斷路由,最后由POSTROUTING鏈的snat處理把數(shù)據(jù)包轉(zhuǎn)發(fā)出防火墻。
結(jié)論
由squid限定內(nèi)外網(wǎng)絡(luò)之間的服務(wù)連接,使它們都通過squid的介入和轉(zhuǎn)換,再由防火墻本身提交請(qǐng)求和應(yīng)答,這樣就使內(nèi)外網(wǎng)絡(luò)的計(jì)算機(jī)不會(huì)直接進(jìn)行會(huì)話,結(jié)合ip6tables的包過濾控制底層通信,從而能建立起一種從網(wǎng)絡(luò)層到應(yīng)用層堅(jiān)固的IPv6防火墻系統(tǒng)。ip6tables和squid都可以免費(fèi)獲得,因此無論從安全性還是從經(jīng)濟(jì)性來說,這都是一種非常好的IPv6防火墻解決方案。
評(píng)論