当前位置:   article > 正文

pythonddos监控_基于SDN的DDoS攻击检测与防御

基于python和sdn的ddos攻击检测及防御

开始是在合天做的这个实验,想要本地复现,搭建本地环境。需要用到

工具: floodlight, mininet (安装完整版),Sflow-RT

需要用到java,ant ,curl ,等等

ubuntu14.04(我自己用的就是这个版本)启动floodlight

back@back:~$ cd floodlight/

back@back:~/floodlight$ java -jar target/floodlight.jar

Floodlight 的WebUI端口是8080,我们可以用浏览器访问它

2)构建拓扑

保持 Floodlight 运行的终端,再新开一个终端窗口,输入如下指令,构建我们所需的拓扑结构。

back@back:~$ sudo mn --controller=remote,ip=127.0.0.1,port=6653 --topo=single,3

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

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

通过如下指令可以查看已经配置的 sFlow Agent信息:

back@back:~$ sudo ovs-vsctl list sflow

输入ip link 指令可以查看,虚拟交换机端口与端口编号的映射

可以看到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

然后分别在Keys,Value,Filter列填入:ipsource,ipdestination,stack;bytes;留空 ,然后点击右面的 Submit (√)提交-------,之后,将自动转到图形化流量监控页面

然后切换到mininet 控制台窗口,使用如下指令,打开 Host1,和Host2的终端:

mininet> xterm h1 h2

然后在 Host1 上启动一个 http 服务

python -m SimpleHTTPServer 80&

在 Host2 上 ping Host1

然后去观察流量, 可以看到,流量很正常,在 Host2 终端中可以按 Ctrl+c,停止ping。可以试试访问一下 Host1的HTTP服务。

2)DDoS攻击检测

接下来,我们进行DDoS 模拟攻击,在 mininet 终端中执行,h2 ping -f h1 ,-f 参数的意思就是 Ping Flood ,模拟 Flood Attack。

h2 ping –f h1

再去观察交换机流量

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

返回为空:

1)添加流表操作

然后我们添加一条静态流表,为了方便操作和查看,新建一个 ddos.json 的文件,将流表内容写入到这个文件,然后通过 API 进行提交,文件内容如下:

执行下列指令,下发流表Drop数据包:

back@back:~$curl-X POST -d @ddos.json http://127.0.0.1:8080/wm/staticflowpusher/json

返回“Entry pushed”,表示流表下发成功,再次查询流表:

2)观察流量

切换到 sFlow 这边查看流量:

发现流表下发之后,流量迅速下降,h1向h2泛洪的数据包迅速的被完全Drop掉了。

切换到 h2 的终端,访问 h1的web服务

同样无法访问了。这是因为我们下发的流表是把所有的数据包都Drop掉了。这并不是我们想要的效果,等下我们再来解决这个问题。

3)删除流表

执行以下指令删除刚刚下发的流表:

back@back:~$ curl -X DELETE -d '{"name":"flow-mod-dropt"}' \

> http://127.0.0.1:8080/wm/staticflowpusher/json

再次观察流量:

攻击的数据包流表又恢复了。

4)DROP指定流量

改造需要下发的流表,让OpenFlowSwitch 只Drop掉 ICMP的流量,不影响正常的HTTP服务。修改内容如下:

"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

此时再观察流量和访问 h1 的HTTP服务

可以发现,流量下降到正常,但HTTP服务依然可以访问,没有受到影响。

3、总结

通过SDN技术,我们可以对网络流量进行实时监控,提取,分析,并能够及时的对流量进行调整比如QoS,负载均衡,DDoS流量过滤等。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/Monodyee/article/detail/630476
推荐阅读
相关标签
  

闽ICP备14008679号