賈坤鵬,王曉鋒,劉淵
(1.江南大學(xué)物聯(lián)網(wǎng)工程學(xué)院,無錫214122;2.江南大學(xué)數(shù)字媒體學(xué)院,無錫214122)
近年來,隨著互聯(lián)網(wǎng)的蓬勃發(fā)展,“互聯(lián)網(wǎng)+”已經(jīng)延伸到生產(chǎn)生活的各個(gè)方面,但與此同時(shí)網(wǎng)絡(luò)與信息安全面臨嚴(yán)峻的挑戰(zhàn)[1]。網(wǎng)絡(luò)空間是一個(gè)多維、跨域、大尺度的空間,體系復(fù)雜多樣。為了應(yīng)對(duì)日益嚴(yán)苛的網(wǎng)絡(luò)安全挑戰(zhàn),有必要進(jìn)行專業(yè)的網(wǎng)絡(luò)安全人才的培養(yǎng)。然而,由于在真實(shí)的網(wǎng)絡(luò)環(huán)境中進(jìn)行網(wǎng)絡(luò)安全試驗(yàn)成本高,且可能會(huì)造成嚴(yán)重的后果,甚至導(dǎo)致網(wǎng)絡(luò)癱瘓[1]。因此,網(wǎng)絡(luò)安全試驗(yàn)大多在放在獨(dú)立的網(wǎng)絡(luò)環(huán)境中,進(jìn)行攻防演練,新技術(shù)的驗(yàn)證[2]。
由于OpenStack[3]平臺(tái)的開源性,大量的開發(fā)者涌入到社區(qū)開發(fā)中來,推動(dòng)了OpenStack技術(shù)的發(fā)展。OpenStack采用模塊化設(shè)計(jì),各模塊之間通過Rabbit-MQ消息隊(duì)列進(jìn)行交互,降低了系統(tǒng)耦合性,提高了系統(tǒng)的響應(yīng)速度和穩(wěn)定性。OpenStack通過不同模塊間的協(xié)同合作,根據(jù)用戶需求實(shí)現(xiàn)對(duì)基礎(chǔ)設(shè)施資源即計(jì)算、存儲(chǔ)、網(wǎng)絡(luò)資源的彈性分配。OpenStack支持KVM、Docker、Xen、LXC 等多種虛擬化方式,被廣泛運(yùn)用于云平臺(tái)的構(gòu)建[4,7,12]。
但是,由于試驗(yàn)環(huán)境創(chuàng)建、配置的復(fù)雜性,試驗(yàn)人員浪費(fèi)了大量時(shí)間。試驗(yàn)拓?fù)湟?guī)模有限,試驗(yàn)效果不是很直觀且不支持實(shí)時(shí)查看[4,7]。如何快速、有效、方便地進(jìn)行網(wǎng)絡(luò)安全試驗(yàn)成為當(dāng)前研究的熱點(diǎn)話題。我們基于OpenStack云平臺(tái),調(diào)用jTopo開源網(wǎng)絡(luò)拓?fù)渚庉嬈?,通過圖元拖拽生成試驗(yàn)場(chǎng)景。試驗(yàn)人員可基于該場(chǎng)景進(jìn)行快速部署,部署完成以后可在該場(chǎng)景中進(jìn)行各類典型網(wǎng)絡(luò)安全試驗(yàn)驗(yàn)證,并通過Zabbix實(shí)現(xiàn)了虛擬機(jī)狀態(tài)的分布式監(jiān)控。重點(diǎn)研究了試驗(yàn)場(chǎng)景可視化展示與操作、自動(dòng)部署與釋放、分布式虛擬機(jī)狀態(tài)監(jiān)控等問題。
目前,基于云平臺(tái)的網(wǎng)絡(luò)安全試驗(yàn)平臺(tái)引起了廣泛的關(guān)注,相關(guān)開發(fā)者給出了不同的解決方案。文獻(xiàn)[4]基于云平臺(tái)和虛擬化技術(shù),搭建了OpenStack平臺(tái),并在平臺(tái)上基于Glance組件創(chuàng)建了多個(gè)攻防試驗(yàn)主機(jī)模板,基于該模板實(shí)現(xiàn)了不同功能主機(jī)的快速創(chuàng)建。主機(jī)創(chuàng)建好以后,可進(jìn)行DoS攻擊、端口掃描測(cè)試、遠(yuǎn)程控制攻擊等常見網(wǎng)絡(luò)安全試驗(yàn)。然而,試驗(yàn)過程中虛擬機(jī)狀態(tài)無法進(jìn)行實(shí)時(shí)監(jiān)控,試驗(yàn)場(chǎng)景也過于單薄。
文獻(xiàn)[7]采用B/S架構(gòu),在平臺(tái)上集成了VMware虛擬機(jī)技術(shù),通過定制和分發(fā)試驗(yàn)?zāi)0宓姆绞?,完成攻防試?yàn)的自動(dòng)配置和快速恢復(fù)。實(shí)現(xiàn)了用戶的管理,不同角色用戶具有對(duì)應(yīng)的權(quán)限。教師可以對(duì)學(xué)生的試驗(yàn)結(jié)果進(jìn)行評(píng)分。但是,VMware對(duì)虛擬網(wǎng)絡(luò)的支持并不好,只支持VLAN方式組網(wǎng),拓?fù)湟?guī)模受限,不能進(jìn)行大規(guī)模的網(wǎng)絡(luò)仿真試驗(yàn),并不能達(dá)到理想效果。
文獻(xiàn)[8]基于OpenStack平臺(tái),設(shè)計(jì)并實(shí)現(xiàn)了云平臺(tái)資源監(jiān)控系統(tǒng),并通過Libvirt中間層提供的API對(duì)平臺(tái)上虛擬機(jī)的關(guān)鍵資源數(shù)據(jù)進(jìn)行采集存儲(chǔ),并進(jìn)行可視化展示。然而由于其可視化展示曲線不能實(shí)時(shí)查看,用戶無法實(shí)時(shí)關(guān)注當(dāng)前虛擬機(jī)的狀態(tài),且不支持分布式部署,不能自動(dòng)發(fā)現(xiàn)服務(wù)器上的虛擬機(jī)。
文獻(xiàn)[12]收集了目前主流脆弱操作系統(tǒng),建立了兩種鏡像庫,設(shè)計(jì)了符合真實(shí)場(chǎng)景的網(wǎng)絡(luò)架構(gòu),進(jìn)行網(wǎng)絡(luò)攻防。并基于OpenStack的Dashboard實(shí)現(xiàn)鏡像的管理,虛擬機(jī)的創(chuàng)建等功能。利用經(jīng)典的LAMP架構(gòu),提供相關(guān)信息滲透工具的下載。并且建立了知識(shí)體系庫,方便用戶對(duì)相關(guān)知識(shí)進(jìn)行了解。然而,繁雜的試驗(yàn)場(chǎng)景,復(fù)雜的操作步驟,可能讓用戶也無從下手,無法獨(dú)立進(jìn)行試驗(yàn)從而進(jìn)行網(wǎng)絡(luò)安全知識(shí)的學(xué)習(xí)。
針對(duì)上述問題,本文基于OpenStack云平臺(tái),采用前后端分離的設(shè)計(jì)方法,前端融合jTopo、Bootstrap-table、jQquery等框架,實(shí)現(xiàn)了拓?fù)涞纳膳c管理功能。后端接口采用RESTFUL風(fēng)格的API,分別實(shí)現(xiàn)了場(chǎng)景部署、釋放、刪除等功能。并基于Zabbix實(shí)現(xiàn)了分布式虛擬機(jī)狀態(tài)監(jiān)控,有效解決了試驗(yàn)場(chǎng)景創(chuàng)建以及虛擬機(jī)狀態(tài)實(shí)時(shí)監(jiān)控等問題。
如圖1所示,基于云平臺(tái)的網(wǎng)絡(luò)安全試驗(yàn)管理系統(tǒng),搭建了一臺(tái)控制節(jié)點(diǎn)、一臺(tái)網(wǎng)絡(luò)節(jié)點(diǎn)以及三臺(tái)計(jì)算節(jié)點(diǎn)的Mitaka版本的OpenStack云平臺(tái),每臺(tái)節(jié)點(diǎn)均安裝了NTP服務(wù)進(jìn)行時(shí)鐘同步。實(shí)現(xiàn)了試驗(yàn)場(chǎng)景可視化展示與操作,試驗(yàn)場(chǎng)景自動(dòng)部署與釋放以及分布式虛擬機(jī)狀態(tài)監(jiān)控等關(guān)鍵技術(shù)。
圖1 系統(tǒng)體系架構(gòu)
其中,控制節(jié)點(diǎn)的jTopo組件負(fù)責(zé)試驗(yàn)場(chǎng)景的拖拽生成,Bootstrap-table表格組件用于試驗(yàn)場(chǎng)景的渲染以及管理,Zabbix-server組件用來收集網(wǎng)絡(luò)節(jié)點(diǎn)中的Zabbix-proxy發(fā)來的各計(jì)算節(jié)點(diǎn)中Zabbix-agent監(jiān)控的虛擬機(jī)的狀態(tài)信息。各計(jì)算節(jié)點(diǎn)中的Zabbix-agent通過調(diào)用KVM提供的Libvirt虛擬機(jī)管理工具,獲取虛擬機(jī)的CPU、內(nèi)存、網(wǎng)卡信息,并調(diào)用Zabbix-web組件進(jìn)行前端展示。
用戶可通過拖拽生成場(chǎng)景文件或自行上傳場(chǎng)景文件,可在前端選擇所需場(chǎng)景文件進(jìn)行試驗(yàn)環(huán)境的自動(dòng)部署與釋放。本文通過在KVM虛擬機(jī)中搭載Quagga路由軟件,實(shí)現(xiàn)了動(dòng)態(tài)路由的配置[14],依托內(nèi)核命令實(shí)現(xiàn)了鏈路帶寬、時(shí)延的設(shè)置[15],從而提高了試驗(yàn)場(chǎng)景的逼真性。此外,通過修改內(nèi)核參數(shù),提高了虛擬機(jī)創(chuàng)建速度,縮短了試驗(yàn)場(chǎng)景的創(chuàng)建時(shí)間。試驗(yàn)場(chǎng)景部署好以后,用戶可進(jìn)行各類網(wǎng)絡(luò)安全試驗(yàn),試驗(yàn)過程中各虛擬機(jī)的狀態(tài)信息可實(shí)時(shí)監(jiān)控,并支持虛擬機(jī)的自動(dòng)發(fā)現(xiàn)功能。
2.2.1 試驗(yàn)場(chǎng)景可視化展示與操作
本文通過jTopo開源網(wǎng)絡(luò)拓?fù)渚庉嬈魅诤蟡Query前端框架,實(shí)現(xiàn)了試驗(yàn)拓?fù)淇梢暬?。通過Boot-strap-table表格插件異步調(diào)用存儲(chǔ)在MySQL數(shù)據(jù)庫中的試驗(yàn)場(chǎng)景信息,并對(duì)其中的關(guān)鍵信息進(jìn)行可視化展示。采用前后端分離的設(shè)計(jì)模式,用戶在前臺(tái)的各種操作通過AJAX調(diào)用后端的REST API接口,進(jìn)行數(shù)據(jù)交互。下對(duì)其做簡要描述。
(1)試驗(yàn)拓?fù)淇梢暬桑簀Topo網(wǎng)絡(luò)拓?fù)渚庉嬈骰?HTML5,提供了 Stage、Scene、Node、Container,相對(duì)于當(dāng)下其他圖形開發(fā)軟件具備兼容性高、接口設(shè)計(jì)簡單、傳輸效率高等特點(diǎn)[5]。然而其Node屬性只有text、visible、dragable 等信息,并沒有 image、flavor、port等網(wǎng)絡(luò)信息,需要對(duì)其默認(rèn)屬性進(jìn)行添加。jQuery是一款優(yōu)秀的JavaScript框架,操作輕巧便捷,功能強(qiáng)大。
本文使用jQuery調(diào)用HTML5原生的drag、drop方法實(shí)現(xiàn)圖元的拖動(dòng)。通過jTopo Stage的frames屬性,定義了畫布的重畫頻率為1000/frams,所以我們拖動(dòng)圖元到畫布以后會(huì)通過ondragstart()方法傳遞底圖以及必要參數(shù)到Canvas并刷新界面,更新圖元信息從而實(shí)現(xiàn)拖拽效果。
圖2 試驗(yàn)拓?fù)淇梢暬?/p>
如圖2所示,jQuery通過監(jiān)聽鼠標(biāo)移動(dòng)事件,將節(jié)點(diǎn)拖拽到Canvas畫布,Canvas獲取節(jié)點(diǎn)信息,調(diào)用JTopo.Node()方法初始化節(jié)點(diǎn),并通過serializedProperties()方法設(shè)置自定義屬性。節(jié)點(diǎn)之間通過連線表示連接關(guān)系,鼠標(biāo)單擊節(jié)點(diǎn)設(shè)置節(jié)點(diǎn)信息,即部署該節(jié)點(diǎn)使用鏡像的image值、節(jié)點(diǎn)規(guī)格大小flavor值、該節(jié)點(diǎn)的網(wǎng)卡信息等。用戶可基于拖拽生成的場(chǎng)景進(jìn)行導(dǎo)出,導(dǎo)出文件包含上述關(guān)鍵信息,可基于該文件進(jìn)行部署。
(2)試驗(yàn)場(chǎng)景可視化管理:Bootstrap-table是一款基于Bootstrap的jQuery插件,具備扁平化、輕量級(jí)的特點(diǎn),因其與Bootstrap其它標(biāo)簽無縫結(jié)合,被專門用來顯示數(shù)據(jù)表格。使用該插件應(yīng)首先在網(wǎng)頁中需引入JavaScript腳本以及CSS樣式文件,然后在HTML中聲明表格對(duì)象,最終通過JavaScript腳本完成表格數(shù)據(jù)初始化,用戶也可根據(jù)個(gè)人需求通過bootstrapTable方法實(shí)現(xiàn)分頁、排序、導(dǎo)出、查找等功能。
然而由于靜態(tài)腳本的局限性,用戶對(duì)表格數(shù)據(jù)的修改無法及時(shí)反饋到數(shù)據(jù)庫中,這就嚴(yán)重影響了時(shí)效性與直觀性。
圖3 Bootstrap-table數(shù)據(jù)交互
如圖3所示,本系統(tǒng)通過PHP腳本實(shí)時(shí)查詢數(shù)據(jù)庫中的試驗(yàn)信息表中的關(guān)鍵信息,并封裝成JSON格式反饋到Bootstrap-table框架,最終渲染前端用戶界面,實(shí)現(xiàn)表格的異步更新。
表1為試驗(yàn)信息表,用戶testuser需設(shè)置試驗(yàn)編號(hào)id、試驗(yàn)名稱testname信息,并通過testinfo字段描述試驗(yàn),可添加試驗(yàn)的注意事項(xiàng)、操作方法、預(yù)期結(jié)果等信息。testfile字段存儲(chǔ)試驗(yàn)場(chǎng)景文件名,真實(shí)文件存儲(chǔ)在topology目錄下。
用戶基于試驗(yàn)場(chǎng)景的各種操作需要傳遞場(chǎng)景文件名稱到后臺(tái)程序,本文通過對(duì)表格deploy、edit列設(shè)置了 formatter屬性,調(diào)用 function(value,row,index)方法,獲取當(dāng)前列的row.testname值,并通過AJAX傳遞給后端RESTFUL API接口,實(shí)現(xiàn)了前后端的分離,大大降低了系統(tǒng)的耦合性。
表1 試驗(yàn)信息表
2.2.2 試驗(yàn)場(chǎng)景自動(dòng)部署與釋放
用戶在前端界面發(fā)起試驗(yàn)部署或釋放請(qǐng)求后,通過AJAX傳遞場(chǎng)景文件名到控制節(jié)點(diǎn),根據(jù)參數(shù)的不同分別執(zhí)行deploy()、delete()方法,最終完成試驗(yàn)環(huán)境的構(gòu)建與釋放。
針對(duì)OpenStack部署生成的虛擬機(jī)無法支持動(dòng)態(tài)路由,無法設(shè)置鏈路參數(shù)[3]問題進(jìn)行了優(yōu)化。并根據(jù)Nova體系架構(gòu)進(jìn)行了分析,對(duì)創(chuàng)建虛擬機(jī)過程中涉及到的組件,及其消息傳遞經(jīng)過的RabbitMQ消息隊(duì)列中關(guān)鍵參數(shù),進(jìn)行了調(diào)優(yōu),從而提高了虛擬機(jī)創(chuàng)建、刪除速度,實(shí)現(xiàn)了試驗(yàn)環(huán)境的快速復(fù)現(xiàn)。
(1)試驗(yàn)場(chǎng)景自動(dòng)部署:如圖4所示,前端界面在收到用戶對(duì)某個(gè)場(chǎng)景文件的創(chuàng)建請(qǐng)求后,發(fā)送異步消息到控制節(jié)點(diǎn)服務(wù)器,控制節(jié)點(diǎn)首先解析XML配置文件,并下發(fā)虛擬機(jī)鏡像到對(duì)應(yīng)計(jì)算節(jié)點(diǎn)。
圖4 試驗(yàn)場(chǎng)景自動(dòng)部署
本文采用層次結(jié)構(gòu)分明且語法靈活簡單的XML標(biāo)簽來存儲(chǔ)網(wǎng)絡(luò)、主機(jī)節(jié)點(diǎn)、路由器節(jié)點(diǎn)的配置信息,并劃分為多層。第1層為根元素,表明該文檔作用。第2層分別定義了NetworkInfo、InstanceInfo、RouterInfo、用來存儲(chǔ)網(wǎng)絡(luò)、路由器、主機(jī)信息。如表2所示NetworkInfo的第3層定義了name、IP信息。
表2 NeworkInfo標(biāo)簽子元素定義
InstanceInfo 第 3 層定義了 name、image、flavor、networkname、delay、bandwith、az等信息,如表 3 所示。
RouterInfo相對(duì)于InstanceInfo增加了BGP配置信息,如表4所示。
表3 InstanceInfo標(biāo)簽子元素定義
表4 NeworkInfo標(biāo)簽子元素定義
配置解析后,Neutron組件根據(jù)NetworkInfo值調(diào)用neutron.create_network()方法創(chuàng)建虛擬網(wǎng)絡(luò),Nova組件調(diào)用nova.servers.create()方法創(chuàng)建虛擬機(jī)。
然而,由于Neutron組件提供的qrouter軟件不支持動(dòng)態(tài)路由,且無法轉(zhuǎn)發(fā)非直連網(wǎng)絡(luò)的流量[3],這嚴(yán)重制約了試驗(yàn)場(chǎng)景的規(guī)模。本文通過在虛擬機(jī)中搭載Quagga路由軟件,設(shè)置系統(tǒng)ip_forward值為1開啟路由轉(zhuǎn)發(fā),啟動(dòng)zebra服務(wù),進(jìn)入路由器配置模式后,便可像配置實(shí)體路由器一樣進(jìn)行RIP、OSPF、BGP協(xié)議配置[14]。
而為了實(shí)現(xiàn)路由協(xié)議的自動(dòng)化部署,只需將zebra服務(wù)設(shè)置為開機(jī)自啟動(dòng),并將網(wǎng)絡(luò)配置信息寫入配置文件,采用sshpass方式由控制節(jié)點(diǎn)注入計(jì)算節(jié)點(diǎn)中的虛擬機(jī)即可。
此外,由于OpenStack平臺(tái)不支持鏈路性能參數(shù)的仿真[3],所以本文采用文獻(xiàn)[15]提出的方法,在接收到鏈路參數(shù)時(shí)進(jìn)行帶寬、時(shí)延的仿真。
在進(jìn)行大規(guī)模場(chǎng)景創(chuàng)建時(shí),如何提高創(chuàng)建虛擬機(jī)速度成為當(dāng)前研究的熱點(diǎn)話題。如圖5所示,Nova各組件都與RabbitMQ消息隊(duì)列有交互,其中nova-conductor組件和MySQL直接交互。因此,RabbitMQ消息隊(duì)列以及nova-conductor組件的性能成為制約創(chuàng)建速度的瓶頸。
本文首先修改系統(tǒng)文件描述符的最大值,然后通過改rabbitmq-server文件中LimitNOFILE值,來提高RabbitMQ最大連接數(shù)。并修改nova.conf文件中conductor字段中的worker值用來提升nova-conductor對(duì)應(yīng)的worker數(shù)目。這樣,在創(chuàng)建大規(guī)模場(chǎng)景時(shí),消息隊(duì)列的壓力得以緩解,虛擬機(jī)創(chuàng)建速度顯著提高。
(2)試驗(yàn)場(chǎng)景自動(dòng)釋放:如圖7所示,系統(tǒng)收到釋放請(qǐng)求后,首先刪除網(wǎng)絡(luò)信息,接著刪除主機(jī)信息,最終完成整個(gè)試驗(yàn)場(chǎng)景的刪除。
圖5 Nova架構(gòu)
圖6 試驗(yàn)場(chǎng)景自動(dòng)釋放
2.2.3 分布式虛擬機(jī)狀態(tài)監(jiān)控
為加強(qiáng)對(duì)試驗(yàn)效果的分析,需要對(duì)試驗(yàn)過程中各虛擬機(jī)的關(guān)鍵資源信息進(jìn)行監(jiān)控。由于OpenStack自帶的監(jiān)控組件Ceilometer功能還不夠完善,只關(guān)注采集未進(jìn)行存儲(chǔ),當(dāng)數(shù)據(jù)量增大時(shí),Ceilometer性能會(huì)大幅下降甚至?xí)?dǎo)致服務(wù)崩潰[7]。Zabbix網(wǎng)絡(luò)監(jiān)控系統(tǒng)采用分布式部署,并將所有歷史數(shù)據(jù)、趨勢(shì)和配置信息存儲(chǔ)導(dǎo)數(shù)據(jù)庫中,所有邏輯運(yùn)算都在服務(wù)端執(zhí)行,對(duì)被監(jiān)控對(duì)象性能影響很小[10]。本文通過Libvirt虛擬機(jī)管理軟件獲取計(jì)算節(jié)點(diǎn)中虛擬機(jī)的關(guān)鍵信息[8],然后傳輸?shù)絑abbix中,Zabbix添加自定義參數(shù)后并通過Zabbixweb進(jìn)行可視化展示。當(dāng)虛擬機(jī)數(shù)目增多時(shí),通過Zabbix的自動(dòng)發(fā)現(xiàn)功能[11],自動(dòng)發(fā)現(xiàn)被監(jiān)控計(jì)算節(jié)點(diǎn)中新加入的虛擬機(jī)。
如圖7所示,zabbix符合C/S架構(gòu),包含服務(wù)端zabbix server,客戶端 zabbix agent,以及代理端 zabbix proxy三部分組成[11]。本文控制節(jié)點(diǎn)中的zabbix server負(fù)責(zé)與三臺(tái)計(jì)算節(jié)中的zabbix agent進(jìn)行交互、觸發(fā)器計(jì)算、發(fā)送告警通知,并進(jìn)行數(shù)據(jù)存儲(chǔ)。webserver負(fù)責(zé)圖形化展示,并直接與用戶進(jìn)行交互;網(wǎng)絡(luò)節(jié)點(diǎn)的zabbix proxy用于分擔(dān)計(jì)算節(jié)點(diǎn)的負(fù)載,定時(shí)向控制節(jié)點(diǎn)提交數(shù)據(jù)。
圖7 zabbix架構(gòu)
然而,zabbix監(jiān)控項(xiàng)中僅有被監(jiān)控的計(jì)算節(jié)點(diǎn)宿主機(jī)信息,不含計(jì)算節(jié)點(diǎn)機(jī)中創(chuàng)建的虛擬機(jī)的信息。需添加自定義監(jiān)控項(xiàng)[11],對(duì)虛擬機(jī)中的CPU、磁盤、網(wǎng)絡(luò)等信息進(jìn)行監(jiān)控。雖然OpenStack的Hypervisor支持多種虛擬化方式[3],但由于OpenStack是基于KVM開發(fā)的,對(duì)KVM親和性比較好。所以,我們可通過KVM提供的Libvirt工具對(duì)虛擬機(jī)的數(shù)據(jù)進(jìn)行采集。
如圖8所示,Libvirt通過虛擬機(jī)管理器,對(duì)虛擬機(jī)進(jìn)行管理,支持對(duì)各種虛擬機(jī)監(jiān)控程序,提供了一個(gè)應(yīng)用編程接口(API)庫,并集成了對(duì)多種編程語言的綁定[12]。我們首先通過命令“l(fā)ibvirt.open("qemu:///system")”建立連接,然后通過虛擬機(jī)UUID獲取到相關(guān)信息并通過zabbix_send發(fā)送給zabbix-server。
圖8 Libvirt架構(gòu)
(1)CPU使用率:Libvirt無法直接獲得CPU利用率,但可以通過 domain.info()[4]獲得當(dāng)前時(shí)刻 cputime_start,以及數(shù)秒后的cputime_end,然后通過domain.info()[3]獲得 CPU 核數(shù),cputime_diff= 監(jiān)控結(jié)束時(shí)間-監(jiān)控開始時(shí)間,最終通過如公式1計(jì)算:
(2)內(nèi)存使用率:調(diào)用memoryStats()函數(shù)獲取內(nèi)存用量和未用量,通過公式2計(jì)算:
(3)網(wǎng)卡流量:通過調(diào)用interfaceStats()函數(shù)獲取該網(wǎng)卡的rx_bytes(接收字節(jié)數(shù))、以及tx_bytes(發(fā)送字節(jié)數(shù))參數(shù)。
(4)磁盤 I/O:通過調(diào)用 blockStatsFlags()函數(shù)獲取磁盤的rd_bytes(讀取字節(jié)數(shù))、以及wr_bytes(寫入字節(jié)數(shù))。
在獲取到這些參數(shù)后,我們首先需要對(duì)Zabbix服務(wù)端配置文件進(jìn)行修改,設(shè)置UnsafeUserParameters=1表示允許用戶自定義參數(shù)。其中自定義參數(shù)格式如下 :UserParameter=kvm.domain.cpu_util[*],/etc/zabbix/zabbix-kvm.py--item cpu--uuid$1,并添加自動(dòng)發(fā)現(xiàn)規(guī)則kvm.domain.discover,自動(dòng)發(fā)現(xiàn)計(jì)算節(jié)點(diǎn)中新增的虛擬機(jī)。
搭建OpenStack集群,由一臺(tái)控制節(jié)點(diǎn)、一臺(tái)網(wǎng)絡(luò)節(jié)點(diǎn)、三臺(tái)計(jì)算節(jié)點(diǎn)組成??刂乒?jié)點(diǎn)處理器為Intel Xeon E5-2620 v2*4、內(nèi)存64GB、硬盤1TB;網(wǎng)絡(luò)節(jié)點(diǎn)處理器為 Intel Xeon E5-2609 v2*4、內(nèi)存32GB、硬盤1TB;計(jì)算節(jié)點(diǎn)1:處理器為Intel Xeon E5-2620 v3*2、內(nèi)存64GB、硬盤 512MB;計(jì)算節(jié)點(diǎn)2:處理器為Intel Xeon E5-2620 v3*2、內(nèi)存 32GB、硬盤 512MB;計(jì)算節(jié)點(diǎn) 3:處理器為Intel Xeon E5-2620 v2*4、內(nèi)存128GB、硬盤1TB;服務(wù)器均為DELL R760服務(wù)器,操作系統(tǒng)為CentOS 7.5版本,OpenStack為Mitaka版本。
3.2.1 典型網(wǎng)絡(luò)安全試驗(yàn)
用戶可選擇拖拽生成場(chǎng)景文件,或者自行上傳場(chǎng)景文件到場(chǎng)景管理界面進(jìn)行網(wǎng)絡(luò)安全試驗(yàn)。以NMAP端口掃描、DoS攻擊等典型網(wǎng)絡(luò)安全試驗(yàn)為例,進(jìn)行試驗(yàn)平臺(tái)的驗(yàn)證。如圖9所示,用戶首先選中左側(cè)菜單相應(yīng)圖標(biāo),拖放到右側(cè)畫布中,Canvas畫布根據(jù)圖元信息進(jìn)行Node初始化。然后,選中Node節(jié)點(diǎn),在右側(cè)信息欄設(shè)置Node信息并更新。最后,導(dǎo)出場(chǎng)景文件到topology目錄。
圖9 拓?fù)渚庉?/p>
表5 場(chǎng)景信息
如圖9所示,拖拽兩臺(tái)主機(jī)節(jié)點(diǎn)到畫布,并采用封裝了 Nmap、Hping3、tcpdump等軟件的 CentOS鏡像,場(chǎng)景信息如表5所示。導(dǎo)出場(chǎng)景文件并上傳到場(chǎng)景管理界面。
本文設(shè)置Bootstrap-table的striped屬性進(jìn)行隔行變色展示,設(shè)置sortable屬性允許排序,設(shè)置search屬性進(jìn)行搜索,設(shè)置pagination屬性進(jìn)行分頁展示,并設(shè)置url=load_data.php,從數(shù)據(jù)庫實(shí)時(shí)加載數(shù)據(jù)。
圖10 場(chǎng)景管理
load_data.php通過mysqli_connect()方法連接數(shù)據(jù)庫,通過mysqli_fetch_assoc()查詢 task表,并拼接成JSON格式傳送到Bootstrap-table進(jìn)行渲染。
如圖10所示,用戶可選擇對(duì)應(yīng)場(chǎng)景文件進(jìn)行部署、查看、編輯、刪除等操作。接下來對(duì)NMAP端口掃描試驗(yàn)進(jìn)行自動(dòng)部署??刂乒?jié)點(diǎn)收到部署請(qǐng)求后,下發(fā)鏡像到計(jì)算節(jié)點(diǎn),計(jì)算節(jié)點(diǎn)調(diào)用Nova相關(guān)方法完成網(wǎng)絡(luò)network10的創(chuàng)建,兩個(gè)host節(jié)點(diǎn)的部署。部署完成以后,我們可通過ping命令進(jìn)行驗(yàn)證。在完成驗(yàn)證以后,我們可在該場(chǎng)景中進(jìn)行Nmap試驗(yàn)以及DoS攻擊等典型網(wǎng)絡(luò)安全試驗(yàn)。
host1通過Nmap命令,對(duì)host2上敏感端口進(jìn)行掃描,結(jié)果如圖11所示,可發(fā)現(xiàn)host2上開設(shè)了多個(gè)敏感端口。
圖11 NMAP結(jié)果
虛擬機(jī)創(chuàng)建完成以后,zabbix會(huì)自動(dòng)檢測(cè),并添加cpu%、memory%、磁盤讀寫、網(wǎng)卡流量等監(jiān)控項(xiàng)。可在zabbix監(jiān)控頁面依次點(diǎn)擊監(jiān)測(cè)中->最新數(shù)據(jù)->kvm監(jiān)控項(xiàng)查看對(duì)應(yīng)數(shù)據(jù),并查看數(shù)據(jù)動(dòng)態(tài)曲線。
本文在host2上使用命令對(duì)CPU進(jìn)行加壓,如圖12所示,發(fā)現(xiàn)短時(shí)間內(nèi)CPU使用率飆升至接近100%,這表明我們的狀態(tài)監(jiān)控?cái)?shù)據(jù)真實(shí)有效。
為進(jìn)一步對(duì)Zabbix監(jiān)控的其他指標(biāo)進(jìn)行測(cè)試,通過hping3工具在host上對(duì)host2進(jìn)行DoS攻擊。首先,通過Netperf測(cè)量host2的帶寬,共測(cè)試5組數(shù)據(jù)取平均值可得其帶寬接近800MB。
然后,在host1上執(zhí)行hping3-c 5000-d 60000-S-w 64-p 80--flood host2命令,對(duì)host2進(jìn)行DoS攻擊。如圖13所示,在1分鐘左右的上升以后,host2網(wǎng)卡流量最終接近800MB,帶寬幾乎被占滿。
圖12 CPU壓力測(cè)試
圖13 host2網(wǎng)卡流量
3.2.2 LDDoS試驗(yàn)
LDDoS攻擊通過簡單、粗暴的網(wǎng)絡(luò)攻擊,占用系統(tǒng)過多的服務(wù)資源,對(duì)線上環(huán)境造成了嚴(yán)重影響。文獻(xiàn)[18]重點(diǎn)研究了LDDoS場(chǎng)景的攻擊場(chǎng)景配置以及采集與分析,并進(jìn)行了多組試驗(yàn)進(jìn)行驗(yàn)證。
用戶可通過拖拽生成如圖14所示的場(chǎng)景,包括3臺(tái)路由器以及6臺(tái)主機(jī)。導(dǎo)出場(chǎng)景文件后,然后上傳到場(chǎng)景管理界面進(jìn)行部署。
圖14 場(chǎng)景拓?fù)?/p>
自動(dòng)部署程序會(huì)依次進(jìn)行網(wǎng)絡(luò)、主機(jī)的創(chuàng)建。然后,進(jìn)行路由協(xié)議、鏈路特性的設(shè)置。選擇net_1網(wǎng)絡(luò)中3臺(tái)主機(jī)為攻擊主機(jī)、net_3網(wǎng)絡(luò)中3臺(tái)主機(jī)為目標(biāo)主機(jī),并根據(jù)文獻(xiàn)[18]設(shè)計(jì)的策略,進(jìn)行LDDoS攻擊。文獻(xiàn)[18]采用手動(dòng)統(tǒng)計(jì)R1與R3產(chǎn)生的Update報(bào)文的形式來對(duì)試驗(yàn)效果進(jìn)行評(píng)估,本文可直接對(duì)虛擬機(jī)中的關(guān)鍵數(shù)據(jù)進(jìn)行監(jiān)控,實(shí)時(shí)觀測(cè)虛擬機(jī)狀態(tài)。文獻(xiàn)[18]設(shè)計(jì)的基于CAIDA AS Rank拓?fù)湟约按笠?guī)模網(wǎng)絡(luò)拓?fù)渚缮蟼鞯綀?chǎng)景管理界面進(jìn)行場(chǎng)景部署,
本文基于OpenStack云平臺(tái),融合了jTopo網(wǎng)絡(luò)拓?fù)渚庉嬈饕约癇ooStrap-table表格框架進(jìn)行前端展示,采用前后端分離的設(shè)計(jì)模式,實(shí)現(xiàn)了試驗(yàn)場(chǎng)景的一鍵部署與釋放。并通過Zabbix實(shí)現(xiàn)了對(duì)虛擬機(jī)的自動(dòng)發(fā)現(xiàn)以及關(guān)鍵狀態(tài)信息的分布式監(jiān)控。用戶可通過本平臺(tái),快速進(jìn)行各類網(wǎng)絡(luò)安全試驗(yàn),試驗(yàn)過程中可對(duì)指定虛擬機(jī)狀態(tài)進(jìn)行實(shí)時(shí)監(jiān)控。大大提升了試驗(yàn)人員的工作效率,完美解決了傳統(tǒng)網(wǎng)絡(luò)安全試驗(yàn)平臺(tái)的可用性、時(shí)效性差等問題,值得加以推廣。