費 寧,劉春秋
(南京郵電大學 計算機學院 軟件學院,江蘇 南京 210003)
軟件定義網(wǎng)絡(software defined network,SDN)將網(wǎng)絡控制與數(shù)據(jù)轉(zhuǎn)發(fā)分離,使用開放的、獨立的應用層接口,使得通過軟件集中配置和管理設備成為可能。軟件定義網(wǎng)絡作為一種全新的網(wǎng)絡架構(gòu)給網(wǎng)絡安全研究提供了新的方向,SDN在流轉(zhuǎn)發(fā)、深度包檢查、流量重定向等方面具有優(yōu)勢,基于SDN的網(wǎng)絡安全新技術和新應用不斷涌現(xiàn)[1-3]。不少學者提出了軟件定義網(wǎng)絡集中式架構(gòu)下的安全技術框架,嘗試提供更為完善的威脅分析和防御方法[4-5]。文中在深入分析軟件定義網(wǎng)絡和OpenFlow系統(tǒng)原理和架構(gòu)設計的基礎上,提出了基于OpenDaylight控制器的防火墻,并搭建了實驗平臺。該軟件定義網(wǎng)絡有利于新的網(wǎng)絡應用的快速部署和實施,并且基于軟件定義網(wǎng)絡控制器的安全策略切實可行。
OpenDaylight的軟件定義網(wǎng)絡的架構(gòu)特性,使其可以方便地實現(xiàn)路由路徑優(yōu)化,大幅度降低網(wǎng)絡維護成本,提高網(wǎng)絡設備利用率,增加網(wǎng)絡設備的可擴展性和穩(wěn)定性,并能夠解決傳統(tǒng)網(wǎng)絡中的傳輸性能、流量控制、訪問控制等問題。
OpenDaylight通過SAL(service abstraction layer)將底層接口提供的功能封裝成具體的服務提供給上層模塊應用,屏蔽了多種南向協(xié)議之間的差異,為上層模塊提供一致的服務,包括數(shù)據(jù)包服務、拓撲服務、流表編程服務等。
在路由轉(zhuǎn)發(fā)部分,模塊首先要注冊IListenData Packet服務,從SAL收到的數(shù)據(jù)包呈隊列格式存放,并且將數(shù)據(jù)包IP目的地址放入pendingPacket Destinations集合中,run線程從此集合中取出對象IP。同時主機追蹤模塊解析數(shù)據(jù)包的目的主機,獲取相關信息后,對交換機進行遍歷,得到整個網(wǎng)絡的拓撲結(jié)構(gòu)圖,再通過Dijkstra最短路徑算法得到路由,將路徑鏈路放到rulesDB中,接著將流表規(guī)則下發(fā)至路徑經(jīng)過的每個交換機,利用dataPacketService.transmitData Packet()方法將數(shù)據(jù)包發(fā)送出去[6]。
OpenDaylight提供了相應的應用層接口,應用程序向OpenDaylight發(fā)出調(diào)用指令,OpenDaylight利用相應的接口與底層網(wǎng)絡設備進行通信。同時,OpenDaylight還向應用程序提供基礎設施相關的功能接口,如流量監(jiān)控、管理、入侵防御等。
傳統(tǒng)網(wǎng)絡中,處于服務器及應用程序之下的底層位置的是相應的網(wǎng)絡設備,軟件定義網(wǎng)絡概念的提出,為集中式網(wǎng)絡架構(gòu)提供了可能性,內(nèi)部網(wǎng)絡功能也開始出現(xiàn)在新的層級中[7-8]。OpenDaylight的作用就是將網(wǎng)絡功能剝離硬件,重新放回到控制器當中,并且為SDN制定一套通用型框架[9]。文中設計的基于OpenDaylight平臺的防火墻的整體流程包括:firewall模塊功能邏輯;FireClient應用界面開發(fā)、網(wǎng)絡請求邏輯和返回結(jié)果的數(shù)據(jù)處理;測試腳本對firewall模塊請求接口的調(diào)用測試。整體設計流程如圖1所示。
圖1 整體設計流程
圖2 防火墻應用的控制流程
設計的防火墻應用控制流程如圖2所示。當網(wǎng)絡設備向主機發(fā)送網(wǎng)絡請求時,裝載于OpenDaylight平臺上的防火墻應用會查詢訪問控制策略列表,如果請求訪問的設備IP在列表內(nèi),則拒絕訪問,否則對訪問請求做出處理或者向下層設備轉(zhuǎn)發(fā)?;诖耍紫刃枰贠penDaylight平臺開發(fā)出防火墻應用(firewall模塊),用于訪問控制,還需要開發(fā)出上層應用(FireClient)對訪問控制策略進行添加、刪除、查詢等管理操作。
Firewall模塊的調(diào)用流程則是:用戶通過上層應用調(diào)用firewall模塊提供的標準接口,傳入相應參數(shù),firewall模塊本身對用戶請求和參數(shù)進行對應的處理,更新訪問控制列表,返回接口調(diào)用結(jié)果等。
FireClient的功能流程則是:FireClient應用提供發(fā)送請求、查詢、增刪策略功能,每個功能調(diào)用對應的firewall模塊提供的API,實現(xiàn)接口調(diào)用相關的網(wǎng)絡請求發(fā)送,返回結(jié)果的JSON數(shù)據(jù)處理和展示等。
模塊是OpenDaylight的功能單元,各個模塊之間相互獨立又彼此協(xié)調(diào),組合起來構(gòu)成了OpenDaylight對外提供的網(wǎng)絡資源管理、數(shù)據(jù)分發(fā)等全部功能。比較常用的模塊有yangUI、dlux、l2switch等。本次研究中設計開發(fā)的防火墻就是基于OpenDaylight平臺的模塊,該模塊可以在開發(fā)測試完成后用Maven打包,并導入OpenDaylight的release版中,與其他模塊一起使用。
Maven是基于項目對象模型(POM)的軟件項目管理和依賴分析工具,可以通過描述信息進行創(chuàng)建項目、編譯項目、加載項目依賴等[10-11]?;贛aven簡化構(gòu)建過程的思考,在本次項目開發(fā)中,將使用Maven構(gòu)建firewall項目骨架,并且使用Maven對開發(fā)好的firewall進行編譯、打包。
Yang是一種數(shù)據(jù)建模語言[12-13],開發(fā)者通過對Yang模型的構(gòu)建,指定標準訪問接口和數(shù)據(jù)類型,通過遠程調(diào)用或消息通知的方式實現(xiàn)模型配置與數(shù)據(jù)的分發(fā)處理。Yang模型的類型之一為Data,負責定義數(shù)據(jù)類型并用來進行數(shù)據(jù)存儲,分為兩種:Config和Operational。Config為配置信息,是北向上層應用向南向網(wǎng)絡發(fā)送的配置數(shù)據(jù)信息,Operational為運行時信息,通常是OpenDaylight記錄的南向網(wǎng)絡動態(tài)信息。
實驗設計中開發(fā)的FireClient是基于Mac OS X系統(tǒng)的Cocoa框架,開發(fā)語言是Swift,集成開發(fā)環(huán)境是Xcode[14]。主要步驟如下:
第一步創(chuàng)建項目;第二步開發(fā)用戶界面,使用原生的AppKit框架[15],框架底層采用OpenGL繪制,用到了對象的延遲加載及frame相對布局,界面效果如圖3所示;第三步調(diào)用REST API,firewall模塊提供的REST API有:發(fā)送請求(request);查詢訪問控制IP列表(query);增加訪問控制IP(add);刪除訪問控制IP(delete)。
圖3 FireClient用戶界面
REST API調(diào)用代碼,以query接口為例,執(zhí)行步驟如下:
(1)構(gòu)建HTTP請求頭,請求頭中包括OpenDaylight的Dlux界面的登錄授權,content-type等數(shù)據(jù);
(2)構(gòu)建HTTP請求體,請求體中包括向query接口發(fā)送的參數(shù);
(3)申請并初始化NSURLRequest對象request,設定請求方式為POST,并指定已構(gòu)建好的HTTP請求頭和HTTP請求體;
(4)獲取URLSession的單例對象session,session異步調(diào)用dataTask方法,傳入request參數(shù);
(5)在dataTask方法的block中對請求的響應結(jié)果的JSON數(shù)據(jù)進行解析,獲取有效信息;
(6)獲取主線程,在主線程中將有效信息展示在用戶界面上;
(7)調(diào)用session的resume()方法開始執(zhí)行session的HTTP請求。
模擬測試腳本用于模擬虛擬設備向firewall模塊對外提供的REST API,腳本代碼如圖4所示。
圖4 腳本代碼
測試過程按照如下用例依次進行:
用例1:調(diào)用腳本向request發(fā)送請求,模擬IP為192.168.2.1,預期結(jié)果:訪問成功。執(zhí)行腳本./request.sh "hello" "192.168.2.1",輸出結(jié)果,如圖5所示。
圖5 用例1測試結(jié)果
用例2:用FireClient添加訪問策略,禁止IP為192.168.2.1設備訪問,預期結(jié)果:訪問拒絕。用FireClient增加訪問策略,禁止IP為192.168.2.1的設備訪問,點擊“增加”按鈕之后,則添加成功。執(zhí)行腳本./request.sh "hello" "192.168.2.1",輸出結(jié)果如圖6所示:阻止了IP為192.168.2.1的設備的訪問。測試結(jié)果和預期一樣。
圖6 用例2測試結(jié)果
用例3:添加訪問策略,禁止IP為192.168.2.2的設備訪問,用FireClient查詢訪問控制策略列表,查詢值為2,預期結(jié)果:返回兩個禁止訪問的IP地址。添加訪問策略,禁止IP為192.168.2.2的設備訪問,操作步驟與用例2相同。用FireClient查詢訪問控制策略列表,查詢值為2。查詢結(jié)果顯示了添加的訪問控制列表。
文中提出了一種基于OpenDaylight的防火墻設計與實現(xiàn)方案,并通過實驗驗證了其可行性。實驗結(jié)果表明,由于OpenDaylight已經(jīng)提供了豐富的應用程序接口, 使得快速進行網(wǎng)絡應用的二次開發(fā)成為可能。
雖然該應用原型測試案例比較簡單,但所有的防火墻策略都可以通過用戶界面靈活修改。下一步將對用戶策略的抽象和定制以及平臺跨操作系統(tǒng)的移植等進行研究。