天天看點

狀态檢測防火牆原理

狀态檢測防火牆原理

防火牆發展到今天,雖然不斷有新的技術産生,但從網絡協定分層的角度,仍然可以歸為以下三類:

1.包過濾防火牆;

2.基于狀态檢測技術(stateful-inspection)的防火牆;

3.應用層防火牆

這三類防火牆都是向前相容的,即基于狀态檢測的防火牆也有一般包過濾防火牆的功能,而基于應用層的防火牆也包括前兩種防火牆的功能。由于<<淺>>文已講了第一類防火牆,在這裡我就講講基于狀态檢測技術的防火牆的實作原理。

為什麼會有基于狀态檢測的防火牆呢?這就要先看看第一類普通包過濾防火牆的主要缺點,比如我們要允許内網使用者通路公網的web服務,來看看第一類普通包過濾防火牆是怎樣處理的呢?那首先我們應該建立一條類似圖1所示的規則:

狀态檢測防火牆原理

但這就行了嗎?顯然是不行的,因為這隻是允許我向外請求web服務,但web服務響應我的資料包怎麼進來呢?是以還必須建立一條允許相應響應資料包進入的 規則。好,就按上面的規則加吧,在動作欄中我們填允許,由于現在資料包是從外進來,是以源位址應該是所有外部的,這裡不做限制,在源端口填80,目标位址 也不限定,這個這個目标端口怎麼填呢?因為當我通路網站時本地端口是臨時配置設定的,也就是說這個端口是不定的,隻要是1023以上的端口都有可能,是以沒有 辦法,那隻有把這些所有端口都開放了,于是在目标端口填上1024-65535,這樣規則就如圖2所示了,實際上這也是某些第一類防火牆所采用的方法。 

狀态檢測防火牆原理

 想一想這是多麼危險,因為入站的高端口全開放了,而很多危險的服務也是使用的高端口啊,比如微軟的終端服務/遠端桌面監聽的端口就是3389,當然對這種 固定的端口還好說,把進站的3389封了就行,但對于同樣使用高端口但卻是動态配置設定端口的rpc服務就沒那麼容易處理了,因為是動态的,你不便封住某個特 定的rpc服務。

上面說了這是某些普通包過濾防火牆所采用的方法,為了防止這種開放高端口的風險,于是一些防火牆又根據tcp連接配接中的ack位值來決定資料包進出,但這種 方法又容易導緻dos攻擊,何況udp協定還沒有這種标志呢?是以普通包過濾防火牆還是沒有解決這個問題,我們仍然需要一種更完美的方法,這時就有了狀态 檢測技術,我們先不解釋什麼是狀态檢測防火牆,還是來看看它是怎樣處理上面的問題的。

同上面一樣,首先我們也需要建立好一條類似圖1的規則(但不需要圖2的規則),通常此時規則需要指明網絡連接配接的方向,即是進還是出,然後我在用戶端打開 ie向某個網站請求web頁面,當資料包到達防火牆時,狀态檢測引擎會檢測到這是一個發起連接配接的初始資料包(由syn标志),然後它就會把這個資料包中的 資訊與防火牆規則作比較,如果沒有相應規則允許,防火牆就會拒絕這次連接配接,當然在這裡它會發現有一條規則允許我通路外部web服務,于是它允許資料包外出 并且在狀态表中建立一條會話,通常這條會話會包括此連接配接的源位址、源端口、目标位址、目标端口、連接配接時間等資訊,對于tcp連接配接,它還應該會包含序列号和 标志位等資訊。當後續資料包到達時,如果這個資料包不含syn标志,也就是說這個資料包不是發起一個新的連接配接時,狀态檢測引擎就會直接把它的資訊與狀态表 中的會話條目進行比較,如果資訊比對,就直接允許資料包通過,這樣不再去接受規則的檢查,提高了效率,如果資訊不比對,資料包就會被丢棄或連接配接被拒絕,并 且每個會話還有一個逾時值,過了這個時間,相應會話條目就會被從狀态表中删除掉。

就上面外部web網站對我的響應包來說,由于狀态檢測引擎會檢測到傳回的資料包屬于web連接配接的那個會話,是以它會動态打開端口以允許傳回包進入,傳輸完 畢後又動态地關閉這個端口,這樣就避免了普通包過濾防火牆那種靜态地開放所有高端端口的危險做法,同時由于有會話逾時的限制,它也能夠有效地避免外部的 dos攻擊,并且外部僞造的ack資料包也不會進入,因為它的資料包資訊不會比對狀态表中的會話條目。

上面雖然是講的針對tcp(web服務)連接配接的狀态檢測,但這同樣對udp有效,雖然udp不是像tcp那樣有連接配接的協定,但狀态檢測防火牆會為它建立虛拟的連接配接。

相對于tcp和udp來說,icmp的處理要難一些,但它仍然有一些資訊來建立虛拟的連接配接,關鍵是有些icmp資料包是單向的,也就是當tcp和udp傳 輸有錯誤時會有一個icmp資料包傳回。對于icmp的處理,不同的防火牆産品可能不同的方法,在isa server 2000中,不支援icmp的狀态檢查,隻能靜态地允許或拒絕icmp包的進出。

從上面可以看出,基于狀态檢測的防火牆較好的解決了第一類普通包過濾防火牆的問題,為了更直覺的了解狀态檢測防火牆,我們還來看看一些實際例子,這些例子都是在isa server 2000後的表現。

(1)感受會話逾時的限制

還是舉一個能說明問題的例子,比如大家熟悉的qq(qq2003ii),為什麼你一直不聊天和做其他動作仍然能夠收到從騰訊伺服器上發來的廣告資訊呢?肯 定不是這個連接配接到騰訊伺服器的qq會話永不逾時,其實你用sniffer軟體一看就知道了,這是因為qq每到一分鐘時(但還沒到一分鐘)就會主動與騰訊服 務器聯系一次,這種聯系對防火牆後的qq是非常重要的,通常來說,對于udp協定,會話逾時都是一分鐘或小于一分鐘,另外windows 2000中udp端口的nat映射期也隻有一分鐘,它在一分鐘之内聯系,這樣就會在防火牆狀态表中保持它的會話,不至于會話被删除,想像一下,如果它不這 樣聯系的話,一分鐘後這條會話被删除,而剛好此時騰訊有個廣告要傳給你,那麼你是不能收到的,當然其他從騰訊伺服器上來的消息也不能收到,這是因為會話中 已沒有了比對的條目,而規則中又沒有靜态打開的入站端口。當然上面的分析是從使用者的角度來說的,從騰訊的角度來說,它也需要獲知使用者的連接配接狀态,是以也需 要定時通信,這已不在我們的讨論範圍之内了。除了qq,msn messenger也是這樣的。

(2)動态地打開入站端口

首先我已在isa server 2000中的protocol rules下定義了一條允許所有用戶端通路外部web網站的規則,如圖3,

狀态檢測防火牆原理

注意上面隻明确定義了出站的規則,沒有明确定義入站的規則,這是因為有狀态檢測技術起作用,我們用不着為上面的規則配套一條明确的入站規則。圖4是我在客 戶端打開網頁時在isa伺服器上進行sniffer的結果,第一行是一個帶有syn标志的初始化連接配接的資料包,本地端口是22870,第二行是對方回應的 資料包,由于與第一行屬于同一個會話,防火牆已經為它動态地打開端口22870以便進入。 

狀态檢測防火牆原理

 (3)對初始包含有ack标志的非法資料包的反應

 我在内網150.0.1.41用戶端上發送了一個帶ack的初使包給202.43.216.55,但被防火牆識别并複位(rst)了此連接配接,如圖5、6。

狀态檢測防火牆原理

基于狀态檢測技術(stateful-inspection)的防火牆有強大功能,但由于狀态檢測防火牆畢竟是工作在網絡層和傳輸層的,是以它仍然有一些 不能解決的問題需要在應用層來進行解決,比如對于動态配置設定端口的rpc就必須作特殊處理;另外它也不能過濾掉應用層中特定的内容,比如對于http内容, 它要麼允許進,要麼允許出,而不能對http内容進行過濾,這樣我們就不能控制使用者通路的web内容,也不能過濾掉外部進入内網的惡意http内容,另 外,它也不能對使用者進行認證,為了解決這些問題,我們還必須把防火牆的過濾層次擴充到應用層,這就是應用層防火牆,不過這種稱呼似乎有點不準,也許叫應用 層級的狀态檢測防火牆更合适,其實今天比較大型的商業防火牆都應該是這個級别的防火牆了,比如微軟的isa server 2000就是,在isa中這種應用層的過濾就表現為應用程式過濾器(application filters),限于篇幅,有關此類防火牆的實作原理和優缺點,筆者就不打算贅述了。