【项目复现】——DDoS-SDN Detection Project

概要

介绍

项目地址:Detection-of-DDoS-attacks-on-SDN-network-using-Machine-Learning
项目结构:
在这里插入图片描述
数据集地址:Dataset

整体架构流程

项目中包含一份名为Major Project Documentation的pdf文件,可以理解为操作手册
简化后为以下是于在SDN(软件定义网络)环境中检测DDoS(分布式拒绝服务)攻击的实验步骤的完整流程,包含系统设置、网络配置、流量生成、数据采集、机器学习模型训练以及实时检测的实施细节:

1. 系统和网络配置

  • 操作系统:采用Linux Ubuntu 20.04,分配20 GB的内存来确保系统能够处理大规模数据。
  • 虚拟化:在Oracle VM VirtualBox中运行Linux镜像文件,确保本地运行Mininet 2.3.0。
  • 网络拓扑:使用Mininet创建一个树形结构的SDN网络拓扑,深度为2层。这一拓扑结构中包括OpenFlow交换机,支持OpenFlow协议,能够实现控制器与交换机间的通信。这种拓扑设计模拟了SDN中常见的网络流量结构,有助于分析正常流量和攻击流量的差异。

2. SDN控制器配置

  • 控制器选择:实验中采用了Pox控制器,该控制器基于OpenFlow协议,具有高性能、轻量级和易于定制等优点。Pox控制器提供了拓扑发现和路径选择功能,能够通过开放的API接口定制组件,以实现特定的功能。此外,它还具有架构清晰、性能稳定和扩展性强的特点。

3. 流量生成

  • 正常流量生成
    • 使用 Iperf 工具来生成典型的网络流量,可以通过发送TCP和UDP包来模拟常规的数据传输。
    • 具体命令:使用 ping 命令和 iperf 命令来进行流量生成,比如 iperf –c [目标IP] –i1 –t60 以确保稳定的数据包传输,这样可以建立正常的流量基线,以便后续检测到异常流量时可以更好地进行对比。
  • 攻击流量生成(DDoS)
    • 使用 hping3 工具来生成DDoS攻击流量,该工具可生成多种攻击流如ICMP、SYN和UDP泛洪,通过伪造包头信息来模拟攻击。
    • 具体命令:例如可以使用 hping3 -S -V -d 120 -w 64 -p 80 --rand-source --flood [目标IP] 命令来生成SYN泛洪攻击流量。这类流量用于测试SDN环境下的抗攻击能力【4†source】【4†source】。

4. 数据采集

  • 脚本执行
    • 在正常流量采集时,运行 collect_normal_traffic.py 脚本,并在Ryu Manager下监控网络中正常流量的传输。
    • 在攻击流量采集时,运行 collect_ddos_traffic.py 脚本,通过Ryu Manager捕获攻击流量,并将不同类型的流量数据整合到统一的数据文件中。
  • 数据存储:将正常流量和攻击流量分别记录为不同的日志文件,包括每个流量包的数量、字节数和熵值,以供后续的机器学习模型训练使用

5. DDoS检测机制

  • 流量监控
    • 使用Pox控制器对数据包流量进行监控。通过记录流表条目和计数器,控制器能够计算每个时间窗口内的数据包熵值。
    • 设置熵值阈值:在实验中确定一个适当的熵值阈值(例如正常情况下的熵值最低点为0.8)。一旦检测到熵值持续下降至阈值以下,即可判断网络可能受到DDoS攻击,并将此数据包记录为攻击流量

6. 机器学习模型训练

  • 数据集准备:将正常流量和攻击流量的数据集整合成一个包含200万行数据的文件。数据集包含多种特征值(如来源IP、包类型等)
  • 模型训练
    • 使用多种机器学习算法(如K-近邻算法(KNN)、支持向量机(SVM)、随机森林(RF))在RapidMiner平台上对数据集进行训练。
    • 在多次实验中,随机森林模型的检测准确率最高,被选为最终的部署模型

7. 实时检测部署

  • 模型部署
    • 将训练好的模型部署到SDN网络中,实时检测网络中的流量类型。基于预设的熵值阈值,模型能够判断流量包的类型(正常或恶意),并对攻击流量作出报警。
  • 实时测试
    • 使用ping命令生成正常流量,使用hping3命令生成攻击流量,验证模型在实时环境中识别正常与攻击流量的能力。通过日志记录观察模型在区分流量类型方面的准确性

通过以上流程,该实验旨在构建一个SDN环境下的DDoS检测系统,结合传统的流量检测方法和机器学习模型,实现对DDoS攻击的实时检测和识别。

前期准备

kali安装:借鉴这一篇,2023年最新Kali安装教程
在这里插入图片描述
项目下载的话,选择命令或者手动

git clone https://github.com/Bhanudeep/Detection-of-DDoS-attacks-on-SDN-network-using-Machine-Learning-.git

在这里插入图片描述

复现流程

第一步:系统和网络配置

1.1 安装和设置操作系统
  • 操作系统选择:确保实验主机上安装了 Linux Ubuntu 20.04,并将内存分配为 20 GB(可根据具体硬件条件调整)。高内存配置是为了支持虚拟化软件和模拟的SDN网络环境。
1.2 安装VirtualBox和Mininet
  • 安装VirtualBox:在主机上安装 Oracle VM VirtualBox。可以从VirtualBox官网下载安装包并按提示进行安装。

  • 下载并运行Ubuntu镜像

    • 在VirtualBox中创建一个新的虚拟机,选择Ubuntu 20.04镜像文件(ISO)进行系统安装。
    • 完成系统安装后,确保可以进入Ubuntu系统的桌面环境。
  • 安装Mininet

    • 在Ubuntu系统中,打开终端并执行以下命令来安装Mininet:
      sudo apt-get update
      sudo apt-get install mininet
      
    • 检查Mininet是否安装成功:可以通过在终端输入mn --version来验证,若返回版本号,则说明Mininet安装成功。
      在这里插入图片描述
1.3 创建SDN网络拓扑
  • 定义网络拓扑
    • 使用Mininet创建一个树形结构的SDN网络拓扑,深度为2。这一拓扑设计使得模拟网络可以包含多个层次的节点(即交换机和主机),便于生成多样化的流量。
    • 执行以下命令,创建一个包含两个层级交换机的树状拓扑结构:
      sudo mn --topo tree,depth=2
      
    • 该命令会生成一个深度为2的树形拓扑,您可以看到多个交换机(switch)和主机(host)通过终端的命令行反馈。
      在这里插入图片描述#### 1.4 配置OpenFlow协议支持
  • Mininet的交换机默认支持 OpenFlow协议,这是SDN实验的重要基础,确保所有交换机都能通过OpenFlow协议和SDN控制器通信。

第二步:SDN控制器配置

在此实验中,我们使用 Pox控制器 作为SDN的控制器。Pox是一种轻量级的Python开源控制器,具备高性能和良好的扩展性,适合实验需求。

2.1 安装和运行Pox控制器
  • 安装Pox

    • 在Ubuntu系统中,通过以下步骤下载并安装Pox控制器:
      # 下载Pox源码
      git clone https://github.com/noxrepo/pox.git
      cd pox
      
    • 下载完成后,您可以进入 pox 目录以便后续进行控制器的配置和运行。
  • 启动Pox控制器

    • 启动Pox控制器并加载常用模块,如简单交换机模块 forwarding.l2_learning。以下命令可以启动Pox控制器并使用该模块:
      ./pox.py forwarding.l2_learning
      
    • 这个模块会让Pox控制器管理流表,将数据包转发到合适的端口,实现基本的网络流量控制。
      在这里插入图片描述
2.2 自定义控制器功能(可选)
  • 添加自定义功能
    • 如果需要扩展Pox的功能,比如实现流量监控或自定义数据包转发规则,可以通过Python脚本在Pox中实现自定义模块。
    • 自定义模块的代码可以放置在 pox/ext 文件夹下,并通过调用命令来加载。例如:
      ./pox.py forwarding.l2_learning my_module
      
      其中,my_module 为自定义模块的文件名(无 .py 后缀),可以在此模块中加入自定义功能代码。
2.3 测试Pox控制器与Mininet的通信
  • 启动Mininet

    • 重新启动Mininet并指定使用Pox控制器,执行以下命令来启动Mininet:
      sudo mn --controller=remote,ip=127.0.0.1 --topo tree,depth=2
      
    • 该命令将控制器设置为运行在本地(127.0.0.1)的Pox控制器,并使用前面创建的树形网络拓扑。
  • 验证控制器与网络的连接

    • 使用Mininet中的 pingall 命令,测试网络节点间的连通性:
      mininet> pingall
      
    • 如果网络连接正常,则表明Pox控制器已经成功与Mininet中的交换机和主机建立了连接。
      在这里插入图片描述
2.4 检查网络流量(可选)
  • 流表查看
    • 使用以下命令来检查交换机中的流表,以验证控制器的规则是否已经下发到交换机:
      sudo ovs-ofctl dump-flows s1
      
    • 这里的 s1 是网络拓扑中的交换机名称,查看其流表可以确认Pox控制器的流表是否成功下发。

第三步:流量生成

在SDN网络中生成不同类型的流量(正常流量和攻击流量)是DDoS检测实验的重要部分。我们将使用 Iperf 工具生成正常流量,并使用 hping3 工具生成攻击流量(DDoS攻击)。

3.1 生成正常流量
  • 工具选择:使用 Iperf 工具来生成标准的TCP和UDP流量。
  • Iperf安装
    • 如果系统中未安装Iperf,可以通过以下命令安装:
      sudo apt-get install iperf
      
  • 正常流量生成
    • 步骤1:在Mininet中,打开两个主机(例如h1和h2)的终端,分别作为流量的发送端和接收端。
      在这里插入图片描述

    • 步骤2:在接收端(例如h1)执行以下命令,启动Iperf服务器模式:

      iperf -s
      
    • 步骤3:在发送端(例如h2)执行以下命令,向h1发送TCP流量:

      iperf -c [h1的IP地址] -i 1 -t 60
      
      • [h1的IP地址] 需替换为接收端主机h1的实际IP地址。
      • 参数解释:-c 指定客户端模式,-i 1 表示每秒报告一次,-t 60 指定测试持续时间为60秒。

在这里插入图片描述

  • UDP流量生成:若需生成UDP流量,可在发送端执行以下命令:
    iperf -c [h1的IP地址] -u -b 1M -i 1 -t 60
    
    • 参数 -u 指定UDP模式,-b 1M 设置带宽为1Mbps。
3.2 生成DDoS攻击流量
  • 工具选择:使用 hping3 工具生成攻击流量(如SYN泛洪攻击)。
  • hping3安装
    • 如果系统中未安装hping3,可以通过以下命令安装:
      sudo apt-get install hping3
      
  • 攻击流量生成
    • 步骤1:在Mininet中的一台主机(如h3)执行以下命令,生成SYN泛洪攻击流量:
      hping3 -S -V -d 120 -w 64 -p 80 --rand-source --flood [目标主机IP]
      
      • 参数解释:
        • -S 表示发送SYN标志的数据包。
        • -V 启用详细输出。
        • -d 120 设置数据包大小为120字节。
        • -w 64 设置窗口大小为64。
        • -p 80 指定目标端口80。
        • --rand-source 使用随机源地址以模拟多源攻击。
        • --flood 发送包的频率达到最大以造成DDoS效果。
    • 注意[目标主机IP] 需替换为接收端主机的实际IP地址。
      在这里插入图片描述
3.3 验证流量生成
  • 验证正常流量

    • 在Iperf接收端(如h1),检查是否收到了从发送端发来的流量数据。
    • Iperf将显示传输速率和丢包率等信息,用于
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值