參考以下兩篇博客,最后成功:
基于SDN的DDoS攻擊檢測和防御方法_基于sdn的ddos攻擊檢測與防御-CSDN博客
利用mininet模擬SDN架構并進行DDoS攻擊與防御模擬(Ryu+mininet+sflow+postman)_mininet模擬dos攻擊-CSDN博客
需求
H2 模擬flood攻擊H1
解決:
H2不能ping H1,但H2可以訪問H1的HTTP服務
實施步驟
一、基本環境配置
1. 安裝sflow flow-trend app
下載flow-trend,下載到與sflow-rt同級
git clone https://github.com/sflow-rt/flow-trend
?
安裝flow-trend
sflow-rt/get-app.sh sflow-rt flow-trend
2. 開啟sflow-rt
cd sflow-rt
./start.sh
瀏覽器訪問:
http://localhost:8008/html/index.html
點擊頁面上的 【Apps】選項, 再點擊【flow-trend】選項
分別在Keys,Value,Filter列填入:ipsource,ipdestination,stack;bytes;留空 ,然后點擊右面的【 Submit (√)】提交,之后,將自動轉到圖形化流量監控頁面
即會開始進行采樣
二、運行網絡
1.開啟ryu
/opt/sdn/ryu/ryu/app$ ryu-manager ofctl_rest.py simple_switch.py
(此處最開始使用FLOODLIGHT,但后來發現下發流表的時候不好用,后改為RYU)
2.創建星型拓撲
sudo mn --controller=remote,ip=127.0.0.1,port=6653 -topo=single,3
3.使用如下指令,打開 Host1,和Host2的終端,在 Host1 上啟動一個 http 服務:
三、配置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
在 Host2 上 ping Host1,觀察flow trend
四、DDoS攻擊檢測
在h2中停止ping操作。進行DDoS 模擬攻擊,在 mininet 終端中執行,h2 ping -f h1 ,-f 參數的意思就是 Ping Flood ,模擬 Flood Attack。
再去觀察交換機流量
mininet> h2 ping -f h1
五、DDoS 攻擊防御
使用postman,查詢流表,目前H1與H2可以互通
GET :? ?http://localhost:8080/stats/flow/1
1. 添加流表操作
使用postman,添加流表
POST:? http://localhost:8080/stats/flowentry/add
body->raw->json
{"dpid":1,"cookie":1,"cookie_mask":1,"table_id":0,"priority":35268,"flags":1,"match":{"in_port":1},"actions":[]
}
從1口進入的數據流都被drop
但是如果此時,從h1對h3進行http訪問,會發現h1對h3正常進行的http訪問也無法進行,因為流表是把從1口的流量都給down掉了,所以正常的訪問也無法進行。
2. 修改流表
首先,將剛才的流量進行刪除,使用的url:http://localhost:8080/stats/flowentry/delete,功能post,流表項依然為剛才使用的,點擊send后,返回值200OK證明刪除完成。
改造需要下發的流表,讓OpenFlowSwitch 只Drop掉 ICMP的流量,不影響正常的HTTP服務。在之前的流表的基礎之上,加上dl_type字段和nw_proto字段,其中,dl_type字段代表ip協議,其中2048的16進制0x0800代表ipv4協議,nw_proto代表:ip協議上搭載的協議類型,其中1代表icmp協議。改造完成的流表通過postman進行流表下發之后,再次進行測試,發現h1對h3的ping泛洪攻擊失效,而h1對h3的正常的http訪問是得到了正常的回應。