複製鏈接
請複製以下鏈接發送給好友

狀態防火牆

鎖定
狀態防火牆是一種能夠提供狀態封包檢查或狀態檢視功能的防火牆。
中文名
狀態防火牆
外文名
Stateful firewall
縮    寫
SPI
性    能
狀態查看功能的防火牆
功    能
動態數據包過濾
領    域
網絡安全

狀態防火牆簡介

狀態防火牆(英語:Stateful firewall),一種能夠提供狀態數據包檢查(stateful packet inspection,縮寫為SPI)或狀態查看(stateful inspection)功能的防火牆,能夠持續追蹤穿過這個防火牆的各種網絡連接(例如TCPUDP連接)的狀態。這種防火牆被設計來區分不同連接種類下的合法數據包。只有匹配主動連接的數據包才能夠被允許穿過防火牆,其他的數據包都會被拒絕。
這種防火牆也可以提供動態數據包過濾(Dynamic Packet Filtering)的功能。 [1] 

狀態防火牆歷史

Check Point軟件公司於1994年引入了FireWall-1產品。
在開發狀態防火牆之前,防火牆是無狀態的。無狀態防火牆分別處理每個網絡幀或數據包。這種數據包過濾器在OSI網絡層(層3)上運行,並且更高效地工作,因為它們只查看數據包報頭部分。他們沒有跟蹤分組上下文,例如流量的性質。這樣的防火牆無法知道任何給定的數據包是否是現有連接的一部分,是試圖建立新的連接還是隻是一個流氓數據包。現代防火牆具有連接感知能力(或狀態感知能力),為網絡管理員提供了對網絡流量的更精細控制。
使用無狀態防火牆的網絡操作的典型例子是文件傳輸協議(FTP)。按照設計,這些協議需要能夠打開到任意高端口的連接才能正常工作。由於無狀態防火牆無法知道發往受保護網絡的數據包(例如,某些主機的目標端口4970)是合法FTP會話的一部分,因此它將丟棄該數據包。具有應用程序檢查功能的狀態防火牆通過維護一個打開的連接表,檢查某些數據包的有效負載並智能地將新的連接請求與現有的合法連接相關聯來解決此問題。
早期嘗試生產防火牆的應用層是7層OSI模型的最高層。這種方法需要大量的計算能力,並且在現代實現中不常用。 [1] 

狀態防火牆説明

狀態防火牆會跟蹤網絡連接的狀態(例如TCP流或UDP通信),並且可以保存內存中每個連接的重要屬性。這些屬性統稱為連接狀態,可能包括連接涉及的IP地址和端口以及穿過連接的數據包的序列號等詳細信息。狀態檢查隨着時間的推移監視傳入和傳出的數據包以及連接的狀態,並將數據存儲在動態狀態表中。這種累積數據是經過評估的,所以過濾決策不僅基於管理員定義的規則,而且還取決於先前連接構建的上下文以及屬於同一連接的先前分組。
在建立連接時執行大部分CPU密集型檢查。條目僅為滿足定義的安全策略的TCP連接或UDP流創建。之後,所有數據包(用於該會話)都會被快速處理,因為它確定它是否屬於現有的預篩選會話很簡單快捷。與這些會話關聯的數據包可以通過防火牆。與任何策略不匹配的會話均被拒絕,因為數據包與現有表項不匹配。
為了防止狀態表被填滿,如果在一段時間內沒有流量通過,會話將超時。這些陳舊的連接將從狀態表中刪除。因此,許多應用程序會定期發送Keepalive消息,以防止防火牆在沒有用户活動期間斷開連接,儘管可以指示某些防火牆將這些消息發送給應用程序。
根據連接協議,維護連接的狀態對於防火牆來説或多或少是複雜的。例如,TCP本質上是一個有狀態的協議,因為連接通過三次握手(“SYN,SYN-ACK,ACK”)建立,並以“FIN,FIN-ACK,ACK”交換結束。這意味着所有中都帶有“SYN”的數據包接收到的防火牆被解釋為打開新的連接。如果客户端請求的服務在服務器上可用,它將使用防火牆也將跟蹤的“SYN-ACK”數據包進行響應。一旦防火牆收到客户端的“ACK”響應,它將連接轉移到“ESTABLISHED”狀態,因為連接已被雙向認證。這允許通過建立的連接跟蹤未來的數據包。同時,防火牆將丟棄與其狀態表中記錄的現有連接無關的所有數據包(或“SYN”數據包),防止黑客入侵黑客攻擊受保護機器。
其他連接協議,即UDPICMP,並不基於像TCP這樣的雙向連接,使得狀態防火牆的安全性稍差。為了在這些情況下跟蹤連接狀態,防火牆必須在看到第一個有效數據包之後將會話轉移到ESTABLISHED狀態。然後,它只能通過以下數據包的源地址和目的地址的地址和端口來跟蹤連接。與可以通過“FIN,ACK”交換關閉的TCP連接不同,這些無連接協議允許會話僅以超時結束。例如,這使得UDP打洞成為可能。
通過跟蹤連接狀態,狀態防火牆在分組檢查方面提供了更高的效率。這是因為對於現有的連接,防火牆只需檢查狀態表,而不是根據防火牆的規則集檢查數據包,這可能非常廣泛。另外,在與狀態表匹配的情況下,防火牆不需要執行深度包檢測 [2] 

狀態防火牆應用程序級別的過濾器

單獨的數據包過濾不被認為提供了足夠的保護。為了有效阻止點對點相關的網絡流量,需要做一個防火牆來進行應用程序過濾,這可以被看作是狀態數據包檢查的擴展。狀態數據包檢查可以確定通過每個端口發送的協議類型,但應用程序級別的過濾器會查看協議的使用情況。例如,應用程序級過濾器可能能夠區分用於訪問網頁的HTTP流量與用於文件共享的HTTP流量之間的差異,而僅執行數據包過濾的防火牆會平等對待所有HTTP流量。
應用層防火牆通常比狀態檢查慢。應用層防火牆有時使用應用代理來實現。建立兩個TCP連接:一個在分組源和防火牆之間,另一個在防火牆和分組目的地之間。應用程序代理攔截代表目標的到達數據包,檢查應用程序有效負載,然後將允許的數據包中繼到目標。可疑數據被丟棄,客户端和服務器從不直接相互通信。與在網絡層檢查數據包相比,代理服務器必然涉及更多的協議棧開銷。此外,由於每個應用程序都需要一個獨特的代理,因此代理防火牆的靈活性和狀態檢測防火牆的升級速度都較慢。儘管如此,由於應用程序級代理具有應用程序感知能力,因此代理可以更輕鬆地處理H.323或SIP等複雜協議,用於視頻會議VoIP(IP語音)。 [2] 

狀態防火牆漏洞

單個協議解碼器中的漏洞可能允許攻擊者獲得對防火牆的控制權。這種擔憂突出表明需要更新防火牆軟件。
一些有狀態的防火牆也增加了單個主機可能被誘騙進入外部連接的可能性。只有通過審核主機軟件才能完全消除這種可能性。有些防火牆可以通過瀏覽網頁(使用JavaScript或單擊按鈕後)以這種方式擊敗。 [2] 
參考資料
  • 1.    王薇. 狀態防火牆策略查詢技術研究[D]. 湖南大學, 2011.
  • 2.    王瑞軍, 王洪君, 王翠榮,等. 一種有狀態防火牆實現算法的研究[C]// 中國信息和通信安全學術會議. 2003.