1. 程式人生 > >使用反向代理技術保護Web伺服器

使用反向代理技術保護Web伺服器

為了增加網路的安全和保護內部網路上的重要資料,需要將內部網與Internet相隔離,當前主要通過防火牆技術來完成這個目的。然而為了保護內部主機,防火牆軟體就必須限制外部網路中的主機對內部網路的訪問。因此普通防火牆軟體的設定中,外部網路無法訪問內部主機。然而,為了向外釋出自己的資訊,就需要允許外部網路訪問自己的Web伺服器。最簡單的處理方法是將Web伺服器放在防火牆之外,這樣就將Web伺服器和內部網路區分開,Web伺服器暴露在網路外部,就有可能招受攻擊而導致伺服器癱瘓或網頁被更改等潛在的問題。而當前,Web伺服器上面的資訊越來越豐富和重要,Web伺服器的重要性也非常明顯。因此就需要使用防火牆來保護它,如果要將Web伺服器放在防火牆之內,則需要防火牆的支援。

當前防火牆主要有兩種型別,一種為包過濾型防火牆,這種防火牆針對每個IP包識別它是否符合管理員設定的過濾規則,符合一定要求的才被正確轉發。可以使用的過濾規則包括源和目的主機的名字和IP地址,埠地址,使用的網路介面,以及IP包的型別。通常包過濾型的防火牆軟體根據IP包的型別遮蔽所有的由外部發起的連線請求,從而保護內部網路。如果要將Web伺服器放在放火牆之內,就需要允許對這個Web伺服器和它使用的TCP埠的訪問。

另一種型別的防火牆為應用代理型的防火牆,這種防火牆針對每種應用協議提供相應的代理服務,由代理伺服器訪問網路,並將結果返回給客戶機。標準的http協議的代理服務,客戶端的瀏覽器必須配置代理伺服器的IP地址,不可能要求其他外部主機為訪問這個內部網路上的主機而重新設定代理伺服器的地址。代理伺服器並不區分外部網路和內部網路,但是代理伺服器使用Internet上的名字解析來確定Web伺服器的位置,而通常防火牆內使用內部地址,這也決定了普通代理型防火牆不支援外部網路對內部Web伺服器的http訪問請求。因此普通代理伺服器簡單的遮蔽外部地址的訪問,因此最簡單的保護對外發布資訊的Web伺服器的方式是使用包過濾型的防火牆。

    一旦允許外部網路中的主機可以向內部網路發起連線請求,攻擊者就可以在網路外部嘗試進行連線,這增加了攻擊者攻擊內部網路的方式,降低了整個網路的安全係數。如果不允許外部主機向內部網路發起連線請求,攻擊者就只好在外部發起攻擊,使用特洛伊木馬或者IP spoof等技術,這些方式與發起主動連線的攻擊方式相比,沒有現成的工具供利用,因此使得攻擊的複雜性大大增加,因此網路被攻擊的可能性大為減少,幾乎成為不可能。一旦攻擊者進入內部網路中的Web伺服器,整個內部網路就暴露在攻擊者的面前,防火牆就不能起到應有的作用了。因此通過重新定義包過濾型防火牆的過濾規則,並將Web伺服器放在內部網路內,只是一種簡單的保護Web伺服器的方法,然而不利於保護整個內部網路的安全。

    因此,為了在保護Web伺服器和內部網路的安全,當前使用的更安全的做法是實現雙層防火牆。外層防火牆實現包過濾功能,然而卻允許外部網路訪問其中的Web伺服器,內部防火牆允許最中間的內部網路可以訪問外部網路。在外部防火牆和內部防火牆之間稱為停火區,提供外部網路訪問的伺服器就位於這個區域,表明即使攻擊者通過外部防火牆進入這個區域,也無法攻入內部網路。雙層防火牆通過設定了兩層防火牆,使得內部網路更為安全。然而,它在保護Web伺服器方面的作用,與單層防火牆相似。因為此時Web伺服器仍然只受到一層防火牆的保護,同樣也無法對外部隱藏防火牆內主機的各種資訊,例如伺服器的ip等。而且這層防火牆是對應用協議一無所知的包過濾防火牆,由於包過濾的方式不識別應用協議,通常為http協議,那麼就無法正確識別外部的連線請求是否屬於正常連線,通常也無法進行詳盡的連線記錄。為了更好的保護Web伺服器不被外部攻擊者破壞,就應該遮蔽內部伺服器的IP地址等資訊,並且防火牆能夠識別連線協議,顯然這是代理型防火牆的任務。
 
通常的代理伺服器,只用於代理內部網路對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系統。