第十一卷 用反向代理技術保護Web服務器(2 / 2)

通常的代理服務器,隻用於代理內部網絡對Internet的連接請求,客戶機必須指定代理服務器,並將本來要直接發送到Web服務器上的http請求發送到代理服務器中。由於外部網絡上的主機並不會配置並使用這個代理服務器,普通代理服務器也被設計為在Internet上搜尋多個不確定的服務器,而不是針對Internet上多個客戶機的請求訪問某一個固定的服務器,因此普通的Web代理服務器不支持外部對內部網絡的訪問請求。當一個代理服務器能夠代理外部網絡上的主機,訪問內部網絡時,這種代理服務的方式稱為反向代理服務。此時代理服務器對外就表現為一個Web服務器,外部網絡就可以簡單把它當作一個標準的Web服務器而不需要特定的配置。不同之處在於,這個服務器沒有保存任何網頁的真實數據,所有的靜態網頁或者CGI程序,都保存在內部的Web服務器上。因此對反向代理服務器的攻擊並不會使得網頁信息遭到破壞,這樣就增強了Web服務器的安全性。

反向代理方式和包過濾方式或普通代理方式並無衝突,因此可以在防火牆設備中同時使用這兩種方式,其中反向代理用於外部網絡訪問內部網絡時使用,正向代理或包過濾方式用於拒絕其他外部訪問方式並提供內部網絡對外部網絡的訪問能力。因此可以結合這些方式提供最佳的安全訪問方式。

綜合反向代理功能和普通拒絕外部訪問的普通防火牆軟件相結合,就能構成一個既具有保護內部網絡、又能對外提供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服務器可以具有訪問數據庫的能力,保證數據庫的安全。

總結本文中的論述,可以看出,反向代理方式是一種對外提供Web發布時使用的有效的防火牆技術,使用它和傳統防火牆技術相結合,就能實現簡單有效的防火牆係統。