1.环境准备
工具: floodlight, mininet (安装完整版),Sflow-RT
需要用到java,ant ,curl ,等等
Ubuntu 20.04启动floodlight
2.启动 floodlight
3.构建拓扑,本拓扑三层结构
3.1网络设备:
核心交换机:有两台,标识为 c1 和 c2 ,在网络拓扑中处于核心位置,通常负责高速数据转发和连接汇聚层设备 。
聚合交换机:共四台,标识为 a3 - a6 ,主要作用是将接入层设备(如边缘交换机)的数据进行汇聚,并转发给核心交换机。
边缘交换机:有四台,标识为 e7 - e10 ,用于连接终端设备(如主机),是用户设备接入网络的入口。
主机:共八台h1,h2,h3,h4,h5,h6,h7,h8
3.2编写topo文件
#fattree2.py
from mininet.topo import Topo
from mininet.net import Mininet
from mininet.node import RemoteController
from mininet.link import TCLink
from mininet.util import dumpNodeConnections
class MyTopo(Topo):
def __init__(self):
super(MyTopo,self).__init__()
#Marking the number of switch for per level
L1 = 2;
L2 = L1*2
L3 = L2
#Starting create the switch
c = [] #core switch
a = [] #aggregate switch
e = [] #edge switch
#notice: switch label is a special data structure
for i in range(L1):
c_sw = self.addSwitch('c{}'.format(i+1)) #label from 1 to n,not start with 0
c.append(c_sw)
for i in range(L2):
a_sw = self.addSwitch('a{}'.format(L1+i+1))
a.append(a_sw)
for i in range(L3):
e_sw = self.addSwitch('e{}'.format(L1+L2+i+1))
e.append(e_sw)
#Starting create the link between switchs
#first the first level and second level link
for i in range(L1):
c_sw = c[i]
for j in range(L2):
self.addLink(c_sw,a[j])
#second the second level and third level link
for i in range(L2):
self.addLink(a[i],e[i])
if not i%2:
self.addLink(a[i],e[i+1])
else:
self.addLink(a[i],e[i-1])
#Starting create the host and create link between switchs and hosts
for i in range(L3):
for j in range(2):
hs = self.addHost('h{}'.format(i*2+j+1))
self.addLink(e[i],hs)
topos = {"mytopo":(lambda:MyTopo())}
运行topo文件
sudo mn --custom fattree2.py --topo=mytopo --controller=remote,ip=127.0.0.1,port=6653
主机之间能互相ping通
4.采集DDOS恶意流量
4.1 启动sFlow-RT
4.2配置sFlow Agent
我们需要在虚拟交换机配置sFlow Agent,这样sFlow Collector 才能收集到流量信息进行分析和呈现。
sudo ovs-vsctl -- --id=@sflow create sflow agent=ens33 target=\"127.0.0.1:6343\" sampling=10 polling=20 -- -- set bridge e10 sflow=@sflow
通过如下指令可以查看已经配置的 sFlow Agent信息:
4.3查看交换机编号及与主机链接的编号
4.4Web访问 sflow
然后切换到mininet 控制台窗口,使用如下指令,打开 Host1,和Host8的终端
4.5模拟ddos攻击
我们进行DDoS 模拟攻击,在 mininet 终端中执行,h2 ping -f h1 ,-f 参数的意思就是 Ping Flood ,模拟 Flood Attack。
4.6 sflow检测到DDOS 恶意流量
4.7执行控制命令
编写ddos.json
执行控制指令
curl -X POST -d @ddos.json http://127.0.0.1:8080/vm/staticflowpusher/json
4.8 检测udp恶意攻击流量
4.8.1. h8开启web,端口号为80
4.8.2 h1访问h8的http
4.8.3执行UDP 攻击命令
hping3 --flood --rand-source --udp -p 80 10.0.0.8
4.8.4 sflow检测到的udp攻击流量
由于攻击流量太大,h1 无法ping h8
4.8.5.控制UDP攻击
ovs-ofctl add-flow s1 "udp,in_port=1,ip,nw_dst=10.0.0.1 actions=drop"
curl -X POST -d @ddos.json http://127.0.0.1:8080/vm/staticflowpusher/json
4.8.6检测ICMP恶意攻击流量
H8开启http
4.8.7 H1执行PING攻击
hping3 --flood --rand-source -S -c 100 -p 80 10.10.0.1
ICMP攻击流量采集
4.8.8抑制ICMP攻击
在控制器上作ACL
4.8.9采集syn恶意攻击流量
h1 执行syn攻击h8
Hping3 -S --rand-source 10.0.0.1
4.8.10采集到的 syn流量
4.8.11对syn恶意攻击流量进行抑制
对于直接的Syn Flood攻击,一种简单的防范方法是监视SYN包。如果发现某个IP发送了大量的报文,直接将这个IP列入黑名单即可。然而,这种方法对于源地址不断变化的攻击则效果不佳。
4.9正常流量
最后说一下正常情况下流量是什么样的
编辑正常流量脚本
h8开启正常流量脚本
h8 ping h1
可以看到正常流量的流比较松散