劉 斌,黃 勇
(安徽科技學(xué)院理學(xué)院,安徽鳳陽(yáng)233100)
防火墻過(guò)濾網(wǎng)絡(luò)數(shù)據(jù)包,確保只有安全策略允許的網(wǎng)絡(luò)數(shù)據(jù)流進(jìn)入內(nèi)部網(wǎng)絡(luò),從而保護(hù)內(nèi)部網(wǎng)不受來(lái)自外部網(wǎng)的攻擊[1],所以防火墻的安全可靠是保證內(nèi)部網(wǎng)絡(luò)安全的第一道安全屏障.傳統(tǒng)的單接入點(diǎn)防火墻因?yàn)閿?shù)據(jù)包處理速度跟不上帶寬的增長(zhǎng)要求,已經(jīng)成為網(wǎng)絡(luò)發(fā)展的瓶頸,為了防止其影響網(wǎng)絡(luò)的性能,網(wǎng)絡(luò)管理員通常只進(jìn)行基本的過(guò)濾規(guī)則配置,遠(yuǎn)沒(méi)有達(dá)到必要的網(wǎng)絡(luò)安全級(jí)別要求.具有高性能數(shù)據(jù)包處理能力的、采用專用集成電路或網(wǎng)絡(luò)處理器實(shí)現(xiàn)的先進(jìn)防火墻設(shè)備,其昂貴的價(jià)格很難被一般企事業(yè)單位接受.搭建防火墻集群可以顯著提高網(wǎng)絡(luò)數(shù)據(jù)處理能力,不僅能有效的解決防火墻瓶頸問(wèn)題,而且能降低運(yùn)行成本,提高檢測(cè)效率,并且具有良好的擴(kuò)展性.
集群是指一組相互獨(dú)立的服務(wù)器在網(wǎng)絡(luò)中表現(xiàn)為單一的系統(tǒng),并以單一系統(tǒng)的模式加以管理.集群系統(tǒng)一般分為高性能計(jì)算集群和高可用集群.高性能計(jì)算集群主要用于科學(xué)計(jì)算,它利用并行計(jì)算將一個(gè)規(guī)模較大的問(wèn)題的數(shù)據(jù)分布到集群的各個(gè)組成計(jì)算機(jī)上處理,從而提供單個(gè)計(jì)算機(jī)不能提供的強(qiáng)大處理能力要求.高可用集群則利用容錯(cuò)技術(shù)和負(fù)載均衡技術(shù)對(duì)外界提供統(tǒng)一的、高效的、不間斷的服務(wù)[2,3].
利用集群技術(shù),可以用多臺(tái)防火墻Agent組成網(wǎng)絡(luò)防火墻集群系統(tǒng).先由主Agent捕獲的千兆帶寬網(wǎng)段內(nèi)的數(shù)據(jù)包,使用負(fù)載均衡技術(shù),將網(wǎng)絡(luò)數(shù)據(jù)包轉(zhuǎn)發(fā)到后臺(tái)的多個(gè)防火墻Agent上,由其根據(jù)過(guò)濾規(guī)則對(duì)數(shù)據(jù)包進(jìn)行相應(yīng)的檢查和轉(zhuǎn)發(fā)處理.這樣就可以通過(guò)多個(gè)百兆等級(jí)的防火墻Agent構(gòu)成了一個(gè)滿足千兆網(wǎng)絡(luò)環(huán)境的防火墻集群系統(tǒng).
防火墻集群主要由各個(gè)防火墻Agent子系統(tǒng)、管理控制子系統(tǒng)、數(shù)據(jù)庫(kù)子系統(tǒng)組成.運(yùn)行時(shí)安裝在內(nèi)外網(wǎng)絡(luò)之間,對(duì)內(nèi)外網(wǎng)之間的數(shù)據(jù)流進(jìn)行安全檢測(cè)和過(guò)濾.Agent子系統(tǒng)通過(guò)負(fù)載均衡機(jī)制共同完成數(shù)據(jù)包的安全檢測(cè)功能.數(shù)據(jù)庫(kù)子系統(tǒng)用于存儲(chǔ)防火墻的基本配置參數(shù)、安全規(guī)則列表和檢測(cè)結(jié)果日志信息.管理控制機(jī)通過(guò)瀏覽器頁(yè)面方式來(lái)集中管理和監(jiān)控整個(gè)系統(tǒng)的運(yùn)行情況.各個(gè)Agent子系統(tǒng)啟動(dòng)時(shí),自動(dòng)向管理控制子系統(tǒng)發(fā)送配置請(qǐng)求信息,管理控制子系統(tǒng)讀取數(shù)據(jù)庫(kù)中的配置信息和安全規(guī)則列表,并通過(guò)系統(tǒng)配置命令調(diào)用方式,配置Agent,之后管理控制子系統(tǒng)接收各個(gè)Agent心跳系統(tǒng)周期性發(fā)過(guò)來(lái)的系統(tǒng)工作情況匯報(bào)信息,對(duì)整個(gè)系統(tǒng)運(yùn)行情況進(jìn)行實(shí)施檢測(cè).當(dāng)某個(gè)Agent故障時(shí)就強(qiáng)制該Agent重新啟動(dòng)運(yùn)行,同時(shí)記錄運(yùn)行情況日志.
Agent子系統(tǒng)的體系結(jié)構(gòu)采用模塊化設(shè)計(jì)思想.整個(gè)體系由數(shù)據(jù)包安全檢查模塊、網(wǎng)絡(luò)地址轉(zhuǎn)換模塊、安全日志處理模塊、數(shù)據(jù)包處理模塊、負(fù)載平衡模塊、心跳與管理控制模塊、認(rèn)證模塊等7個(gè)主要功能模塊組成,各模塊之間通過(guò)函數(shù)調(diào)用和參數(shù)傳遞來(lái)完成通信.
Agent工作的實(shí)時(shí)性和高效性將直接影響網(wǎng)絡(luò)的速度和安全.借鑒Linux操作系統(tǒng)的開源性、內(nèi)核的穩(wěn)定性和可裁減編譯等特點(diǎn),特別是Linux2.4以上內(nèi)核利用Netfilter、Iptables、Ipconntrack幾個(gè)內(nèi)核組件提供了對(duì)狀態(tài)檢測(cè)包過(guò)濾的支持.為了提高系統(tǒng)的整體響應(yīng)速度,提高CPU等系統(tǒng)資源的使用效率,減少進(jìn)程之間的切換時(shí)間,使得內(nèi)核代碼結(jié)構(gòu)更為緊湊,對(duì)Agent內(nèi)核我們采用了具有良好結(jié)構(gòu)的Linux單內(nèi)核體系結(jié)構(gòu)實(shí)現(xiàn).但是由于Linux內(nèi)核集成了功能豐富的設(shè)備驅(qū)動(dòng)程序、文件系統(tǒng)程序、網(wǎng)絡(luò)服務(wù)程序等,源代碼內(nèi)容龐大,需要對(duì)其進(jìn)行定制、裁減和編譯,構(gòu)建專用的Agent操作系統(tǒng).
內(nèi)核定制分為內(nèi)核下載、內(nèi)核裁減和重新編譯幾個(gè)步驟.功能完善的Linux最新內(nèi)核可以從官方網(wǎng)站(http://www.kernel.org)上免費(fèi)下載得到.Linux內(nèi)核裁減手段有許多種方法,可以使用免費(fèi)的Linux工具箱軟件包busybox進(jìn)行,也可以使用linux自帶的基于文本和基于圖形窗口的內(nèi)核配置工具.完成裁減后就可以通過(guò)#makebzimage命令編譯生成新的內(nèi)核映像文件.具體裁減編譯過(guò)程可以參考資料[4].
Linux2.4以上內(nèi)核集成的 Netfilter實(shí)現(xiàn)了一個(gè)將數(shù)據(jù)包處理流水線化的通用安全框架.它嵌入內(nèi)核到IP協(xié)議堆棧中,為特定網(wǎng)絡(luò)協(xié)議定義了一套鉤子函數(shù).在數(shù)據(jù)包流過(guò)協(xié)議棧的幾個(gè)關(guān)鍵點(diǎn)時(shí),將數(shù)據(jù)包和鉤子函數(shù)標(biāo)號(hào)當(dāng)作參數(shù),調(diào)用Netfilter框架.Netfilter防火墻框架如圖1所示[5].
Netfilter框架定義了5個(gè)數(shù)據(jù)包在防火墻上的處理點(diǎn) (如圖所示),分別表示在進(jìn)行路由選擇之前的數(shù)據(jù)包、提交本地進(jìn)程處理的數(shù)據(jù)包、需要轉(zhuǎn)發(fā)的數(shù)據(jù)包、即將離開防火墻的數(shù)據(jù)包和本地產(chǎn)生的數(shù)據(jù)包的檢測(cè)處理點(diǎn).
Netfilter向內(nèi)核提供的防火墻接口是一個(gè)firewall_ops結(jié)構(gòu)體.該結(jié)構(gòu)體中定義了三個(gè)調(diào)用具體規(guī)則函數(shù)的函數(shù)指針,fw_forward、fw_input、fw_output.對(duì)數(shù)據(jù)包的處理實(shí)質(zhì)上就是調(diào)用這三個(gè)函數(shù).
實(shí)現(xiàn)狀態(tài)檢測(cè)技術(shù)的核心思想是在內(nèi)核協(xié)議棧的FORWARD檢測(cè)點(diǎn)對(duì)數(shù)據(jù)包進(jìn)行檢測(cè)之前,添加一個(gè)狀態(tài)檢測(cè)模塊,查看狀態(tài)檢測(cè)表中是否有數(shù)據(jù)包的軌跡,即判斷當(dāng)前IP包是否和之前已經(jīng)檢查過(guò)的某個(gè)數(shù)據(jù)包屬于同一個(gè)上層會(huì)話,如是則直接按原來(lái)相同的方式處理,否則進(jìn)行規(guī)則檢查,并為該數(shù)據(jù)包的連接會(huì)話在狀態(tài)檢測(cè)表中定義一個(gè)初始化軌跡項(xiàng).其流程圖如圖2示:
圖1 Netfilter防火墻框架
圖2 網(wǎng)絡(luò)數(shù)據(jù)包狀態(tài)檢測(cè)流程
為了實(shí)現(xiàn)負(fù)載均衡,集群系統(tǒng)首先需要?jiǎng)討B(tài)采集A-gent的運(yùn)行狀況信息.Linux的Proc通過(guò)文件系統(tǒng)的形式為操作系統(tǒng)和應(yīng)用進(jìn)程之間的通信提供了一個(gè)界面,可以用于輸出系統(tǒng)的運(yùn)行狀態(tài).例如:/proc/uptime文件給出了CPU的使用情況;/proc/meminfo文件給出了內(nèi)存、交換區(qū)、使用權(quán)、空閑區(qū)、緩沖區(qū)等的大小;/proc/net/snmp文件給出了各種網(wǎng)絡(luò)協(xié)議的統(tǒng)計(jì)信息;/proc/loadavg文件給出了系統(tǒng)的平均負(fù)載.通過(guò)這些信息我們可以計(jì)算出 Agent的 CUP使用率 (CPU%)、內(nèi)存使用率(Mem%)、交換區(qū)的頁(yè)交換次數(shù) (CT)、平均負(fù)載(BL)、IP連接數(shù) (Cn)等.負(fù)載均衡模塊需要綜合考慮這些因素,并進(jìn)行計(jì)算處理.為了消除單一因素對(duì)結(jié)果的顯著影響,綜合反映Agent的負(fù)載實(shí)際情況,我們對(duì)上述參數(shù)進(jìn)行了加權(quán)均方根處理,權(quán)值函數(shù)AgentLoad計(jì)算公式如下所示:
其中各ai為調(diào)整系數(shù),且∑ai=1(i=1,2,3,4,5),可以根據(jù)實(shí)際應(yīng)用加以調(diào)整.
通過(guò)計(jì)算將當(dāng)前負(fù)載較大的Agent的任務(wù)遷移到當(dāng)前負(fù)載較少的Agent結(jié)點(diǎn)上完成,在遷移時(shí),要將屬于同一連接會(huì)話的所有IP包定向到算法指定的檢測(cè)Agent上進(jìn)行IP分片重組和檢測(cè)處理.
在集群系統(tǒng)中各個(gè)Agent節(jié)點(diǎn)周期性的向其他節(jié)點(diǎn)廣播心跳消息.如果節(jié)點(diǎn)A收到來(lái)自節(jié)點(diǎn)B的心跳消息,則說(shuō)明B節(jié)點(diǎn)正常工作,并向B節(jié)點(diǎn)反饋接收確認(rèn).若在指定的時(shí)間內(nèi)沒(méi)有收到結(jié)點(diǎn)B的心跳消息,則A向其他節(jié)點(diǎn)征詢B節(jié)點(diǎn)是否故障消息,以便獲得更多的消息,進(jìn)一步確認(rèn)B的狀態(tài).只有當(dāng)半數(shù)以上的節(jié)點(diǎn)沒(méi)有按時(shí)收到B的心跳消息,才確認(rèn)B的故障,控制系統(tǒng)將回收分配給B的資源,并將工作負(fù)載提交給其他運(yùn)行正常的節(jié)點(diǎn)完成.
各Agent的心跳檢測(cè)是通過(guò)檢測(cè)/Proc文件系統(tǒng)實(shí)現(xiàn)的.在/proc中每一個(gè)運(yùn)行中的進(jìn)程 (其中包括防火墻進(jìn)程)都有一個(gè)用它的PID命名的目錄,這些目錄中包含了提供有關(guān)進(jìn)程的狀態(tài)和環(huán)境的細(xì)節(jié)信息的文件.
因?yàn)樾奶⒁柚W(wǎng)絡(luò)通信進(jìn)行發(fā)送,數(shù)據(jù)包的丟失和延遲就可能導(dǎo)致心跳檢測(cè)的不準(zhǔn)確,因此必須確定合理的心跳傳輸?shù)臅r(shí)間周期.對(duì)數(shù)據(jù)包丟失的度量我們采用丟包率進(jìn)行統(tǒng)計(jì),即Plost=(S-R)/S,其中S為系統(tǒng)運(yùn)行后統(tǒng)計(jì)發(fā)送的心跳信息包數(shù)量,R為實(shí)際接收的確認(rèn)包數(shù)量.數(shù)據(jù)包的傳輸延遲通常是由于網(wǎng)絡(luò)擁塞造成的,傳輸時(shí)間是不確定性的隨機(jī)概率事件的變量,一般滿足契比雪夫不等式 (如下所示).
其中E(t)表示期望傳輸時(shí)間的均值,D(t)表示t的方差.
對(duì)E(t)的計(jì)算和使用我們采用了估算修正方法實(shí)現(xiàn),即E(t)實(shí)際操作采用如下公式代入計(jì)算
其中S(t)表示以往傳輸中的實(shí)際傳輸時(shí)間采樣值,a為修正因子,經(jīng)過(guò)反復(fù)測(cè)量,最終修正因子我們確定為0.87.
最后根據(jù)傳輸延時(shí)概率和數(shù)據(jù)包丟包率可以計(jì)算出,當(dāng)正確檢測(cè)的可信度范圍為PA時(shí)的最小傳輸時(shí)間間隔為:
將高可用、高性能的集群技術(shù)和網(wǎng)絡(luò)防火墻技術(shù)有機(jī)結(jié)合設(shè)計(jì)實(shí)現(xiàn)防火墻集群,能有效地解決網(wǎng)絡(luò)帶寬的瓶頸和傳統(tǒng)防火墻檢測(cè)效率低下的問(wèn)題.本文在簡(jiǎn)要介紹了集群與防火墻集群技術(shù)的基礎(chǔ)上,重點(diǎn)闡述了采用狀態(tài)檢測(cè)技術(shù)的Linux防火墻集群系統(tǒng)的總體規(guī)劃和關(guān)鍵技術(shù)環(huán)節(jié)的設(shè)計(jì)思想.該防火墻通過(guò)跟蹤IP數(shù)據(jù)流狀態(tài)軌跡,顯著地提高了數(shù)據(jù)包的檢測(cè)效率,利用負(fù)載均衡技術(shù)和心跳檢測(cè)進(jìn)一步保障了防火墻Agent的有效性和高效性.該防火墻集群在實(shí)驗(yàn)測(cè)試中運(yùn)行良好、性能穩(wěn)定.
[1]鄧書晶.防火墻及其集群相關(guān)技術(shù)淺析[J].計(jì)算機(jī)安全,2006,(11):58-60
[2]崔小燕.Linux集群系統(tǒng)分析[J].西安郵電學(xué)院學(xué)報(bào),2006,11(05):103-106
[3]屈鋼,鄧健青,韓云路.Linux集群技術(shù)研究[J].計(jì)算機(jī)應(yīng)用研究,2005,(05):100-101
[4]胡慶烈.Linux內(nèi)核的配置與編譯[J].電腦知識(shí)與技術(shù),2009,(03):730-731
[5]楊彬,李雪瑩,陳宇,等.利用LINUX集群實(shí)現(xiàn)高速網(wǎng)入侵檢測(cè)[J].計(jì)算機(jī)工程與應(yīng)用,2003,(23):151-153
[6]李清玉,韋衛(wèi),侯紫峰.防火墻集群負(fù)載均衡算法設(shè)計(jì)與實(shí)現(xiàn)[J].計(jì)算機(jī)工程,2005,(01):141-143
[7]M OURANIG.Get Acquainted with Linux Security and Optinization System[M].New York:Harper and Row,2000:103-104
[8]M oon J,Park J,Jung G.Accelerating firewall through intelligent self-learning[J].IEEE Proc M an Cybern,2003(04):3524-3529