隨著Internet的發(fā)展,很多機(jī)構(gòu)都將自己內(nèi)部的網(wǎng)絡(luò)連接到Internet上,因而網(wǎng)絡(luò)安全問(wèn)題越來(lái)越重要。
一、現(xiàn)有防火墻技術(shù)及其局限性
為了增加網(wǎng)絡(luò)的安全和保護(hù)內(nèi)部網(wǎng)絡(luò)上的重要數(shù)據(jù),需要將內(nèi)部網(wǎng)與Internet相隔離,當(dāng)前主要通過(guò)防火墻技術(shù)來(lái)完成這個(gè)目的。然而為了保護(hù)內(nèi)部主機(jī),防火墻軟件就必須限制外部網(wǎng)絡(luò)中的主機(jī)對(duì)內(nèi)部網(wǎng)絡(luò)的訪問(wèn)。因此普通防火墻軟件的設(shè)置中,外部網(wǎng)絡(luò)無(wú)法訪問(wèn)內(nèi)部主機(jī)。然而,為了向外發(fā)布自己的信息,就需要允許外部網(wǎng)絡(luò)訪問(wèn)自己的Web服務(wù)器。最簡(jiǎn)單的處理方法是將Web服務(wù)器放在防火墻之外,這樣就將Web服務(wù)器和內(nèi)部網(wǎng)絡(luò)區(qū)分開(kāi),Web服務(wù)器暴露在網(wǎng)絡(luò)外部,就有可能招受攻擊而導(dǎo)致服務(wù)器癱瘓或網(wǎng)頁(yè)被更改等潛在的問(wèn)題。而當(dāng)前,Web服務(wù)器上面的信息越來(lái)越豐富和重要,Web服務(wù)器的重要性也非常明顯。因此就需要使用防火墻來(lái)保護(hù)它,如果要將Web服務(wù)器放在防火墻之內(nèi),則需要防火墻的支持。
當(dāng)前防火墻主要有兩種類型,一種為包過(guò)濾型防火墻,這種防火墻針對(duì)每個(gè)IP包識(shí)別它是否符合管理員設(shè)定的過(guò)濾規(guī)則,符合一定要求的才被正確轉(zhuǎn)發(fā)??梢允褂玫倪^(guò)濾規(guī)則包括源和目的主機(jī)的名字和IP地址,端口地址,使用的網(wǎng)絡(luò)界面,以及IP包的類型。通常包過(guò)濾型的防火墻軟件根據(jù)IP包的類型屏蔽所有的由外部發(fā)起的連接請(qǐng)求,從而保護(hù)內(nèi)部網(wǎng)絡(luò)。如果要將Web服務(wù)器放在放火墻之內(nèi),就需要允許對(duì)這個(gè)Web服務(wù)器和它使用的TCP端口的訪問(wèn)。
另一種類型的防火墻為應(yīng)用代理型的防火墻,這種防火墻針對(duì)每種應(yīng)用協(xié)議提供相應(yīng)的代理服務(wù),由代理服務(wù)器訪問(wèn)網(wǎng)絡(luò),并將結(jié)果返回給客戶機(jī)。標(biāo)準(zhǔn)的http協(xié)議的代理服務(wù),客戶端的瀏覽器必須配置代理服務(wù)器的IP地址,不可能要求其他外部主機(jī)為訪問(wèn)這個(gè)內(nèi)部網(wǎng)絡(luò)上的主機(jī)而重新設(shè)置代理服務(wù)器的地址。代理服務(wù)器并不區(qū)分外部網(wǎng)絡(luò)和內(nèi)部網(wǎng)絡(luò),但是代理服務(wù)器使用Internet上的名字解析來(lái)確定Web服務(wù)器的位置,而通常防火墻內(nèi)使用內(nèi)部地址,這也決定了普通代理型防火墻不支持外部網(wǎng)絡(luò)對(duì)內(nèi)部Web服務(wù)器的http訪問(wèn)請(qǐng)求。因此普通代理服務(wù)器簡(jiǎn)單的屏蔽外部地址的訪問(wèn),因此最簡(jiǎn)單的保護(hù)對(duì)外發(fā)布信息的Web服務(wù)器的方式是使用包過(guò)濾型的防火墻。
一旦允許外部網(wǎng)絡(luò)中的主機(jī)可以向內(nèi)部網(wǎng)絡(luò)發(fā)起連接請(qǐng)求,攻擊者就可以在網(wǎng)絡(luò)外部嘗試進(jìn)行連接,這增加了攻擊者攻擊內(nèi)部網(wǎng)絡(luò)的方式,降低了整個(gè)網(wǎng)絡(luò)的安全系數(shù)。如果不允許外部主機(jī)向內(nèi)部網(wǎng)絡(luò)發(fā)起連接請(qǐng)求,攻擊者就只好在外部發(fā)起攻擊,使用特洛伊木馬或者IP spoof等技術(shù),這些方式與發(fā)起主動(dòng)連接的攻擊方式相比,沒(méi)有現(xiàn)成的工具供利用,因此使得攻擊的復(fù)雜性大大增加,因此網(wǎng)絡(luò)被攻擊的可能性大為減少,幾乎成為不可能。一旦攻擊者進(jìn)入內(nèi)部網(wǎng)絡(luò)中的Web服務(wù)器,整個(gè)內(nèi)部網(wǎng)絡(luò)就暴露在攻擊者的面前,防火墻就不能起到應(yīng)有的作用了。因此通過(guò)重新定義包過(guò)濾型防火墻的過(guò)濾規(guī)則,并將Web服務(wù)器放在內(nèi)部網(wǎng)絡(luò)內(nèi),只是一種簡(jiǎn)單的保護(hù)Web服務(wù)器的方法,然而不利于保護(hù)整個(gè)內(nèi)部網(wǎng)絡(luò)的安全。
因此,為了在保護(hù)Web服務(wù)器和內(nèi)部網(wǎng)絡(luò)的安全,當(dāng)前使用的更安全的做法是實(shí)現(xiàn)雙層防火墻。外層防火墻實(shí)現(xiàn)包過(guò)濾功能,然而卻允許外部網(wǎng)絡(luò)訪問(wèn)其中的Web服務(wù)器,內(nèi)部防火墻允許最中間的內(nèi)部網(wǎng)絡(luò)可以訪問(wèn)外部網(wǎng)絡(luò)。在外部防火墻和內(nèi)部防火墻之間稱為?;饏^(qū),提供外部網(wǎng)絡(luò)訪問(wèn)的服務(wù)器就位于這個(gè)區(qū)域,表明即使攻擊者通過(guò)外部防火墻進(jìn)入這個(gè)區(qū)域,也無(wú)法攻入內(nèi)部網(wǎng)絡(luò)。雙層防火墻通過(guò)設(shè)置了兩層防火墻,使得內(nèi)部網(wǎng)絡(luò)更為安全。然而,它在保護(hù)Web服務(wù)器方面的作用,與單層防火墻相似。因?yàn)榇藭r(shí)Web服務(wù)器仍然只受到一層防火墻的保護(hù),同樣也無(wú)法對(duì)外部隱藏防火墻內(nèi)主機(jī)的各種信息,例如服務(wù)器的ip等。而且這層防火墻是對(duì)應(yīng)用協(xié)議一無(wú)所知的包過(guò)濾防火墻,由于包過(guò)濾的方式不識(shí)別應(yīng)用協(xié)議,通常為http協(xié)議,那么就無(wú)法正確識(shí)別外部的連接請(qǐng)求是否屬于正常連接,通常也無(wú)法進(jìn)行詳盡的連接記錄。為了更好的保護(hù)Web服務(wù)器不被外部攻擊者破壞,就應(yīng)該屏蔽內(nèi)部服務(wù)器的IP地址等信息,并且防火墻能夠識(shí)別連接協(xié)議,顯然這是代理型防火墻的任務(wù)。
二、反向代理方式
通常的代理服務(wù)器,只用于代理內(nèi)部網(wǎng)絡(luò)對(duì)Internet的連接請(qǐng)求,客戶機(jī)必須指定代理服務(wù)器,并將本來(lái)要直接發(fā)送到Web服務(wù)器上的http請(qǐng)求發(fā)送到代理服務(wù)器中。由于外部網(wǎng)絡(luò)上的主機(jī)并不會(huì)配置并使用這個(gè)代理服務(wù)器,普通代理服務(wù)器也被設(shè)計(jì)為在Internet上搜尋多個(gè)不確定的服務(wù)器,而不是針對(duì)Internet上多個(gè)客戶機(jī)的請(qǐng)求訪問(wèn)某一個(gè)固定的服務(wù)器,因此普通的Web代理服務(wù)器不支持外部對(duì)內(nèi)部網(wǎng)絡(luò)的訪問(wèn)請(qǐng)求。當(dāng)一個(gè)代理服務(wù)器能夠代理外部網(wǎng)絡(luò)上的主機(jī),訪問(wèn)內(nèi)部網(wǎng)絡(luò)時(shí),這種代理服務(wù)的方式稱為反向代理服務(wù)。此時(shí)代理服務(wù)器對(duì)外就表現(xiàn)為一個(gè)Web服務(wù)器,外部網(wǎng)絡(luò)就可以簡(jiǎn)單把它當(dāng)作一個(gè)標(biāo)準(zhǔn)的Web服務(wù)器而不需要特定的配置。不同之處在于,這個(gè)服務(wù)器沒(méi)有保存任何網(wǎng)頁(yè)的真實(shí)數(shù)據(jù),所有的靜態(tài)網(wǎng)頁(yè)或者CGI程序,都保存在內(nèi)部的Web服務(wù)器上。因此對(duì)反向代理服務(wù)器的攻擊并不會(huì)使得網(wǎng)頁(yè)信息遭到破壞,這樣就增強(qiáng)了Web服務(wù)器的安全性。
反向代理方式和包過(guò)濾方式或普通代理方式并無(wú)沖突,因此可以在防火墻設(shè)備中同時(shí)使用這兩種方式,其中反向代理用于外部網(wǎng)絡(luò)訪問(wèn)內(nèi)部網(wǎng)絡(luò)時(shí)使用,正向代理或包過(guò)濾方式用于拒絕其他外部訪問(wèn)方式并提供內(nèi)部網(wǎng)絡(luò)對(duì)外部網(wǎng)絡(luò)的訪問(wèn)能力。因此可以結(jié)合這些方式提供最佳的安全訪問(wèn)方式。
綜合反向代理功能和普通拒絕外部訪問(wèn)的普通防火墻軟件相結(jié)合,就能構(gòu)成一個(gè)既具有保護(hù)內(nèi)部網(wǎng)絡(luò)、又能對(duì)外提供Web信息發(fā)布的能力的防火墻系統(tǒng)。由于反向代理能力需要軟件實(shí)現(xiàn),因此不能使用現(xiàn)有的防火墻系統(tǒng),需要使用相關(guān)軟件進(jìn)行開(kāi)發(fā)改進(jìn)。Unix顯然是首選平臺(tái),我們基于FreeBSD系統(tǒng),提出一種基于ipfw、natd與squid的防火墻設(shè)置方式。其中ipfw可以基于ip地址、端口、協(xié)議等對(duì)ip包進(jìn)行過(guò)濾,natd提供網(wǎng)絡(luò)地址轉(zhuǎn)換功能,這樣就隱藏了內(nèi)部網(wǎng)絡(luò)的拓?fù)涞刃畔?,ipfw和natd結(jié)合就構(gòu)成了強(qiáng)大的包過(guò)濾網(wǎng)關(guān)。而squid是Internet上最流行的Web代理服務(wù)器之一,雖然它提供的是普通的正向代理能力,但其為開(kāi)放源代碼軟件,并且具有強(qiáng)大的可配置性,因此很容易可以將其更改為反向代理服務(wù)器。
這種方式對(duì)內(nèi)部網(wǎng)絡(luò)的保護(hù)能力,要小于雙層防火墻軟件,等于普通的單層防火墻軟件,然而其對(duì)Web服務(wù)器的保護(hù)卻大于雙層防火墻系統(tǒng)中對(duì)位于對(duì)?;饏^(qū)內(nèi)的Web服務(wù)器的保護(hù)。然而其本身為單層系統(tǒng),因此比雙層系統(tǒng)配置起來(lái)更方便,是一種簡(jiǎn)單有效的方案。其中反向代理功能能夠提供豐富的連接記錄,可以用來(lái)提供預(yù)防和捕獲攻擊的能力,而包過(guò)濾和網(wǎng)絡(luò)地址翻譯可以讓內(nèi)部網(wǎng)絡(luò)的主機(jī)可以使用多種協(xié)議訪問(wèn)外部網(wǎng)絡(luò),不需要考慮防火墻對(duì)應(yīng)用協(xié)議的支持問(wèn)題。這種方式適用于大多數(shù)Intranet系統(tǒng)。
三、討論
當(dāng)需要對(duì)內(nèi)部網(wǎng)絡(luò)提供更進(jìn)一步的保護(hù)時(shí),仍然可以使用雙層防火墻模式,這樣兼具反向代理對(duì)Web服務(wù)器的保護(hù)能力,和雙層防火墻對(duì)內(nèi)部數(shù)據(jù)的更大的保護(hù)能力。
當(dāng)組織向外提供信息發(fā)布的時(shí)候,并不僅僅要提供一些靜態(tài)的網(wǎng)頁(yè),更大的可能是要根據(jù)實(shí)際的數(shù)據(jù)動(dòng)態(tài)發(fā)布信息。因此發(fā)布的網(wǎng)頁(yè)便需要通過(guò)訪問(wèn)數(shù)據(jù)庫(kù)動(dòng)態(tài)生成,通常使用的動(dòng)態(tài)生成技術(shù)有CGI或服務(wù)器端文檔解析等方式生成的。然而無(wú)論那種方式,都需要使得Web服務(wù)器能夠和數(shù)據(jù)庫(kù)服務(wù)器進(jìn)行連接、通信。然而系統(tǒng)數(shù)據(jù)庫(kù)應(yīng)該是內(nèi)部網(wǎng)絡(luò)中應(yīng)該首要保護(hù)的系統(tǒng),因此要求安全性要求不高的對(duì)外發(fā)布信息的Web服務(wù)器和內(nèi)部數(shù)據(jù)庫(kù)服務(wù)器放置在同一個(gè)網(wǎng)段,就會(huì)造成相應(yīng)的安全問(wèn)題。
為了提高訪問(wèn)數(shù)據(jù)庫(kù)服務(wù)器的安全性,就需要對(duì)能夠訪問(wèn)數(shù)據(jù)庫(kù)的CGI程序進(jìn)行限制,這就要求對(duì)啟動(dòng)CGI的URL請(qǐng)求比對(duì)普通url進(jìn)行更嚴(yán)格的限制。與普通包過(guò)濾型防火墻不同,反向代理能夠理解http協(xié)議,能區(qū)分出不同的url請(qǐng)求,從而能夠?qū)崿F(xiàn)對(duì)cgi請(qǐng)求比普通http請(qǐng)求更嚴(yán)格的控制,甚至可以將cgi請(qǐng)求發(fā)送到一臺(tái)專用的CGI服務(wù)器進(jìn)行處理,從而分別處理普通url請(qǐng)求和cgi請(qǐng)求。這臺(tái)cgi服務(wù)器可以具有訪問(wèn)數(shù)據(jù)庫(kù)的能力,保證數(shù)據(jù)庫(kù)的安全.