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