樊永霞,陳小飛
FAN Yong-xia, CHEN Xiao-fei
(石家莊科技工程職業學院,石家莊 050800)
出于性能的考率,傳統的防火墻保護了鏈路層、網絡層,放棄了對應用層的保護。伴隨著網絡技術的發展,針對應用層的網絡攻擊不斷涌現,為控制病毒,木馬等應用層的攻擊,在采購防火墻的同時不得不采購反病毒,反入侵,內容過濾等設備,多種安全設備的共存必然導致網絡拓撲和網絡管理的復雜,不同廠家的設備缺乏協調配合,缺乏互操作性,往往導致無法形成合力有效的保護網絡和數據的安全,針對這一問題,IDC提出了UTM(統一威脅管理)的概念,不僅保護鏈路層網絡層,而且保護應用層,UTM將眾多網絡安全技術融合在一個設備上,簡化了網絡結構和網絡安全設備的管理
傳統的防火墻大多采用了asic+x86cpu的架構,asic集成了如會話,路由和策略路由,橋, 虛擬專用網等諸多功能,比起x86架構,小包可以輕松達到線速,然而在asic集成AV,IPS等復雜功能不僅十分困難而且風險難以控制,顯然以cpu處理CF,IPS,AV等復雜功能更加簡便。隨著intel多核處理器,pci-e總線的出現,越來越多的UTM采用了多核x86cpu架構。
多核x86cpu架構具有可擴充、易更新、易移植等優點,然而在多核下,資源的共享和互斥,資源的調度等問題變的更加復雜,UTM的多核x86硬件平臺需要更加優秀的軟件系統軟件架構。
天才學者jacobson在2006 linux年會上提出了NetChannel架構,將性能低的矛頭直指linux內核協議棧,在linux網絡社區引起強烈爭論。
NetChannel系統框架如圖1所示。

圖1 NetChannel系統架構
NetChannel系統主要包括RootChannel和SubChannel,RootChannel處理以太層/網絡層數據,而SubChannel處理應用層數據[1]。應用程序預處理器和應用程序后處理器組成用戶空間協議棧。
相對于linux的兩個通信環,NetChannel是點對點通信,應用數據經過SubChannel直接到達應用程序而不經過linux內核協議棧,具有如下優點:
1)由于不經過linux內核協議棧,也就完全避免了packet到skb的拷貝以及skb到應用層的拷貝,是最徹底的零拷貝技術。
2)由于不經過linux內核協議棧,就不會處理linux協議棧中大量共享數據,從而減少了鎖,有利于cache的本地化。
3)當確定包是應用數據時,無需raise軟中斷,減少了系統軟中斷的個數,減少了系統的上下文切換,有利于cache的本地化。
1)當今幾乎全部主流協議棧都是在內核實現的,用戶空間協議棧難以可靠實現。
2)用戶空間協議棧和linux內核協議棧共存,難以維護,在用戶空間和內核需要維護相同功能的模塊,比如應用程序預處理器和RootChannel預處理器、應用程序后處理器和RootChannel后處理器。
盡管NetChannel具有很多優點,然而linux內核協議棧經過多年的發展已經非常可靠和完備,就連jacobson本人也承認,linux內核協議棧是最快和最完備的協議棧[2],單獨開發用戶空間協議棧有較大風險,從而不會為UTM設計人員所接受。基于以上考慮,提出了一種改進的NetChannel架構NetChannel plus
系統框架如圖2所示。

圖2 NetChannel plus系統架構
NetChannel plus分為應用層,以太層/網絡層則包括slow forward層和fast forward層。
1)以太層/網絡層。如VPN/地址轉換/路由等處理,這部分由于要求快速響應、用戶透明的特點,可以在系統的內核空間完成。其中Slow fowward主要用于建立fast forward層所需的信息FastInfo,并發送數據,而fast forward層主要通過FastInfo信息直接修改包快速發送數據,NetChannel plus在以太層/網絡層的數據處理具有較高的性能
2)應用層。對于應用層數據,因為其要處理類似病毒檢測/攻擊檢測/反垃圾檢測等比較耗費資源且相對危險數據,所以這部分操作在用戶空間完成;同時,考慮到不同用戶需求,可以提供開放應用層接口,使用部分硬件完成比如模式匹配等工作。與NetChannel不同,由于取消了應用層協議棧,當應用層處理完數據后,需要將包放入Rcv-RootChannel中,以便通過fast forward層完成以太層/網絡層的數據處理。
Netchannel plus以AppChannel取代了SubChannel,當slow forward層通過會話表發現應用數據或fast forward層通過FastInfo直接發現是應用數據時,以太層/網絡層會將數據包放入App Channel中并喚醒應用進程處理。
基于內核的模塊完成數據包分類、訪問控制、VPN、地址轉換、建立/銷毀FastInfo、建立/銷毀防火墻會話表等操作。系統初始華是為每個網卡驅動程序注冊Tx-RootChannel和Rcv-RootChannel,并且注冊App Channel
各個模塊功能如下:
1)RootChannel預處理器:從RootChannel中得到數據,然后進行以下處理:若此數據包是一個加密數據包,則進行解密;若是分片數據包,則進行分片重組;如果包上有應用程序以處理標記,則從包中取出hash信息,否則根據數據包的五元組信息(源IP地址、目標地址、協議、源端口、目標端口)計算hash值,在FastInfo中hash查找,若找到對應的條目,則把數據包交給防火墻FastForard管理器進行處理。否則數據包進入RootChannel過濾器。
2)RootChannel過濾器:根據用戶的規則配置進行數據包的規則驗證,對于非法數據包,將被丟棄。合法數據包將根據用戶配置完成地址轉化、路由查找等操作,建立防火墻會話表。
3)RootChannel管理器:根據RootChannel過濾器的輸出,建立FastInfo,并把對應的防火墻會話信息加載到FastInfo上;如果數據包需要應用層處理且無應用程序處理標記,將hash信息記錄在包上,包送AppChannel處理。
4)RootChannel前置處理器:根據防火墻的會話信息、用戶配置信息對數據包進行修改,并完成校驗和等操作;
5)RootChannel后置處理器:如果是VPN數據包,則先作加密處理;如果數據包需要分片,則進行分片處理,然后把處理好的數據包push到tx-RootChannel。
6)FastChannel管理器:如果FastInfo指示數據包需要應用層處理且無應用程序處理標記,將hash信息記錄在包上,包送AppChannel處理。
7)FastChannel前置處理器:根據FastInfo信息直接對數據包進行修改,并完成校驗和等操作。
8)應用程序處理器:從App Channel中poll到數據包后,根據用戶配置(包含在防火墻會話信息中)完成反病毒,反入侵,內容過濾等操作,如果檢測到數據包非法,則丟棄此數據包,釋放內存。這部分可以使用外部的應用程序加速卡來加快處理速度。在包中置應用程序處理標置,然后將包送到rx-RootChannel中去。

圖3 NetChannel plus流程圖
Slow forward層基本是linux netfilter實現,應用程序用第三方軟件或硬件實現,fast forward層的設計是系統性能的關鍵所在,由于以FastInfo作為處理包的基礎,fast forward可以設計成輕量級協議棧,通過構造類似于netfilter但又高度精簡的hook點,fast foward可以具有開放性的架構,方便集成第三方的軟件和硬件,由于fast forward的實現可以充分運用、借鑒linux協議棧已經提供的成熟的支持函數和包處理函數,fast forward的設計和調試將變的簡單,而NetChannel的應用層協議棧,無論在設計還是調試都將舉步維艱。
實現NetChannel plus依賴于下面的關鍵技術:
1)零拷貝:大部分網卡支持DMA方式將包傳輸到內存[3],而linux內存映射避免了用戶空間和內核空間的拷貝。
2)硬件中斷:NAPI技術解決高負載下多中斷的問題[3],上下文切換減少。
3)軟中斷:由于linux ksoft_irq具有較低的調度優先級[4],上下文切換減少。
4)鎖:AppChannel 使用ring buffer結構,無需鎖,而fast forward基本上是只讀訪問,RCU讀鎖極大地提高了性能。
5)高速緩存:大部分網卡將采用多隊列技術,屬于同一條流的包將進入同一個隊列,加上MSI-X以及中斷親和技術,同一條流的包將在同一個core上處理,cache將實現本地化。
上述關鍵技術表明,盡管NetChannel plus依然是兩個通信環,但是零拷貝,硬件中斷,軟中斷,鎖和高速緩存的問題并不是無法解決的。
將NetChannel plus將NetChannel架構的先進性和linux協議棧成熟性結合起來,充分利用UTM軟硬件設計中涌現出的先進技術,克服兩個通信環的缺陷,解決了NetChannel應用協議棧難以實現的問題,為UTM架構設計提供了一種可實現的方案。
[1]基于NetChannel技術的UTM架構設計 http://www.ecice06.com/qikan/manage/wenzhang/0811-53.pdf.
[2]Jacobson V.Speeding up Networking[Z].2006.
[3]Corbet J,Rubini A.Linux Device Driver[M].Nanjing:Dongnan University Press,2001.
[4]Daniel P.Unstanding linux kernel[M].Beijing:Power Press,2007.