隨著Internet的發展,很多機構都將自己內部的網絡連接到Internet上,因而網絡安全問題越來越重要。
一、現有防火牆技術及其局限性
為了增加網絡的安全和保護內部網絡上的重要數據,需要將內部網與Internet相隔離,當前主要通過防火牆技術來完成這個目的。然而為了保護內部主機,防火牆軟件就必須限制外部網絡中的主機對內部網絡的訪問。因此普通防火牆軟件的設置中,外部網絡無法訪問內部主機。然而,為了向外發布自己的信息,就需要允許外部網絡訪問自己的Web服務器。最簡單的處理方法是將Web服務器放在防火牆之外,這樣就將Web服務器和內部網絡區分開,Web服務器暴露在網絡外部,就有可能招受攻擊而導致服務器癱瘓或網頁被更改等潛在的問題。而當前,Web服務器上面的信息越來越豐富和重要,Web服務器的重要性也非常明顯。因此就需要使用防火牆來保護它,如果要將Web服務器放在防火牆之內,則需要防火牆的支持。
圖1普通防火牆設置
當前防火牆主要有兩種類型,一種為包過濾型防火牆,這種防火牆針對每個IP包識別它是否符合管理員設定的過濾規則,符合一定要求的才被正確轉發。可以使用的過濾規則包括源和目的主機的名字和IP地址,端口地址,使用的網絡界面,以及IP包的類型。通常包過濾型的防火牆軟件根據IP包的類型屏蔽所有的由外部發起的連接請求,從而保護內部網絡。如果要將Web服務器放在放火牆之內,就需要允許對這個Web服務器和它使用的TCP端口的訪問。
圖2包過濾型防火牆過程
另一種類型的防火牆為應用代理型的防火牆,這種防火牆針對每種應用協議提供相應的代理服務,由代理服務器訪問網絡,並將結果返回給客戶機。標准的http協議的代理服務,客戶端的浏覽器必須配置代理服務器的IP地址,不可能要求其他外部主機為訪問這個內部網絡上的主機而重新設置代理服務器的地址。代理服務器並不區分外部網絡和內部網絡,但是代理服務器使用Internet上的名字解析來確定Web服務器的位置,而通常防火牆內使用內部地址,這也決定了普通代理型防火牆不支持外部網絡對內部Web服務器的http訪問請求。因此普通代理服務器簡單的屏蔽外部地址的訪問,因此最簡單的保護對外發布信息的Web服務器的方式是使用包過濾型的防火牆。
圖3代理型防火牆過程
一旦允許外部網絡中的主機可以向內部網絡發起連接請求,攻擊者就可以在網絡外部嘗試進行連接,這增加了攻擊者攻擊內部網絡的方式,降低了整個網絡的安全系數。如果不允許外部主機向內部網絡發起連接請求,攻擊者就只好在外部發起攻擊,使用特洛伊木馬或者IP spoof等技術,這些方式與發起主動連接的攻擊方式相比,沒有現成的工具供利用,因此使得攻擊的復雜性大大增加,因此網絡被攻擊的可能性大為減少,幾乎成為不可能。一旦攻擊者進入內部網絡中的Web服務器,整個內部網絡就暴露在攻擊者的面前,防火牆就不能起到應有的作用了。因此通過重新定義包過濾型防火牆的過濾規則,並將Web服務器放在內部網絡內,只是一種簡單的保護Web服務器的方法,然而不利於保護整個內部網絡的安全。
因此,為了在保護Web服務器和內部網絡的安全,當前使用的更安全的做法是實現雙層防火牆。外層防火牆實現包過濾功能,然而卻允許外部網絡訪問其中的Web服務器,內部防火牆允許最中間的內部網絡可以訪問外部網絡。在外部防火牆和內部防火牆之間稱為停火區,提供外部網絡訪問的服務器就位於這個區域,表明即使攻擊者通過外部防火牆進入這個區域,也無法攻入內部網絡。雙層防火牆通過設置了兩層防火牆,使得內部網絡更為安全。然而,它在保護Web服務器方面的作用,與單層防火牆相似。因為此時Web服務器仍然只受到一層防火牆的保護,同樣也無法對外部隱藏防火牆內主機的各種信息,例如服務器的ip等。而且這層防火牆是對應用協議一無所知的包過濾防火牆,由於包過濾的方式不識別應用協議,通常為http協議,那麼就無法正確識別外部的連接請求是否屬於正常連接,通常也無法進行詳盡的連接記錄。為了更好的保護Web服務器不被外部攻擊者破壞,就應該屏蔽內部服務器的IP地址等信息,並且防火牆能夠識別連接協議,顯然這是代理型防火牆的任務。
圖4雙層防火牆設置
二、反向代理方式
通常的代理服務器,只用於代理內部網絡對Internet的連接請求,客戶機必須指定代理服務器,並將本來要直接發送到Web服務器上的http請求發送到代理服務器中。由於外部網絡上的主機並不會配置並使用這個代理服務器,普通代理服務器也被設計為在Internet上搜尋多個不確定的服務器,而不是針對Internet上多個客戶機的請求訪問某一個固定的服務器,因此普通的Web代理服務器不支持外部對內部網絡的訪問請求。當一個代理服務器能夠代理外部網絡上的主機,訪問內部網絡時,這種代理服務的方式稱為反向代理服務。此時代理服務器對外就表現為一個Web服務器,外部網絡就可以簡單把它當作一個標准的Web服務器而不需要特定的配置。不同之處在於,這個服務器沒有保存任何網頁的真實數據,所有的靜態網頁或者CGI程序,都保存在內部的Web服務器上。因此對反向代理服務器的攻擊並不會使得網頁信息遭到破壞,這樣就增強了Web服務器的安全性。
圖5反向代理模式
反向代理方式和包過濾方式或普通代理方式並無沖突,因此可以在防火牆設備中同時使用這兩種方式,其中反向代理用於外部網絡訪問內部網絡時使用,正向代理或包過濾方式用於拒絕其他外部訪問方式並提供內部網絡對外部網絡的訪問能力。因此可以結合這些方式提供最佳的安全訪問方式。
圖6綜合防火牆模式
綜合反向代理功能和普通拒絕外部訪問的普通防火牆軟件相結合,就能構成一個既具有保護內部網絡、又能對外提供Web信息發布的能力的防火牆系統。由於反向代理能力需要軟件實現,因此不能使用現有的防火牆系統,需要使用相關軟件進行開發改進。Unix顯然是首選平台,我們基於FreeBSD系統,提出一種基於ipfw、natd與squid的防火牆設置方式。其中ipfw可以基於ip地址、端口、協議等對ip包進行過濾,natd提供網絡地址轉換功能,這樣就隱藏了內部網絡的拓撲等信息,ipfw和natd結合就構成了強大的包過濾網關。而squid是Internet上最流行的Web代理服務器之一,雖然它提供的是普通的正向代理能力,但其為開放源代碼軟件,並且具有強大的可配置性,因此很容易可以將其更改為反向代理服務器。
這種方式對內部網絡的保護能力,要小於雙層防火牆軟件,等於普通的單層防火牆軟件,然而其對Web服務器的保護卻大於雙層防火牆系統中對位於對停火區內的Web服務器的保護。然而其本身為單層系統,因此比雙層系統配置起來更方便,是一種簡單有效的方案。其中反向代理功能能夠提供豐富的連接記錄,可以用來提供預防和捕獲攻擊的能力,而包過濾和網絡地址翻譯可以讓內部網絡的主機可以使用多種協議訪問外部網絡,不需要考慮防火牆對應用協議的支持問題。這種方式適用於大多數Intranet系統。
三、討論
當需要對內部網絡提供更進一步的保護時,仍然可以使用雙層防火牆模式,這樣兼具反向代理對Web服務器的保護能力,和雙層防火牆對內部數據的更大的保護能力。
當組織向外提供信息發布的時候,並不僅僅要提供一些靜態的網頁,更大的可能是要根據實際的數據動態發布信息。因此發布的網頁便需要通過訪問數據庫動態生成,通常使用的動態生成技術有CGI或服務器端文檔解析等方式生成的。然而無論那種方式,都需要使得Web服務器能夠和數據庫服務器進行連接、通信。然而系統數據庫應該是內部網絡中應該首要保護的系統,因此要求安全性要求不高的對外發布信息的Web服務器和內部數據庫服務器放置在同一個網段,就會造成相應的安全問題。
為了提高訪問數據庫服務器的安全性,就需要對能夠訪問數據庫的CGI程序進行限制,這就要求對啟動CGI的URL請求比對普通url進行更嚴格的限制。與普通包過濾型防火牆不同,反向代理能夠理解http協議,能區分出不同的url請求,從而能夠實現對cgi請求比普通http請求更嚴格的控制,甚至可以將cgi請求發送到一台專用的CGI服務器進行處理,從而分別處理普通url請求和cgi請求。這台cgi服務器可以具有訪問數據庫的能力,保證數據庫的安全。
圖7分離Web和CGI服務器的模式
總結本文中的論述,可以看出,反向代理方式是一種對外提供Web發布時使用的有效的防火牆技術,使用它和傳統防火牆技術相結合,就能實現簡單有效的防火牆系統。
摘自:http://freebsd.online.ha.cn