Floodlight
??????? Floodlight是Apache授權(quán)并基于JAVA開發(fā)的企業(yè)級OpenFlow控制器,當前最新版本是1.2。
????????Floodlight OpenFlow Controller -ProjectFloodlight:http://www.projectfloodlight.org/floodlight/
?流表
??????? 把同一時間,經(jīng)過同一網(wǎng)絡(luò)中具有某種共同特征或?qū)傩缘臄?shù)據(jù)抽象為一個流。比如,一般將訪問同一目的地址的數(shù)據(jù)視為一個流。流一般由網(wǎng)絡(luò)管理員定義的,可以根據(jù)不同的流執(zhí)行不同的策略。
????????流表是針對特定流的策略表項的集合,負責數(shù)據(jù)包的查找和轉(zhuǎn)發(fā)。流表是交換機進行轉(zhuǎn)發(fā)策略控制的核心數(shù)據(jù)結(jié)構(gòu)。交換機芯片通過查找流表項來決策進入交換機網(wǎng)絡(luò)的數(shù)據(jù)包執(zhí)行適當?shù)奶幚韯幼?。可以將其理解為交換機收到數(shù)據(jù)包之后該做什么的一系列規(guī)則。???????
????????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)的中文解釋:
?
?????????計數(shù)器:
????????用于統(tǒng)計數(shù)據(jù)流量相關(guān)信息,可以針對交換機中的每張流表,每個數(shù)據(jù)流,設(shè)備端口,轉(zhuǎn)發(fā)隊列進行維護,用于統(tǒng)計數(shù)據(jù)流量的相關(guān)信息。
????????1)流表:統(tǒng)計當前活動的表項數(shù),數(shù)據(jù)包查找次數(shù),以及數(shù)據(jù)包匹配次數(shù)等。
????????2)數(shù)據(jù)流:統(tǒng)計接收到的數(shù)據(jù)包數(shù)、字節(jié)數(shù)、數(shù)據(jù)流持續(xù)時間等。
????????3)設(shè)備端口:統(tǒng)計接收到的數(shù)據(jù)包數(shù),發(fā)送數(shù)據(jù)包數(shù),接收字節(jié)數(shù),發(fā)送字節(jié)數(shù),錯誤發(fā)生的次數(shù)。
????????4)隊列:發(fā)送的數(shù)據(jù)包數(shù)、字節(jié)數(shù),溢出錯誤次數(shù)。
????????動作表:
????????用于指示交換機在收到匹配的數(shù)據(jù)包后,如何對其進行處理,每個流表項可以對應(yīng)零到多個動作。
實驗過程
??????? 在mininet 終端執(zhí)行 h2 ping -f h1 模擬 Ping Flood Attack,會發(fā)現(xiàn)流量漲幅巨大。
調(diào)用Floodlight 的API 查詢現(xiàn)有流表,返回為空:
????????添加一條靜態(tài)流表,為了方便操作和查看,新建一個 ddos.json 的文件,將流表內(nèi)容寫入到這個文件,然后通過 API 進行提交?
{
"switch" :"00:00:00:00:00:00:00:01",
"name" : "flow-mod-dropt",
"cookie" : "0",
"in _port" : "1",
"priority" : "100" ,
"active" : "true" ,
"actions " : "output=no-forward"
}
??????? switch:交換機dpid
????????name:隨意取一個名字即可
????????cookie:流表規(guī)則標識
??????? in_port:入端口
??????? priority:優(yōu)先級
??????? active:是否激活
??????? actions:動作
????????下發(fā)流表Drop數(shù)據(jù)包 :
??????? 出現(xiàn)entry pushed表示流表下發(fā)成功,再次查詢流表:
??????? 這樣設(shè)置之后,確實能控制住流量,保證h1不被DDOS,但是即使是正常的h2對h1的訪問也無法進行:
???????? 很明顯是不恰當?shù)?,需要刪除剛剛設(shè)置的流表,下發(fā)更合理的流表,讓OpenFlowSwitch 只Drop掉 ICMP的流量,不影響正常的HTTP服務(wù):
{
"switch" :"00:00:00:00:00:00:00:01",
"name" : "flow-mod-dropt",
"cookie" : "0",
"in _port" : "1",
"eth_type":"0x0800",
"ip_proto":"0x01",
"priority" : "100" ,
"active" : "true" ,
"actions " : "output=no-forward"
}
?????????eth_type: 指定以太網(wǎng)類型為ipv4,ip_proto:指定協(xié)議類型為ICMP.
????????再次下發(fā)流表:
此時再觀察流量和訪問 h1 的HTTP服務(wù)
可以發(fā)現(xiàn),流量下降到正常,但HTTP服務(wù)依然可以訪問,沒有受到影響。
?文章來源:http://www.zghlxwxcb.cn/news/detail-467115.html
?文章來源地址http://www.zghlxwxcb.cn/news/detail-467115.html
到了這里,關(guān)于利用Floodlight進行DDOS攻擊防御實驗筆記的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!