劉坤燦
(金航數碼科技有限責任公司,北京 100028)
現如今互聯網技術快速發展,TCP/IP應用協議類型正在飛速增長。應用層載荷中可能充斥著各種攻擊程序。為了防范基于應用層的攻擊,越來越多的企業使用應用防火墻對內部網絡進行安全防護。傳統防火墻只解析數據包包頭,而應用防火墻需要解析數據包的全部內容,并進行鏈路流量整形和異常流量檢測,因此,應用防火墻的處理負載相比傳統防火墻成倍的增加,致使防火墻故障率升高。防火墻往往部署在網絡的邊界處,一旦防火墻出現故障,將直接導致內外部網絡中斷,嚴重影響企業用戶的網絡訪問和數據傳輸。
針對上述問題,市場上主流的防火墻廠商通過雙機熱備的部署模式解決了這一問題。該模式部署了2臺防火墻,互為備份,正常情況下由工作機進行數據流量的分析和過濾工作,當工作機故障時,自動切換至備份機,不影響網絡的正常使用。雖然雙機熱備的解決方案可以降低防火墻系統的整體故障率,但是部署難度較高,且同一時間只有1臺防火墻設備在工作,資源利用率較低。隨著虛擬化和云計算技術的發展和運用,企業內部的網絡結構越來越復雜,且調整越來越頻繁[1]。部署于網絡出口的硬件防火墻既不能防護來自內部的攻擊,又不能滿足虛擬化、云計算環境下網絡結構快速調整帶來的安全防護快速跟進需求。
為了提升防火墻系統的可用性,降低部署難度,適應虛擬化、云計算環境下的安全防護需求,該文分析了應用防火墻和SDN(Software Defined Network)技術,并設計了一種基于SDN技術的采用分布式部署的應用防火墻系統。該防火墻系統首先利用SDN技術的控制器對網絡流量進行負載分配,然后將數據包重定向至多個分布式部署的應用防火墻組件進行深度包檢測和過濾,符合防火墻訪問控制規則的數據包將由應用防火墻轉發出去,不符合規則的數據包則被阻斷。
應用防火墻就是主要對應用層的安全威脅進行防護的防火墻,用于彌補傳統防火墻基于端口和IP地址進行數據包過濾而無法防護應用層安全威脅的缺陷。應用防火墻主要運用深度包檢測技術(Deep Packet Inspection)對網絡流量進行深度分析和檢測。深度包檢測技術是一種網絡流量檢測分析技術,它通過檢測數據包的包頭和載荷(payload)部分,分析數據流量可能存在的攻擊行為、病毒、惡意代碼、垃圾郵件等違規內容。深度包檢測技術的“深度”是指其與普通報文檢測技術相比,分析層次更加深入。“普通報文檢測”僅分析IP報文中傳輸層以下的數據,包括傳輸層包頭(含源端口和目的端口)、網絡層包頭(含源地址和目的地址)和數據鏈路層幀頭(含源MAC地址和目的MAC地址),而深度包檢測技術除了對這部分數據進行分析,還會對應用層數據進行分析,識別數據流量的應用類型,檢測其承載的信息內容[2]。
傳統網絡為了提升數據的傳輸速度,將路由器和交換機的處理邏輯燒錄在硬件設備中,導致其無法輕易修改和升級,增加了網絡創新難度,不能滿足互聯網日益增長的動態管理和擴展需求。SDN技術[3]將傳統網絡的數據轉發(data plane)與路由控制(control plane)2個功能分離,實現了利用軟件系統集中控制網絡設備的目標,解決了網絡結構快速調整和擴展的難題。
2006年,斯坦福大學的Nick McKeown提出了OpenFlow[4]的概念。OpenFlow協議是SDN轉發層和控制層之間通信所使用的協議,它的出現使得軟件系統控制網絡設備的轉發規則成為現實,軟件定義網絡也在OpenFlow的基礎上逐步落地。OpenFlow網絡中,軟件系統通過控制器向上提供的編程接口,可以對網絡設備進行集中管理和配置,從而使網絡結構的動態調整和快速變化成為可能。目前虛擬化和云計算技術也采用了OpenFlow相關組件進行虛擬化系統的網絡管理。
該文決定采用SDN技術與深度包檢測技術結合的方式來設計分布式應用防火墻系統。為了實現2種技術的有效結合,分布式應用防火墻系統的設計遵循以下技術路線。
2.1.1 運用SDN技術實現多臺防火墻負載均衡和內部流量過濾
采用軟件進行數據分析和處理的應用防火墻,處理速度和吞吐量較硬件防火墻有所下降,如果使用負載均衡技術進行分布式部署,將提高整個防火墻系統的吞吐量和性能,而且即使一兩臺防火墻發生故障,通過實時監控和流量重定向,整個系統依然可以較好地完成防火墻功能。SDN中所有的網絡設備都可以通過OpenFlow控制器進行集中式的控制和管理,那么OpenFlow也可以用來做防火墻的負載均衡工作。OpenFlow控制器中可以集成負載均衡模塊和流量重定向模塊,實現將數據包動態分配到不同IP地址的防火墻。此外,流量重定向模塊還可以根據需求,將內部數據包重定向至防火墻,實現內部流量的檢測和過濾。
2.1.2 采用傳統包過濾防火墻技術
應用防火墻系統也應當具備傳統防火墻的包過濾功能,從而實現應用層之下數據流量的快速檢測和過濾。將傳統包過濾防火墻與應用防火墻技術結合,可以在應用層之下過濾一部分流量,降低應用防火墻組件的處理負載。
Linux系統的netfilter/iptables防火墻是一種有狀態的防火墻,它可以持續追蹤穿過防火墻的各種網絡連接(例如TCP與UDP連接)的狀態,這一功能是其他主機防火墻工具無法提供的。該系統使用netfilter/iptables作為傳統包過濾防火墻[5]。
2.1.3 運用深度包檢測技術
采用深度包檢測技術來實現應用防火墻功能。深度包檢測技術不同于內容包檢測技術,內容包檢測技術把應用層數據包當成一個個孤立的數據包,沒有考慮到應用層數據的上下聯系,無法檢測那些把攻擊特征分散到多個數據包的黑客攻擊,它的檢測能力非常有限。而深度包檢測技術則把分散的應用層數據恢復成連貫的信息,然后進行檢測,能夠防御各種分散特征的網絡攻擊[1]。
該分布式應用防火墻系統整體上分為Web界面、負載均衡模塊、流量重定向模塊、主程序模塊、流量統計模塊、應用檢測模塊、防火墻配置模塊、事件記錄模塊以及傳統防火墻模塊9個部分。其中,負載均衡模塊和流量重定向模塊是OpenFlow控制器的功能模塊。該防火墻系統的總體結構設計如圖1所示。

圖1 分布式應用防火墻的系統架構
2.3.1 Web界面
該系統的Web界面由系統的Web前臺服務提供,Web前臺服務采用的是Apache Tomcat應用,為訪問和配置防火墻提供可視化接口。用戶使用網頁瀏覽器登錄Web前臺服務地址,利用Web界面實現控制器和軟件防火墻組件的設置。
2.3.2 負載均衡模塊
該系統的負載均衡模塊由NOX控制器中的開源負載均衡組件改寫后實現,該模塊維護一個循環鏈表,該鏈表記錄了分布式應用防火墻系統中的每一個可對外提供服務的防火墻IP地址。當有新的任務或數據流到來時,負載均衡器會將任務輪流分配給各個防火墻,如此循環往復。
2.3.3 流量重定向模塊
流量重定向模塊接收負載均衡模塊的分配信息,生成通往指定防火墻的流條目,然后下發給OpenFlow交換機。此外,流量重定向模塊也可接收控制器的配置信息,生成將內部流量轉發至防火墻的流條目,并下發給OpenFlow交換機。
2.3.4 主程序模塊
主程序模塊是軟件防火墻層面的主要模塊,負責加載防火墻配置信息,將軟件防火墻各模塊實例化,并完成各模塊實例的初始化。主程序模塊使用網絡接口與Web前臺通信,根據Web界面的配置信息,調用各模塊的處理函數,使防火墻配置生效。
2.3.5 防火墻配置模塊
防火墻配置模塊用于實現對傳統防火墻模塊的配置。該模塊通過將iptables防火墻的配置命令分解,定義地址對象、服務對象和時間對象,使防火墻實現可視化的過濾規則設置。
2.3.6 傳統防火墻模塊
傳統防火墻模塊由Linux內核的netfilter組件實現,netfilter組件是成熟的Linux組件,運行穩定且高效,保證了傳統包過濾防火墻對數據包的快速分析和過濾[6]。
2.3.7 應用檢測模塊
應用檢測模塊運用深度包檢測技術,改進了開源項目OpenDPI的部分功能,實現了應用層協議識別、應用數據檢測和過濾、URL地址過濾等功能。
2.3.8 流量統計模塊
流量統計模塊用于對經過防火墻系統的網絡流量進行統計和匯總,可以從多個維度進行統計,比如針對各種應用協議流量的統計、流入流量的統計、流出流量的統計等。
2.3.9 事件記錄模塊
事件記錄模塊的主要功能是用于安全審計規則和日志記錄規則的配置,以及報警和日志事件的存儲、檢索。
該文采用軟件定義網絡設備搭建一個實驗環境來驗證防火墻系統的有效性。實驗環境部署和配置如圖2所示。
該實驗中,使用2臺物理服務器分別安裝1個Open vSwitch軟交換機和2臺KVM虛擬機,在軟交換機上分別創建虛擬橋網橋0和網橋1,將服務器的物理網卡0、網卡1和網卡2、網卡3端口分別加入軟交換機,同時分別連接2臺虛擬機,虛擬機端口分別為端口0、端口1和端口2、端口3。在虛擬機1和虛擬機2上分別安裝了應用防火墻,并設置同樣的訪問控制策略。在另一臺物理機上安裝控制器,并將其連接物理服務器2的網卡3端口。
設置控制器IP地址為192.168.10.200,網橋0的IP地址為192.168.10.1,網橋1的IP地址為192.168.10.2,測試計算機的IP地址為192.168.10.3,虛擬機3的IP地址為192.168.10.4,虛擬機4的IP地址為192.168.10.5,虛擬機1(應用防火墻)的IP地址為192.168.10.100,虛擬機2(應用防火墻)的IP地址為192.168.10.101。
實驗采用ping命令和流量發生器發送網絡流量,并使用抓包工具查看每個端口的流量情況。
場景一:控制層中預先不開啟負載均衡和流量重定向功能。在測試計算機上向虛擬機3和虛擬機4發送ICMP報文,操作指令為ping 192.168.10.4和ping 192.168.10.5。

圖2 分布式應用防火墻實驗環境
實驗結果:測試計算機可以ping通虛擬機3和虛擬機4。
場景二:控制層中預先開啟負載均衡和流量重定向功能,將測試計算機訪問虛擬機3和虛擬機4的流量重定向到虛擬機1和虛擬機2,同時在應用防火墻上設置訪問控制規則,不允許測試計算機對虛擬機1和虛擬機2進行ICMP通信。在測試計算機上向虛擬機3和虛擬機4發送ICMP報文,操作指令為ping 192.168.10.4和ping 192.168.10.5。
實驗結果:測試計算機不可以ping通虛擬機3和虛擬機4。通過抓包工具查看端口2和端口3端口,發現端口2和端口3端口并未接收到來自測試計算機的ICMP請求報文,但是在查看端口0時,發現有來自測試計算機訪問虛擬機3的ICMP請求報文,查看端口1時,有來自測試計算機訪問虛擬機4的ICMP請求報文。
場景三:在測試計算機使用流量發生器向虛擬機3發送HTTP、FTP、POP3應用流量,防火墻開啟所有應用協議的解析,同時開啟對上述3種協議的阻斷。
實驗結果:虛擬機3未接收到上述3種應用協議的數據包,但是查看應用防火墻的流量統計模塊,發現這3種應用協議的流量數目都增加了。測試數據證明該防火墻能成功檢測并過濾以上3種應用協議。
通過以上實驗證明,分布式應用防火墻系統實現了網絡流量的重定向和負載分攤,以及對應用層協議的檢測和過濾功能。
隨著計算機和網絡技術的飛速發展,網絡安全問題日益嚴重。作為網絡安全防護措施中不可或缺的一環,防火墻的作用越來越關鍵。目前主流應用防火墻大多采用軟件方式實現深度包檢測,當檢測規則較多時處理速度會變慢,容易成為網絡瓶頸。此外,隨著虛擬化和云計算技術的運用,傳統的硬件防火墻不能適用新的應用場景。針對該現狀,該文設計了一種基于SDN技術的分布式應用防火墻系統,并通過實驗證明該防火墻系統的可行性和有效性。然而,也存在一些需要改進和優化的地方,比如控制器存在單點故障,如何實現防火墻系統對各應用防火墻組件的存活狀態檢測和故障自動切換,也是下一步的研究內容。