DDoS攻击检测与防御

前言

本实验是基于SDN的DDoS检查与防御

  • Ubuntu
  • sFlow-R
  • Mininet
  • Floodlight (注意版本和jdk的问题)

其他问题不大

环境搭建

启动Floodlight

1
2
$ cd floodlight
$ java -jar target/floodlight.jar

2.png
3.png
可以看见监听6653端口,8080是Floodight的Web端口
1.png

mininet

Mininet是由一些虚拟的终端节点(end-hosts)、交换机、路由器连接而成的一个网络仿真器,它采用轻量级的虚拟化技术使得系统可以和真实网络相媲美。
Mininet可以很方便地创建一个支持SDN的网络:host就像真实的电脑一样工作,可以使用ssh登录,启动应用程序,程序可以向以太网端口发送数据包,数据包会被交换机、路由器接收并处理。有了这个网络,就可以灵活地为网络添加新的功能并进行相关测试,然后轻松部署到真实的硬件环境中。

构建简单拓扑

1
2
$ sudo mn --controller=remote,ip=127.0.0.1,port=6653 --topo=single,3
mininet>

mn:mininet命令简写
–controller=remote:使用远程的控制器
ip,port:控制器的ip和端口
–topo:指定拓扑类型,single 就是单一拓扑,就是最简单的交换机下面接主机,后面的3 表示,三台主机。


mininet基本命令

  • nodes 指令显示节点信息
  • links指令显示链路信息
  • pingall检测网络链路连通性情况

floodlight提供图形界面
4.png

DDOS检测

sFlow-RT

sFlow流量监控工具,可直观的展现网络中的流量以及其他监控信息。在SDN中有着很重要的作用。

1
2
$ cd sflow-rt
$ ./start.sh

监听6343,Web界面8008
5.png

配置sFlow Agent

1
2
3
$ sudo ovs-vsctl -- --id=@sflow create sflow agent=eth0 \
> target=\"127.0.0.1:6343\" sampling=10 polling=20 -- -- set bridge s1 \
> sflow=@sflow

6.png

agent:监控 eth0 网卡产生的流量;
target:sFlow-RT的IP,默认端口6343;
bridge:需要开启sFlow的网桥;
sampling:采样率,表示每隔N个Packet就取样一次
polling:轮询时间,每隔N秒polling一次

注:有N个网桥,就要部署 sFlowAgent

检验sFlow Agent

7.png
在Flows的NameKeysValue,分别键入flowsipsource、ipdestination、stack,bytes

1
mininet> xterm h1 h2

在Agents中找到flows
8.png

DDOS模拟

1
mininet> h2 ping -f h1

9.png

1
$ top

CPU占有率飙升

DDOS防御

1
2
$ curl -X GET  http://127.0.0.1:8080/wm/staticflowentrypusher/json
{} #为空
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
$ vim DDOS.json
{
### Drop所有数据
"switch": "00:00: 00:00:00:00:00:01", #交换机DPID
"name": "flow-test" , #随便的名字
"cookie":"0", # 流表规则标识
"in_port": "1", #入端口
"priority":"100", #优先级
"active": "true", #是否激活
"actions": "output=no-forward" #动作
}
### Drop ICMP包
{
"switch": "00:00: 00:00:00:00:00:01",
"name": "flow-test",
"cookie":"0",
"in_port": "1",
"eth_type":"0x0800", #以太网类型IPV4
"ip_proto":"0x01", #ICMP协议
"priority":"100",
"active": "true",
"actions": "output=no-forward"
}
1
2
3
4
$ curl -X POST -d @ddos.json  http://127.0.0.1:8080/wm/staticflowentrypusher/json #上传流表
----------------------------------------------------
$ curl -X DELETE -d'{"name":"flow-test"}' \
> http://localhost:8080/wm/staticflowentrypusher/json #删除流表

使用API提交

实际情况更为复杂

到此结束

如有错误请联系lanbaidetanlang@qq.com

文章目录
  1. 1. 前言
  2. 2. 环境搭建
    1. 2.1. mininet
      1. 2.1.1. 构建简单拓扑
      2. 2.1.2. mininet基本命令
  3. 3. DDOS检测
    1. 3.1. sFlow-RT
      1. 3.1.1. 配置sFlow Agent
      2. 3.1.2. 检验sFlow Agent
    2. 3.2. DDOS模拟
  4. 4. DDOS防御
    1. 4.0.1. 实际情况更为复杂
  • 5. 到此结束