基于SDN环境下的DDoS异常攻击的检测与缓解--实验

简介: 基于SDN环境下的DDoS异常攻击的检测与缓解--实验

基于SDN环境下的DDoS异常攻击的检测与缓解–实验

开始实验前,搭建本地环境。需要用到的工具:


floodlight(SDN控制器的一种)

mininet(仿真网络拓扑环境)

Sflow-RT(流量监控设备)

简介:sFlow技术是一种以设备端口为基本单元的数据流随机采样的流量监控技术,不仅可以提供完整的第二层到第四层甚至全网范围内的实时流量信息,而且可以适应超大网络流量(如大于10Gbit/s)环境下的流量分析,让用户详细、实时地分析网络传输流的性能、趋势和存在的问题。sFlow监控工具由sFlow Agent和sFlow Collector两部分组成。Agent作为客户端,一般内嵌于网络转发设备(如交换机、路由器),通过获取本设备上的接口统计信息和数据信息,将信息封装成sFlow报文,当sFlow报文缓冲区满或是在sFlow报文缓存时间(缓存时间为1秒)超时后,sFlow Agent会将sFlow报文发送到指定的Collector。Collector作为远端服务器,负责对sFlow报文分析、汇总、生成流量报告。


还需要用到的平台编译器:java(JDK/JRE一定要是1.8版本),ant编译器 ,curl (是一个利用URL语法在命令行下工作的文件传输工具)


虚拟机:ubuntu20.04(这个版本不重要)


1.安装floodlight

1.1 安装相关依赖库


sudo apt-get install build-essential default-jdk ant python-dev openjfx
sudo apt-get install git

1.2下载floodlight源

git clone git://github.com/floodlight/floodlight.git

1.3 安装JDK1.8(⚠️安装前要确保Java的JDK为1.8版本)

这里出现了问题,由于默认安装的是jdk11,但是使用jdk11运行floodlight会报错(当时在这里卡了很久),于是先卸载JDK11

sudo apt-get autoremove openjdk-11-jre-headless

重新下载了jdk8

sudo apt install openjdk-8-jre-headless


99b4bc6138e048319523d650a5bb90ff.png

安装其他相关依赖:

sudo apt-get install ant python-dev build-essential maven openjfx

1.4、进入floodlight文件夹

cd ~/floodlight

1.5 针对后面无法访问localhost:8080网页问题的提前修改

git pull origin master
git submodule init
git submodule update

1.6 编译(在floodlight目录下)

ant

ant出现错误

错误是:程序包javax.xml.bind.annotation不存在

ant 显示程序包**不存在(可能会如下报错,这一步当时也是卡了很久)

404f61a33b074ba38261ee2e9dbba96b.png


由于jdk版本为jdk11导致,将jdk换为jdk8

sudo update-alternatives --config javac//切换jdk版本

依旧报错

echo $JAVA_HOME   //查看JAVAHOME

//如果没有内容

export JAVA_HOME=/usr/lib/jvm/java-8-openjdk-amd64   //加入自己jdk8的地址


1.7 接着Build(在floodlight目录下)

ant

93a836981fec4882999ccadf4283ac3d.png


1.8 之后build 成功

java -jar target/floodlight.jar //运行floodlight控制器,该窗口请不要关闭

1.9 网页访问管理界面


浏览器内,打开网页http://localhost:8080/ui/index.html



2a7ecf5e7e0b4afba3593a28160cde0f.png

2.安装sFlow-RT流量监控设备

2.1官网安装地址https://sflow-rt.com/download.php


ed747aa7ee4a4d39a85a1a5bc7912b05.png


2.2这里采用命令行的方式安装(安装前要求JDK1.8的环境)

wget https://inmon.com/products/sFlow-RT/sflow-rt.tar.gz(下载)
tar -xvzf sflow-rt.tar.gz(解压)
./sflow-rt/start.sh(启动)

97b0deaf58e3454e9d72604bd5158c9c.png


安装路径注意选择桌面,系统根目录下会连接失败。路径很重要!


7386f880e26042a6897fb044517e5c23.png


3.命令行安装curl工具

wget https://curl.haxx.se/download/curl-7.55.1.tar.gz(下载)


eee2c8b49eb146309759c3d66b7dc12e.png

tar -xzvf curl-7.55.1.tar.gz(解压)

1ffed40d2a864332a50a1d9e0bff2ade.png

3)安装

cd curl-7.55.1
./configure
make
make install

4)使用 curl --version 检查是否更新成功

curl --version


482d5bc880a84c4dafcff0349647940e.png

4.构建拓扑

保持 Floodlight 运行的终端,再新开一个终端窗口,输入如下指令,构建我们所需的拓扑结构。


sudo mn --controller=remote,ip=127.0.0.1,port=6633 --topo=single,3

75b45374697c40629d87db8d86b3cd57.png


5.DDoS 攻击检测

启动sFlow-RT

保持Mininet 运行的终端,再新开一个终端窗口,输入如下指令,启动sFlow-RT。

cd sflow-rt
./start.sh

154426a9af044c199e75859d2c0b7614.png

b ) 配置sFlow Agent

我们需要在虚拟交换机配置sFlow Agent,这样sFlow Collector 才能收集到流量信息进行分析和呈现。

c)部署sFlow Agent :

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

0a4ddcd3fb024744ae2041c751d06076.png


输入ip link 指令可以查看,虚拟交换机端口与端口编号的映射


可以看到s1 交换机对应的编号是4,交换机连接host1的端口对应的编号是5,依次类推。


b7a31a694259419b9da481a96e1c23c6.png


可以看到s1 交换机对应的编号是4,交换机连接host1的端口对应的编号是5,依次类推。


d)查看sFlow Agent 是否配置成功,我们可以通过其WebUI进行查看:

http://localhost:8008/html/index.html#status


bd8cfad3e1424187b5ea9a9a75ce3765.png


e)安装flow-trend app(如图)


996350b5353d41d8b453908faeb7d949.png


cc15c7abbdc24f76b60e296d1f0fa48d.png

git clone https://github.com/sflow-rt/flow-trend(下载)

bc345c151679469290e9f30dd52ecf5b.png

sflow-rt/get-app.sh sflow-rt flow-trend(运行)


8adbcc18616c44f9b69a17153a20d739.png

安装完成后,关闭全部终端,重复上面的操作,可以看到下图


217a888cc008411fa68fff549872b625.png


点击页面上的 【Apps】选项, 再点击【flow-trend】选项


localhost:8008/app/flow-trend/html/index.html


然后分别在Keys,Value,Filter列填入:ipsource,ipdestination,stack;bytes;留空 ,然后点击右面的【 Submit (√)】提交-------,之后,将自动转到图形化流量监控页面


38d6bd1fca31410a8e28839fe9c4abdd.png


d072be84ef64462aaad2c221013848a3.png


e)然后切换到mininet 控制台窗口,使用如下指令,打开 Host1,和Host2的终端:

xterm h1 h2

然后在 Host1 上启动一个 http 服务

python3 -m http.server 80&

3a0db2f877a14938b02d3f68eb8d051f.png


在 Host2 上 ping Host1


e98d870357644f29863ff9f99590774b.png


然后去观察流量, 可以看到,流量很正常,在 Host2 终端中可以按 Ctrl+c,停止ping。可以试试访问一下 Host1的HTTP服务。


1458df7718434f5095702da2b240ac83.png


2)DDoS攻击检测

接下来,我们进行DDoS 模拟攻击,在 mininet 终端中执行,h2 ping -f h1 ,-f 参数的意思就是 Ping Flood ,模拟 Flood Attack。

h2 ping –f h1

再去观察交换机流量


702a45d2414148a399d73e86d4f9b7d9.png


6.DDoS 攻击防御

打开一个系统终端,输入如下指令,调用Floodlight 的API 查询现有流表

sudo curl  http://127.0.0.1:8080/wm/staticflowpusher/list/00:00:00:00:00:00:01/json

返回为空

1)添加流表操作

然后我们添加一条静态流表,为了方便操作和查看,新建一个 ddos.json 的文件,将流表内容写入到这个文件,然后通过 API 进行提交,文件内容如下:

bcbb2827ec12409cb32f3865a27471b1.png



执行下列指令,下发流表Drop数据包:

curl -X POST -d @ddos.json http://127.0.0.1:8080/wm/staticflowpusher/json

返回“Entry pushed”,表示流表下发成功


2)观察流量

切换到 sFlow 这边查看流量:


81464d5a37384382bb57da191d534a36.png


发现流表下发之后,流量迅速下降,h1向h2泛洪的数据包迅速的被完全Drop掉了。


切换到 h2 的终端,访问 h1的web服务


d42b0c3a9460404ab8f6dfae7a35e854.png


同样无法访问了。这是因为我们下发的流表是把所有的数据包都Drop掉了。这并不是我们想要的效果。

3)删除流表

执行以下指令删除刚刚下发的流表:


  curl -X DELETE -d '{"name":"flow-mod-dropt"}' \
      http://127.0.0.1:8080/wm/staticflowpusher/json

再次观察流量:

ba596ab11c3446d2b315b5190b1dd4f1.png



攻击的数据包流表又恢复了。

4)DROP指定流量

改造需要下发的流表,让OpenFlowSwitch 只Drop掉 ICMP的流量,不影响正常的HTTP服务。修改内容如下:


131185b93e4b44429909a22734c0e7bc.png


添加了两个字段,eth_type: 指定以太网类型为ipv4,ip_proto:指定协议类型为ICMP。

再次下发流表:

curl -X POST -d @ddos.json http://127.0.0.1:8080/wm/staticflowpusher/json

此时再观察流量和访问 h1 的HTTP服务

4ce4c651233b4c38817b391242d4350d.png



可以发现,流量下降到正常,但HTTP服务依然可以访问,没有受到影响。


7.总结

通过SDN技术,我们可以对网络流量进行实时监控,提取,分析,并能够及时的对流量进行调整比如QoS,负载均衡,DDoS流量过滤等。


–end–



相关文章
|
24天前
|
运维 安全 网络安全
DDoS攻击升级,解读防御DDoS攻击的几大有效方法
DDoS攻击升级,解读防御DDoS攻击的几大有效方法
28 0
|
2月前
|
存储 人工智能 安全
DDoS攻击激增,分享高效可靠的DDoS防御方案
DDoS攻击激增,分享高效可靠的DDoS防御方案
52 0
|
8天前
|
存储 安全 应用服务中间件
解密Nginx限流机制:有效应对DDoS攻击与高并发流量
解密Nginx限流机制:有效应对DDoS攻击与高并发流量
20 0
|
1月前
|
Linux 网络安全 Windows
如何通过隐藏服务器真实IP来防御DDOS攻击
如何通过隐藏服务器真实IP来防御DDOS攻击
|
1月前
|
运维 安全 网络安全
一文读懂DDoS,分享防御DDoS攻击的几大有效方法
一文读懂DDoS,分享防御DDoS攻击的几大有效方法
33 0
|
2月前
|
安全 应用服务中间件 网络安全
遭遇DDOS攻击忍气吞声?立刻报警!首都网警重拳出击,犯罪分子无所遁形
公元2024年2月24日18时许,笔者的个人网站突然遭遇不明身份者的DDOS攻击,且攻击流量已超过阿里云DDos基础防护的黑洞阈值,服务器的所有公网访问已被屏蔽,由于之前早已通过Nginx屏蔽了所有国外IP,在咨询了阿里云客服之后,阿里网安的老同事帮助分析日志并进行了溯源,客服建议笔者选择立刻报警处理! 我国《刑法》二百八十六条规定,违反国家规定,对计算机信息系统功能进行删除、修改、增加、干扰,造成计算机信息系统不能正常运行,后果严重的,处五年以下三年以上有期徒刑或者拘役;后果特别严重的,处五年以上有期徒刑。
遭遇DDOS攻击忍气吞声?立刻报警!首都网警重拳出击,犯罪分子无所遁形
|
4月前
|
监控 安全 网络安全
深度解析:DDoS攻击与先进防御策略
DDoS 介绍 DDoS(分布式拒绝服务)攻击是一种恶意网络活动,旨在通过同时向目标系统发送大量请求或流量,使其无法正常运行或提供服务。攻击者通常利用网络上的多个计算机和设备,形成一个"僵尸网络"或"僵尸军团",并协调这些设备以集中地向目标发动攻击。 DDoS 攻击理论 目标系统(Target System):DDoS攻击的目标是一个网络服务、网站、服务器或应用程序,攻击旨在使其无法正常运行,从而造成服务中断。 攻击者(Attackers):攻击者是发起DDoS攻击的个人、组织或恶意软件的开发者。他们试图通过制造大量的流量来超过目标系统的处理能力。
105 0
|
4月前
|
云安全 负载均衡 监控
遇到攻击怎么办,有什么办法解决网络层和应用层的DDoS攻击
解决网络层和应用层的DDoS攻击,应对网络安全的挑战,保护数字化信息时代的网络安全提供有效的安全解决方案。
|
5月前
|
云安全 负载均衡 安全
掌握抗DDoS攻击,守护网络服务无懈可击!
抗DDoS攻击是一种防御措施,旨在保护网络服务免受分布式拒绝服务(DDoS)攻击的影响。DDoS攻击是一种常见的网络攻击,通过发送大量无用的请求来耗尽网络资源,从而使得合法用户无法访问受攻击的网络服务。
57 0
|
5月前
|
网络安全