預(yù)備知識??
SDN? ? ?
????? 軟件定義網(wǎng)絡(luò)(英語:software-defined networking,縮寫作 SDN)是一種新型網(wǎng)絡(luò)架構(gòu)。它利用OpenFlow協(xié)議將路由器的控制平面(control plane)從數(shù)據(jù)平面(data plane)中分離,改以軟件方式實現(xiàn)。該架構(gòu)可使網(wǎng)絡(luò)管理員在不更動硬件設(shè)備的前提下,以中央控制方式用程序重新規(guī)劃網(wǎng)絡(luò),為控制網(wǎng)絡(luò)流量提供了新方案,也為核心網(wǎng)絡(luò)和應(yīng)用創(chuàng)新提供了良好平臺。??
????? Facebook與Google都在他們的數(shù)據(jù)中心中使用OpenFlow協(xié)議,并成立了開放網(wǎng)絡(luò)基金會來推動這個技術(shù)?!緛碓矗篧ikipedia】??
Mininet? ??
????? Mininet是一個強大的網(wǎng)絡(luò)仿真平臺,通過這個平臺,我們可以很方便的模擬真實環(huán)境中的網(wǎng)絡(luò)操作與架構(gòu)。特別是SDN,在真實網(wǎng)絡(luò)中進行相關(guān)的網(wǎng)絡(luò)實驗有一定難度,自然需要一個仿真平臺可以學(xué)習(xí)這種新型的網(wǎng)絡(luò)架構(gòu),而Mininet就應(yīng)運而生,承擔了這個光榮而艱巨的使命。
????? Mininet自帶交換機(switchs)、主機(hosts)、控制器(controllers),同時,在mininet上可以安裝OpenvSwitch、多種控制器(NOX\POX\RYU\Floodlight\OpenDaylight等),同時,Mininet可以運行在多種操作系統(tǒng)上(windows\linux\Mac OS),具有很強的系統(tǒng)兼容性。最令人興奮的一點是:在Mininet上進行的實驗,可以無縫的移到真實的環(huán)境中去(官方是這么說的)【來源:CSDN】??
????? Mininet:http://mininet.org/? ? ?
Floodlight?
????? Floodlight是Apache授權(quán)并基于JAVA開發(fā)的企業(yè)級OpenFlow控制器,當前最新版本是1.2。
?
?????
????? Floodlight OpenFlow Controller -ProjectFloodlight:http://www.projectfloodlight.org/floodlight/ sFlow
????? sFlow是一款適用于高速交換網(wǎng)絡(luò)中的監(jiān)控軟件,可以實時監(jiān)測網(wǎng)絡(luò)流量,sFlow需要交換機支持才能使用,而OpenvSwitch支持這個功能。sFlow監(jiān)控工具由sFlow Agent和sFlow Collector兩部分組成。Agent作為客戶端,一般內(nèi)嵌于網(wǎng)絡(luò)轉(zhuǎn)發(fā)設(shè)備(如交換機、路由器),通過獲取本設(shè)備上的接口統(tǒng)計信息和數(shù)據(jù)信息,將信息封裝成sFlow報文發(fā)送到指定的Collector。Collector作為遠端服務(wù)器,負責對sFlow報文分析、匯總、生成流量報告。
????? sFlow-RT:https://inmon.com/products/sFlow-RT.php
實驗?zāi)康?/strong>
1、了解sFlow-RT的配置
2、基于SDN的DDoS攻擊仿真
3、掌握利用Floodlight進行DDoS防御的原理和方法
實驗環(huán)境
操作系統(tǒng):Ubuntu14.04 LTS
所用工具:Mininet,F(xiàn)loodlight,sFlow-RT
網(wǎng)絡(luò)拓撲:
實驗步驟一
實驗拓撲構(gòu)建
????? 桌面空白處,右鍵-打開終端,切換到HOME目錄
?????
?
????? 啟動Floodlight 控制器? ??
????? 在輸出信息中可以看到監(jiān)聽的端口?????
????? 其中 6653 是OpenFlow swith的端口,等會我們用mininet 創(chuàng)建網(wǎng)絡(luò)拓撲需要用到這個端口,8080 則是 Floodlight 的WebUI端口,我們可以用瀏覽器訪問它? ? ?
????? 保持 Floodlight 運行的終端,再新開一個終端窗口,輸入如下指令,構(gòu)建我們所需的拓撲結(jié)構(gòu)。
? ??
????? 命令解釋:
????? sudo:以管理員權(quán)限運行,因為mininet要調(diào)用內(nèi)核的東西
????? mn:就是mininet的命令簡寫
????? --controller=remote:使用遠程的控制器
????? ip,port:控制器的ip和端口
????? --topo:指定拓撲類型,single 就是單一拓撲,就是最簡單的交換機下面接主機,后面的3 表示,三臺主機。
????? 創(chuàng)建過程非常快,類似這樣:? ? ?
????? 當你看到 mininet> 標識符,表示拓撲創(chuàng)建完成,我們可以輸入一些指令查看網(wǎng)絡(luò)拓撲。
????? nodes 指令顯示節(jié)點信息:? ? ?
????? links指令顯示鏈路信息:? ? ?
????? 還有檢測網(wǎng)絡(luò)鏈路連通性情況的pingall 指令:? ? ?
????? 想使用更多指令,可以鍵入 help 進行查看:文章來源:http://www.zghlxwxcb.cn/news/detail-485017.html
????? 除了在mininet 控制臺之外,F(xiàn)loodlight 的WebUI提供一種更友好的方式查看網(wǎng)絡(luò)拓撲情況,可以點擊左側(cè)的菜單查看相應(yīng)的信息。
?????
實驗步驟二
DDoS 攻擊檢測
????? 啟動sFlow-RT進行流量監(jiān)控:
????? 保持Mininet 運行的終端,再新開一個終端窗口,輸入如下指令,啟動sFlow-RT。(啟動后不要關(guān)閉此終端)? ? ?
????? 可以看到如下信息:? ? ?
????? 其中 6343 是sFlow Collector 的默認端口,8008 則是 sFlow 的WebUI端口。
????? 配置sFlow Agent:
????? 我們需要在虛擬交換機配置sFlow Agent,這樣sFlow Collector 才能收集到流量信息進行分析和呈現(xiàn)。
????? 鍵入以下指令部署sFlow Agent :
????? sudo ovs-vsctl -- --id=@sflow create sflow agent=eth0 \
????? target=\"127.0.0.1:6343\" sampling=10 polling=20 -- -- set bridge s1 \
????? sflow=@sflow? ? ?
????? 指令說明:
????? 1)agent:監(jiān)控 eth0 網(wǎng)卡產(chǎn)生的流量;
????? 2)target:sFlow-RT的IP,默認端口6343;
????? 3)bridge:需要開啟sFlow的網(wǎng)橋;
????? 4)sampling:采樣率,表示每隔N個Packet就取樣一次
????? 5)polling:輪詢時間,每隔N秒polling一次
????? 提示:如果有N個網(wǎng)橋,就需要執(zhí)行N次部署 sFlowAgent 的指令,我們本次實驗中只有一個網(wǎng)橋,所以執(zhí)行一次就可以了。
????? 通過如下指令可以查看已經(jīng)配置的 sFlow Agent信息:?? ? ?
????? 輸入ip link 指令可以查看,虛擬交換機端口與端口編號的映射(提示:實驗機中的端口編號可能有所不同。)
?????
????? 可以看到s1 交換機對應(yīng)的編號是4,交換機連接host1的端口對應(yīng)的編號是5,依次類推。
????? 查看sFlow Agent 是否配置成功,我們可以通過其WebUI進行查看,瀏覽器中訪問:? ? ?
????? 可以看到已經(jīng)添加到了監(jiān)控對象,點擊查看詳情:
?????
????? 看到各個端口的各種信息,但是好像沒有我們需要的流量信息,我們先添加一個,點擊頁面上的 Flows 選項
?? ?
????? 然后分別在Name ,Keys,Value,F(xiàn)ilter列填入:flows;ipsource,ipdestination,stack;bytes;留空 ,然后點擊下面的 Submit 提交? ??
????? 然后再回到 Agent選項,查看監(jiān)控的詳情,就能看到 Flows信息了(提示:如還是看不到 flows,可在 mininet 控制臺中執(zhí)行 pingall 產(chǎn)生流量 。)? ? ?
????? 點擊 5.flows 進去即可查看交換機1號端口的流量詳情
?????
????? 然后切換到mininet 控制臺窗口,使用如下指令,打開 Host1,和Host2的終端:
? ????
????? 然后在 Host1 上啟動一個 http 服務(wù)
? ??
????? 在 Host2 上 ping Host1? ??
????? 然后去觀察流量
? ??
????? 可以看到,流量很正常,在 Host2 終端中可以按 Ctrl+c,停止ping??梢栽囋囋L問一下 Host1的HTTP服務(wù)。? ? ?
????? 接下來,我們進行DDoS 模擬攻擊,在 mininet 終端中執(zhí)行,h2 ping -f h1 ,-f 參數(shù)的意思就是 ?Ping Flood ,模擬 Flood Attack。? ? ?
????? 再去觀察交換機流量
? ??
????? 流量隨之飆升,我們可以在系統(tǒng)終端中執(zhí)行,top 命令,查看 cpu占用? ? ?
????? 回到 mininet 終端,按 Ctrl+C 終止Ping Flood ,然后再觀察流量? ? ?
????? 發(fā)現(xiàn)流量馬上就下降了。
實驗步驟三
DDoS 攻擊防御
????? 我們首先在mininet 終端執(zhí)行 h2 ping -f h1 模擬 Ping Flood Attack。會發(fā)現(xiàn)流量馬上又上來了。
?????
????? 接下來,我們通過Floodlight控制器向OpenFlow交換機下發(fā)流表,抑制攻擊流量。在此之前,我們先了解一些概念。
1)什么是流表:
????? 流表是交換機進行轉(zhuǎn)發(fā)策略控制的核心數(shù)據(jù)結(jié)構(gòu)。交換機芯片通過查找流表項來決策進入交換機網(wǎng)絡(luò)的數(shù)據(jù)包執(zhí)行適當?shù)奶幚韯幼?。可以理解為交換機收到數(shù)據(jù)包之后該做什么的一系列規(guī)則。
2)下發(fā)流表:
????? 下發(fā)一條流表好比一條指令,告訴交換機收到數(shù)據(jù)包之后該做什么。
3)OpenFlow流表項結(jié)構(gòu)簡介
????? OpenFlow每個流表項由三個部分組成:用于數(shù)據(jù)包匹配的包頭域(Header Fields),用于統(tǒng)計匹配數(shù)據(jù)包個數(shù)的計數(shù)器(Counters),用于對匹配的數(shù)據(jù)包如何處理的動作(Actions)
????? 包頭域:OpenFlow流表的包頭域(OpenFlow v1.1之后被稱作匹配域),用于對交換機接收到的數(shù)據(jù)包的包頭內(nèi)容進行匹配。在OpenFlow v1.0中,流表的包頭域中包括了12個元組(Tuple):
?????
?????(圖片來源:Juniper Networks)
????? 對應(yīng)的中文解釋:
?????
????? 關(guān)于OpenFLow 流表的詳細情況,大家可以自行查找相關(guān)資料。
????? 打開一個系統(tǒng)終端,輸入如下指令,調(diào)用Floodlight 的API 查詢現(xiàn)有流表
?? ?
????? 返回為空:? ? ?
????? 提示:API文檔請參考:Static Flow Pusher API pre-v1.0 -Floodlight Controller - Project Floodlight?https://floodlight.atlassian.net/wiki/spaces/floodlightcontroller/pages/1343498/Static+Flow+Pusher+API+pre-v1.0?showComments=true&showCommentArea=true
????? Static Entry Pusher API - FloodlightController - Project Floodlight?
https://floodlight.atlassian.net/wiki/spaces/floodlightcontroller/pages/1343518/Static+Entry+Pusher+API
? ??
????? 然后我們添加一條靜態(tài)流表,為了方便操作和查看,新建一個 ddos.json 的文件,將流表內(nèi)容寫入到這個文件,然后通過 API 進行提交,文件內(nèi)容如下:? ? ?
????? ddos.json字段解釋:
????? switch:交換機dpid(如果你不知道,可以在控制器的WebUI界面查看)? ? ?
????? name:隨意取一個名字即可
????? cookie:流表規(guī)則標識
????? in_port:入端口
????? priority:優(yōu)先級
????? active:是否激活
????? actions:動作
????? 注意:不同版本的Floodlight API 在字段上可能不同。以下是 1.0 版本的API?? ?
??
? ??
????? 執(zhí)行下列指令,下發(fā)流表Drop數(shù)據(jù)包:
????? curl -X POST -d @ddos.json? http://localhost:8080/wm/staticflowentrypusher/json? ? ?
????? 返回“Entry pushed”,表示流表下發(fā)成功,再次查詢流表:? ? ?
????? 切換到 sFlow 這邊查看流量:? ? ?
????? 發(fā)現(xiàn)流表下發(fā)之后,流量迅速下降,h1向h2泛洪的數(shù)據(jù)包迅速的被完全Drop掉了。
????? 切換到 h2 的終端,訪問 h1的web服務(wù)? ??
????? 同樣無法訪問了。這是因為我們下發(fā)的流表是把所有的數(shù)據(jù)包都Drop掉了。這并不是我們想要的效果,等下我們再來解決這個問題。
?????? 執(zhí)行以下指令刪除剛剛下發(fā)的流表:
????? curl -X DELETE -d'{"name":"flow-mod-dropt"}' \
? ? ??http://localhost:8080/wm/staticflowentrypusher/json? ? ?
????? 再次觀察流量:? ? ?
????? 攻擊的數(shù)據(jù)包流表又恢復(fù)了。
????? 改造需要下發(fā)的流表,讓OpenFlowSwitch 只Drop掉 ICMP的流量,不影響正常的HTTP服務(wù)。修改內(nèi)容如下:? ? ?
????? 添加了兩個字段,eth_type: 指定以太網(wǎng)類型為ipv4,ip_proto:指定協(xié)議類型為ICMP。
????? 再次下發(fā)流表:? ? ?
????? 此時再觀察流量和訪問 h1 的HTTP服務(wù)? ? ?
????? 可以發(fā)現(xiàn),流量下降到正常,但HTTP服務(wù)依然可以訪問,沒有受到影響。文章來源地址http://www.zghlxwxcb.cn/news/detail-485017.html
到了這里,關(guān)于基于SDN的DDoS攻擊檢測與防御(25)的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!