文章目录
概要
介绍
项目地址: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安装成功。
- 在Ubuntu系统中,打开终端并执行以下命令来安装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
目录以便后续进行控制器的配置和运行。
- 在Ubuntu系统中,通过以下步骤下载并安装Pox控制器:
-
启动Pox控制器:
- 启动Pox控制器并加载常用模块,如简单交换机模块
forwarding.l2_learning
。以下命令可以启动Pox控制器并使用该模块:./pox.py forwarding.l2_learning
- 这个模块会让Pox控制器管理流表,将数据包转发到合适的端口,实现基本的网络流量控制。
- 启动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并指定使用Pox控制器,执行以下命令来启动Mininet:
-
验证控制器与网络的连接:
- 使用Mininet中的
pingall
命令,测试网络节点间的连通性:mininet> pingall
- 如果网络连接正常,则表明Pox控制器已经成功与Mininet中的交换机和主机建立了连接。
- 使用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
- 如果系统中未安装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
- 如果系统中未安装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地址。
- 步骤1:在Mininet中的一台主机(如h3)执行以下命令,生成SYN泛洪攻击流量:
3.3 验证流量生成
-
验证正常流量:
- 在Iperf接收端(如h1),检查是否收到了从发送端发来的流量数据。
- Iperf将显示传输速率和丢包率等信息,用于