基于SDN的DDos攻击与防御

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

可以看到正常流量的流比较松散

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值