樊永霞,陳小飛
FAN Yong-xia, CHEN Xiao-fei
(石家莊科技工程職業(yè)學院,石家莊 050800)
出于性能的考率,傳統(tǒng)的防火墻保護了鏈路層、網(wǎng)絡層,放棄了對應用層的保護。伴隨著網(wǎng)絡技術的發(fā)展,針對應用層的網(wǎng)絡攻擊不斷涌現(xiàn),為控制病毒,木馬等應用層的攻擊,在采購防火墻的同時不得不采購反病毒,反入侵,內(nèi)容過濾等設備,多種安全設備的共存必然導致網(wǎng)絡拓撲和網(wǎng)絡管理的復雜,不同廠家的設備缺乏協(xié)調配合,缺乏互操作性,往往導致無法形成合力有效的保護網(wǎng)絡和數(shù)據(jù)的安全,針對這一問題,IDC提出了UTM(統(tǒng)一威脅管理)的概念,不僅保護鏈路層網(wǎng)絡層,而且保護應用層,UTM將眾多網(wǎng)絡安全技術融合在一個設備上,簡化了網(wǎng)絡結構和網(wǎng)絡安全設備的管理
傳統(tǒng)的防火墻大多采用了asic+x86cpu的架構,asic集成了如會話,路由和策略路由,橋, 虛擬專用網(wǎng)等諸多功能,比起x86架構,小包可以輕松達到線速,然而在asic集成AV,IPS等復雜功能不僅十分困難而且風險難以控制,顯然以cpu處理CF,IPS,AV等復雜功能更加簡便。隨著intel多核處理器,pci-e總線的出現(xiàn),越來越多的UTM采用了多核x86cpu架構。
多核x86cpu架構具有可擴充、易更新、易移植等優(yōu)點,然而在多核下,資源的共享和互斥,資源的調度等問題變的更加復雜,UTM的多核x86硬件平臺需要更加優(yōu)秀的軟件系統(tǒng)軟件架構。
天才學者jacobson在2006 linux年會上提出了NetChannel架構,將性能低的矛頭直指linux內(nèi)核協(xié)議棧,在linux網(wǎng)絡社區(qū)引起強烈爭論。
NetChannel系統(tǒng)框架如圖1所示。
圖1 NetChannel系統(tǒng)架構
NetChannel系統(tǒng)主要包括RootChannel和SubChannel,RootChannel處理以太層/網(wǎng)絡層數(shù)據(jù),而SubChannel處理應用層數(shù)據(jù)[1]。應用程序預處理器和應用程序后處理器組成用戶空間協(xié)議棧。
相對于linux的兩個通信環(huán),NetChannel是點對點通信,應用數(shù)據(jù)經(jīng)過SubChannel直接到達應用程序而不經(jīng)過linux內(nèi)核協(xié)議棧,具有如下優(yōu)點:
1)由于不經(jīng)過linux內(nèi)核協(xié)議棧,也就完全避免了packet到skb的拷貝以及skb到應用層的拷貝,是最徹底的零拷貝技術。
2)由于不經(jīng)過linux內(nèi)核協(xié)議棧,就不會處理linux協(xié)議棧中大量共享數(shù)據(jù),從而減少了鎖,有利于cache的本地化。
3)當確定包是應用數(shù)據(jù)時,無需raise軟中斷,減少了系統(tǒng)軟中斷的個數(shù),減少了系統(tǒng)的上下文切換,有利于cache的本地化。
1)當今幾乎全部主流協(xié)議棧都是在內(nèi)核實現(xiàn)的,用戶空間協(xié)議棧難以可靠實現(xiàn)。
2)用戶空間協(xié)議棧和linux內(nèi)核協(xié)議棧共存,難以維護,在用戶空間和內(nèi)核需要維護相同功能的模塊,比如應用程序預處理器和RootChannel預處理器、應用程序后處理器和RootChannel后處理器。
盡管NetChannel具有很多優(yōu)點,然而linux內(nèi)核協(xié)議棧經(jīng)過多年的發(fā)展已經(jīng)非??煽亢屯陚洌瓦Bjacobson本人也承認,linux內(nèi)核協(xié)議棧是最快和最完備的協(xié)議棧[2],單獨開發(fā)用戶空間協(xié)議棧有較大風險,從而不會為UTM設計人員所接受?;谝陨峡紤],提出了一種改進的NetChannel架構NetChannel plus
系統(tǒng)框架如圖2所示。
圖2 NetChannel plus系統(tǒng)架構
NetChannel plus分為應用層,以太層/網(wǎng)絡層則包括slow forward層和fast forward層。
1)以太層/網(wǎng)絡層。如VPN/地址轉換/路由等處理,這部分由于要求快速響應、用戶透明的特點,可以在系統(tǒng)的內(nèi)核空間完成。其中Slow fowward主要用于建立fast forward層所需的信息FastInfo,并發(fā)送數(shù)據(jù),而fast forward層主要通過FastInfo信息直接修改包快速發(fā)送數(shù)據(jù),NetChannel plus在以太層/網(wǎng)絡層的數(shù)據(jù)處理具有較高的性能
2)應用層。對于應用層數(shù)據(jù),因為其要處理類似病毒檢測/攻擊檢測/反垃圾檢測等比較耗費資源且相對危險數(shù)據(jù),所以這部分操作在用戶空間完成;同時,考慮到不同用戶需求,可以提供開放應用層接口,使用部分硬件完成比如模式匹配等工作。與NetChannel不同,由于取消了應用層協(xié)議棧,當應用層處理完數(shù)據(jù)后,需要將包放入Rcv-RootChannel中,以便通過fast forward層完成以太層/網(wǎng)絡層的數(shù)據(jù)處理。
Netchannel plus以AppChannel取代了SubChannel,當slow forward層通過會話表發(fā)現(xiàn)應用數(shù)據(jù)或fast forward層通過FastInfo直接發(fā)現(xiàn)是應用數(shù)據(jù)時,以太層/網(wǎng)絡層會將數(shù)據(jù)包放入App Channel中并喚醒應用進程處理。
基于內(nèi)核的模塊完成數(shù)據(jù)包分類、訪問控制、VPN、地址轉換、建立/銷毀FastInfo、建立/銷毀防火墻會話表等操作。系統(tǒng)初始華是為每個網(wǎng)卡驅動程序注冊Tx-RootChannel和Rcv-RootChannel,并且注冊App Channel
各個模塊功能如下:
1)RootChannel預處理器:從RootChannel中得到數(shù)據(jù),然后進行以下處理:若此數(shù)據(jù)包是一個加密數(shù)據(jù)包,則進行解密;若是分片數(shù)據(jù)包,則進行分片重組;如果包上有應用程序以處理標記,則從包中取出hash信息,否則根據(jù)數(shù)據(jù)包的五元組信息(源IP地址、目標地址、協(xié)議、源端口、目標端口)計算hash值,在FastInfo中hash查找,若找到對應的條目,則把數(shù)據(jù)包交給防火墻FastForard管理器進行處理。否則數(shù)據(jù)包進入RootChannel過濾器。
2)RootChannel過濾器:根據(jù)用戶的規(guī)則配置進行數(shù)據(jù)包的規(guī)則驗證,對于非法數(shù)據(jù)包,將被丟棄。合法數(shù)據(jù)包將根據(jù)用戶配置完成地址轉化、路由查找等操作,建立防火墻會話表。
3)RootChannel管理器:根據(jù)RootChannel過濾器的輸出,建立FastInfo,并把對應的防火墻會話信息加載到FastInfo上;如果數(shù)據(jù)包需要應用層處理且無應用程序處理標記,將hash信息記錄在包上,包送AppChannel處理。
4)RootChannel前置處理器:根據(jù)防火墻的會話信息、用戶配置信息對數(shù)據(jù)包進行修改,并完成校驗和等操作;
5)RootChannel后置處理器:如果是VPN數(shù)據(jù)包,則先作加密處理;如果數(shù)據(jù)包需要分片,則進行分片處理,然后把處理好的數(shù)據(jù)包push到tx-RootChannel。
6)FastChannel管理器:如果FastInfo指示數(shù)據(jù)包需要應用層處理且無應用程序處理標記,將hash信息記錄在包上,包送AppChannel處理。
7)FastChannel前置處理器:根據(jù)FastInfo信息直接對數(shù)據(jù)包進行修改,并完成校驗和等操作。
8)應用程序處理器:從App Channel中poll到數(shù)據(jù)包后,根據(jù)用戶配置(包含在防火墻會話信息中)完成反病毒,反入侵,內(nèi)容過濾等操作,如果檢測到數(shù)據(jù)包非法,則丟棄此數(shù)據(jù)包,釋放內(nèi)存。這部分可以使用外部的應用程序加速卡來加快處理速度。在包中置應用程序處理標置,然后將包送到rx-RootChannel中去。
圖3 NetChannel plus流程圖
Slow forward層基本是linux netfilter實現(xiàn),應用程序用第三方軟件或硬件實現(xiàn),fast forward層的設計是系統(tǒng)性能的關鍵所在,由于以FastInfo作為處理包的基礎,fast forward可以設計成輕量級協(xié)議棧,通過構造類似于netfilter但又高度精簡的hook點,fast foward可以具有開放性的架構,方便集成第三方的軟件和硬件,由于fast forward的實現(xiàn)可以充分運用、借鑒linux協(xié)議棧已經(jīng)提供的成熟的支持函數(shù)和包處理函數(shù),fast forward的設計和調試將變的簡單,而NetChannel的應用層協(xié)議棧,無論在設計還是調試都將舉步維艱。
實現(xiàn)NetChannel plus依賴于下面的關鍵技術:
1)零拷貝:大部分網(wǎng)卡支持DMA方式將包傳輸?shù)絻?nèi)存[3],而linux內(nèi)存映射避免了用戶空間和內(nèi)核空間的拷貝。
2)硬件中斷:NAPI技術解決高負載下多中斷的問題[3],上下文切換減少。
3)軟中斷:由于linux ksoft_irq具有較低的調度優(yōu)先級[4],上下文切換減少。
4)鎖:AppChannel 使用ring buffer結構,無需鎖,而fast forward基本上是只讀訪問,RCU讀鎖極大地提高了性能。
5)高速緩存:大部分網(wǎng)卡將采用多隊列技術,屬于同一條流的包將進入同一個隊列,加上MSI-X以及中斷親和技術,同一條流的包將在同一個core上處理,cache將實現(xiàn)本地化。
上述關鍵技術表明,盡管NetChannel plus依然是兩個通信環(huán),但是零拷貝,硬件中斷,軟中斷,鎖和高速緩存的問題并不是無法解決的。
將NetChannel plus將NetChannel架構的先進性和linux協(xié)議棧成熟性結合起來,充分利用UTM軟硬件設計中涌現(xiàn)出的先進技術,克服兩個通信環(huán)的缺陷,解決了NetChannel應用協(xié)議棧難以實現(xiàn)的問題,為UTM架構設計提供了一種可實現(xiàn)的方案。
[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.