簡介
狀態防火牆(英語:Stateful firewall),一種能夠提供 狀態數據包檢查(stateful packet inspection,縮寫為SPI)或 狀態查看(stateful inspection)功能的防火牆,能夠持續追蹤穿過這個防火牆的各種網路連線(例如TCP與UDP連線)的狀態。這種防火牆被設計來區分不同連線種類下的合法數據包。只有匹配主動連線的數據包才能夠被允許穿過防火牆,其他的數據包都會被拒絕。
這種防火牆也可以提供動態數據包過濾(Dynamic Packet Filtering)的功能。
歷史
Check Point軟體公司於1994年引入了FireWall-1產品。
在開發狀態防火牆之前,防火牆是無狀態的。無狀態防火牆分別處理每個網路幀或數據包。這種數據包過濾器在OSI網路層(層3)上運行,並且更高效地工作,因為它們只查看數據包的報頭部分。他們沒有跟蹤分組上下文,例如流量的性質。這樣的防火牆無法知道任何給定的數據包是否是現有連線的一部分,是試圖建立新的連線還是只是一個流氓數據包。現代防火牆具有連線感知能力(或狀態感知能力),為網路管理員提供了對網路流量的更精細控制。
使用無狀態防火牆的網路操作的典型例子是檔案傳輸協定(FTP)。按照設計,這些協定需要能夠打開到任意高連線埠的連線才能正常工作。由於無狀態防火牆無法知道發往受保護網路的數據包(例如,某些主機的目標連線埠4970)是合法FTP會話的一部分,因此它將丟棄該數據包。具有應用程式檢查功能的狀態防火牆通過維護一個打開的連線表,檢查某些數據包的有效負載並智慧型地將新的連線請求與現有的合法連線相關聯來解決此問題。
早期嘗試生產防火牆的套用層是7層OSI模型的最高層。這種方法需要大量的計算能力,並且在現代實現中不常用。
說明
狀態防火牆會跟蹤網路連線的狀態(例如TCP流或UDP通信),並且可以保存記憶體中每個連線的重要屬性。這些屬性統稱為連線狀態,可能包括連線涉及的IP位址和連線埠以及穿過連線的數據包的序列號等詳細信息。狀態檢查隨著時間的推移監視傳入和傳出的數據包以及連線的狀態,並將數據存儲在動態狀態表中。這種累積數據是經過評估的,所以過濾決策不僅基於管理員定義的規則,而且還取決於先前連線構建的上下文以及屬於同一連線的先前分組。
在建立連線時執行大部分CPU密集型檢查。條目僅為滿足定義的安全策略的TCP連線或UDP流創建。之後,所有數據包(用於該會話)都會被快速處理,因為它確定它是否屬於現有的預篩選會話很簡單快捷。與這些會話關聯的數據包可以通過防火牆。與任何策略不匹配的會話均被拒絕,因為數據包與現有表項不匹配。
為了防止狀態表被填滿,如果在一段時間內沒有流量通過,會話將逾時。這些陳舊的連線將從狀態表中刪除。因此,許多應用程式會定期傳送Keepalive訊息,以防止防火牆在沒有用戶活動期間下線,儘管可以指示某些防火牆將這些訊息傳送給應用程式。
根據連線協定,維護連線的狀態對於防火牆來說或多或少是複雜的。例如,TCP本質上是一個有狀態的協定,因為連線通過三次握手(“SYN,SYN-ACK,ACK”)建立,並以“FIN,FIN-ACK,ACK”交換結束。這意味著所有報頭中都帶有“SYN”的數據包接收到的防火牆被解釋為打開新的連線。如果客戶端請求的服務在伺服器上可用,它將使用防火牆也將跟蹤的“SYN-ACK”數據包進行回響。一旦防火牆收到客戶端的“ACK”回響,它將連線轉移到“ESTABLISHED”狀態,因為連線已被雙向認證。這允許通過建立的連線跟蹤未來的數據包。同時,防火牆將丟棄與其狀態表中記錄的現有連線無關的所有數據包(或“SYN”數據包),防止黑客入侵黑客攻擊受保護機器。
其他連線協定,即UDP和ICMP,並不基於像TCP這樣的雙向連線,使得狀態防火牆的安全性稍差。為了在這些情況下跟蹤連線狀態,防火牆必須在看到第一個有效數據包之後將會話轉移到ESTABLISHED狀態。然後,它只能通過以下數據包的源地址和目的地址的地址和連線埠來跟蹤連線。與可以通過“FIN,ACK”交換關閉的TCP連線不同,這些無連線協定允許會話僅以逾時結束。例如,這使得UDP打洞成為可能。
通過跟蹤連線狀態,狀態防火牆在分組檢查方面提供了更高的效率。這是因為對於現有的連線,防火牆只需檢查狀態表,而不是根據防火牆的規則集檢查數據包,這可能非常廣泛。另外,在與狀態表匹配的情況下,防火牆不需要執行深度包檢測。
應用程式級別的過濾器
單獨的數據包過濾不被認為提供了足夠的保護。為了有效阻止點對點相關的網路流量,需要做一個防火牆來進行應用程式過濾,這可以被看作是狀態數據包檢查的擴展。狀態數據包檢查可以確定通過每個連線埠傳送的協定類型,但應用程式級別的過濾器會查看協定的使用情況。例如,應用程式級過濾器可能能夠區分用於訪問網頁的HTTP流量與用於檔案共享的HTTP流量之間的差異,而僅執行數據包過濾的防火牆會平等對待所有HTTP流量。
套用層防火牆通常比狀態檢查慢。套用層防火牆有時使用套用代理來實現。建立兩個TCP連線:一個在分組源和防火牆之間,另一個在防火牆和分組目的地之間。應用程式代理攔截代表目標的到達數據包,檢查應用程式有效負載,然後將允許的數據包中繼到目標。可疑數據被丟棄,客戶端和伺服器從不直接相互通信。與在網路層檢查數據包相比,代理伺服器必然涉及更多的協定棧開銷。此外,由於每個應用程式都需要一個獨特的代理,因此代理防火牆的靈活性和狀態檢測防火牆的升級速度都較慢。儘管如此,由於應用程式級代理具有應用程式感知能力,因此代理可以更輕鬆地處理H.323或SIP等複雜協定,用於視頻會議和VoIP(IP語音)。
漏洞
單個協定解碼器中的漏洞可能允許攻擊者獲得對防火牆的控制權。這種擔憂突出表明需要更新防火牆軟體。
一些有狀態的防火牆也增加了單個主機可能被誘騙進入外部連線的可能性。只有通過審核主機軟體才能完全消除這種可能性。有些防火牆可以通過瀏覽網頁(使用JavaScript或單擊按鈕後)以這種方式擊敗。