2022年6月21日更新
看到很多人喜欢这篇文章我还是很高兴的,今天本来打算将我当初的实验环境公布出来,但是当时是保存到了阿里云盘,阿里云盘不支持分享。
后来改成图片格式,又显示文件过大,4G就嫌大了。。。于是我准备放到百度云里分享出来。 链接在最下方
作者:SwBack
技术交流Q群:768493664
开始是在合天做的这个实验,想要本地复现,搭建本地环境。需要用到
工具: floodlight, mininet (安装完整版),Sflow-RT
需要用到java,ant ,curl ,等等
ubuntu14.04(我自己用的就是这个版本)启动floodlight
back@back:~$ cd floodlight/
back@back:~/floodlight$ java -jar target/floodlight.jar
![v2-5a6ee83cfda3ac8bdcb28d8d70e35e1a_b.jpg](https://i-blog.csdnimg.cn/blog_migrate/870bf9a15f19d1881e33af3ca6d49cea.png)
Floodlight 的WebUI端口是8080,我们可以用浏览器访问它
http://127.0.0.1/ui/index.html
![v2-629a0b8d2287785a7cf5e60b60e4a615_b.jpg](https://i-blog.csdnimg.cn/blog_migrate/5a3041ef5ae1258d2e982cb5b4b4e22e.jpeg)
2)构建拓扑
保持 Floodlight 运行的终端,再新开一个终端窗口,输入如下指令,构建我们所需的拓扑结构。
back@back:~$ sudo mn --controller=remote,ip=127.0.0.1,port=6653 --topo=single,3
![v2-93987f8a76d05f0528fc341892c429fe_b.jpg](https://i-blog.csdnimg.cn/blog_migrate/acaae6a8e90f7a483ba3bf4f695f55d9.jpeg)
2.3 DDoS 攻击检测
1) 启动sFlow-RT
保持Mininet 运行的终端,再新开一个终端窗口,输入如下指令,启动sFlow-RT。
back@back:~$ cd desktop/
back@back:~/desktop$ cd sflow-rt/sflow-rt/
back@back:~/desktop/sflow-rt/sflow-rt$ ./start.sh
![v2-49a970d62b4ff6a86ccb30156d5f2c7f_b.jpg](https://i-blog.csdnimg.cn/blog_migrate/21fdd9cf6e37550fe2abc9ae6d547859.png)
2 ) 配置sFlow Agent
我们需要在虚拟交换机配置sFlow Agent,这样sFlow Collector 才能收集到流量信息进行分析和呈现。
键入以下指令部署sFlow Agent :
back@back:~$ sudo ovs-vsctl -- --id=@sflow create sflow agent=eth0 target=\"127.0.0.1:6343\" sampling=10 polling=20 -- -- set bridge s1 sflow=@sflow
![v2-e6a2026f3f9b04f1fadefcff7c2a7838_b.jpg](https://i-blog.csdnimg.cn/blog_migrate/f3682f48d3b98626be13c10561c2301e.png)
通过如下指令可以查看已经配置的 sFlow Agent信息:
back@back:~$ sudo ovs-vsctl list sflow
![v2-9133be18406184549a29ce327810f771_b.jpg](https://i-blog.csdnimg.cn/blog_migrate/4710e70010eb602ce10ac96234f0e721.png)
输入ip link 指令可以查看,虚拟交换机端口与端口编号的映射
![v2-d81eae349c026dbecbd80e0875228926_b.jpg](https://i-blog.csdnimg.cn/blog_migrate/00f10bfdcd0bc699d7bc5466ebb47354.jpeg)
可以看到s1 交换机对应的编号是4,交换机连接host1的端口对应的编号是5,依次类推。
查看sFlow Agent 是否配置成功,我们可以通过其WebUI进行查看:
localhost:8008/app/flow-trend/html/index.html
点击页面上的 Apps选项, 再点击flow-trend选项
localhost:8008/app/flow-trend/html/index.html
![v2-8d802708afb00a682a8029529b94ac85_b.jpg](https://i-blog.csdnimg.cn/blog_migrate/fcd4e80b11b709ae716fc97e539395c4.png)
然后分别在Keys,Value,Filter列填入:ipsource,ipdestination,stack;bytes;留空 ,然后点击右面的 Submit (√)提交-------,之后,将自动转到图形化流量监控页面
![v2-7ee85def99dc6013e65fe8b6c07e523b_b.jpg](https://i-blog.csdnimg.cn/blog_migrate/5cc3da85a07c52a768147ca9286edb51.png)
![v2-26a397465942ffd40cefde12ee43597f_b.jpg](https://i-blog.csdnimg.cn/blog_migrate/a57237dd75154a57a323f1eeff12f8e2.png)
然后切换到mininet 控制台窗口,使用如下指令,打开 Host1,和Host2的终端:
mininet> xterm h1 h2
然后在 Host1 上启动一个 http 服务
python -m SimpleHTTPServer 80&
![v2-b00c84d21bdd8ea7c780cc5c01c15f7a_b.jpg](https://i-blog.csdnimg.cn/blog_migrate/060ca7ecd31c69bdbfebc1b0873989b8.png)
在 Host2 上 ping Host1
![v2-090561d4fe4e0aa36596a9e265c5a066_b.jpg](https://i-blog.csdnimg.cn/blog_migrate/f2a04daa6e3baea732bd2f029465284d.png)
然后去观察流量, 可以看到,流量很正常,在 Host2 终端中可以按 Ctrl+c,停止ping。可以试试访问一下 Host1的HTTP服务。
![v2-35a7af0b9968368d4405d5e7e1dfeda9_b.jpg](https://i-blog.csdnimg.cn/blog_migrate/7eb456843c800e47fbbd7edc8a6d0baa.png)
![v2-67ad53397f5746c9605a394f911f9634_b.jpg](https://i-blog.csdnimg.cn/blog_migrate/670b728604ac6516e01bd10925adf73f.png)
2)DDoS攻击检测
接下来,我们进行DDoS 模拟攻击,在 mininet 终端中执行,h2 ping -f h1 ,-f 参数的意思就是 Ping Flood ,模拟 Flood Attack。
h2 ping –f h1
![v2-ee52c4663aef50f2cffbdbf43082b3be_b.jpg](https://i-blog.csdnimg.cn/blog_migrate/9753c38a291dd7da490ea042a5f731a3.png)
再去观察交换机流量
![v2-edb4f9d84108776c9f900ee5a460aabe_b.jpg](https://i-blog.csdnimg.cn/blog_migrate/efcc4e413f3c003e410c265efd8ca0f0.png)
2.4 DDoS 攻击防御
打开一个系统终端,输入如下指令,调用Floodlight 的API 查询现有流表
back@back:~$ curl -X GET \
> http://127.0.0.1:8080/wm/staticflowpusher/list/00:00:00:00:00:00:01/json
返回为空:
![v2-eacb76af32ce2980f759ed6a6a9edec4_b.jpg](https://i-blog.csdnimg.cn/blog_migrate/bd7adf039371fec8a7059a8038771636.png)
1)添加流表操作
然后我们添加一条静态流表,为了方便操作和查看,新建一个 ddos.json 的文件,将流表内容写入到这个文件,然后通过 API 进行提交,文件内容如下:
![v2-39ce232db00af170b907c070a7fba531_b.jpg](https://i-blog.csdnimg.cn/blog_migrate/55718e8ac5ac0deb22cfa627e746b7cd.png)
执行下列指令,下发流表Drop数据包:
back@back:~$curl-X POST -d @ddos.json http://127.0.0.1:8080/wm/staticflowpusher/json
返回“Entry pushed”,表示流表下发成功,再次查询流表:
![v2-18dde5fd1d2e7aff8a44c4d5d9159ce0_b.jpg](https://i-blog.csdnimg.cn/blog_migrate/b05aced581e0fbfeabffebf304c1d767.png)
2)观察流量
切换到 sFlow 这边查看流量:
![v2-0aa6d0b6e665bd76db7dc5580afb474f_b.jpg](https://i-blog.csdnimg.cn/blog_migrate/fcdc739fc991b844470139d7da572ab9.png)
发现流表下发之后,流量迅速下降,h1向h2泛洪的数据包迅速的被完全Drop掉了。
切换到 h2 的终端,访问 h1的web服务
![v2-1d1a68564280929cf494629c51224ca0_b.jpg](https://i-blog.csdnimg.cn/blog_migrate/ea7460b3a9ac4543e33a81e08430a401.png)
同样无法访问了。这是因为我们下发的流表是把所有的数据包都Drop掉了。这并不是我们想要的效果,等下我们再来解决这个问题。
3)删除流表
执行以下指令删除刚刚下发的流表:
back@back:~$ curl -X DELETE -d '{"name":"flow-mod-dropt"}' \
> http://127.0.0.1:8080/wm/staticflowpusher/json
![v2-efb3ebeee2508a5ce2c44753114debc3_b.jpg](https://i-blog.csdnimg.cn/blog_migrate/f40e896ded5c8ecdb408d80b8ed435f5.png)
再次观察流量:
![v2-41f978ae4e0947867b10f2b818891dd6_b.jpg](https://i-blog.csdnimg.cn/blog_migrate/100313123f1235c70bd141e2d2682cf8.png)
攻击的数据包流表又恢复了。
4)DROP指定流量
改造需要下发的流表,让OpenFlowSwitch 只Drop掉 ICMP的流量,不影响正常的HTTP服务。修改内容如下:
![v2-9e8b2687965805539c5318f38a259163_b.jpg](https://i-blog.csdnimg.cn/blog_migrate/485239f881bf30614d71bcf19448fbe7.png)
"eth_type":"0x0800",
"ip_proto":"0x01",
添加了两个字段,eth_type: 指定以太网类型为ipv4,ip_proto:指定协议类型为ICMP。
再次下发流表:
back@back:~$curl-X POST -d @ddos.json http://127.0.0.1:8080/wm/staticflowpusher/json
![v2-405f2f2bea5fd6673bb77e9874d5d9d7_b.jpg](https://i-blog.csdnimg.cn/blog_migrate/c919cf9e64df6b553ecd73dc32a329dd.png)
此时再观察流量和访问 h1 的HTTP服务
![v2-d63ba59c1a532a8c31dd45c576370cc3_b.jpg](https://i-blog.csdnimg.cn/blog_migrate/5fee4ef604948bc5534bc9ad1ee5d965.png)
![v2-02285a61252e0212a2947a7cd0df574b_b.jpg](https://i-blog.csdnimg.cn/blog_migrate/1ae0efcabcd141698c4b327cfafea4fa.png)
可以发现,流量下降到正常,但HTTP服务依然可以访问,没有受到影响。
3、总结
通过SDN技术,我们可以对网络流量进行实时监控,提取,分析,并能够及时的对流量进行调整比如QoS,负载均衡,DDoS流量过滤等。
链接: https://pan.baidu.com/s/1erajtSshLVb2_wjBcM3pyw?pwd=back 提取码: back 如果失效,请添加QQ群联系768493664