基于SDN的DDoS攻击检测与防御

图片来源:合天网安实验室

1、概述

1.1 什么是SDN

软件定义网络(英语:software-defined networking,缩写作 SDN)是一种新型网络架构。它利用OpenFlow协议将路由器的控制平面(control plane)从数据平面(data plane)中分离,改以软件方式实现。该架构可使网络管理员在不更动硬件设备的前提下,以中央控制方式用程序重新规划网络,为控制网络流量提供了新方案,也为核心网络和应用创新提供了良好平台。Facebook与Google都在他们的数据中心中使用OpenFlow协议,并成立了开放网络基金会来推动这个技术。(来源:Wikipedia)

1.2 什么是mininet

Mininet是一个强大的网络仿真平台,通过这个平台,我们可以很方便的模拟真实环境中的网络操作与架构。特别是SDN,在真实网络中进行相关的网络实验有一定难度,自然需要一个仿真平台可以学习这种新型的网络架构,而Mininet就应运而生,承担了这个光荣而艰巨的使命。
Mininet自带交换机(switchs)、主机(hosts)、控制器(controllers),同时,在mininet上可以安装OpenvSwitch、多种控制器(NOX\POX\RYU\Floodlight\OpenDaylight等),同时,Mininet可以运行在多种操作系统上(windows\linux\Mac OS),具有很强的系统兼容性。最令人兴奋的一点是:在Mininet上进行的实验,可以无缝的移到真实的环境中去(官方是这么说的)【来源:CSDN】
Mininet官网:http://mininet.org/

来源:mininet

1.3 什么是Floodlight

Floodlight是Apache授权并基于JAVA开发的企业级OpenFlow控制器,当前最新版本是1.2。


来源:Floodlight

Floodlight OpenFlow Controller -ProjectFloodlight:http://www.projectfloodlight.org/floodlight/

1.3 什么是sFlow

sFlow是一款适用于高速交换网络中的监控软件,可以实时监测网络流量,sFlow需要交换机支持才能使用,而OpenvSwitch支持这个功能。sFlow监控工具由sFlow Agent和sFlow Collector两部分组成。Agent作为客户端,一般内嵌于网络转发设备(如交换机、路由器),通过获取本设备上的接口统计信息和数据信息,将信息封装成sFlow报文发送到指定的Collector。Collector作为远端服务器,负责对sFlow报文分析、汇总、生成流量报告。
sFlow-RT:https://inmon.com/products/sFlow-RT.php

2、实验过程

2.1 实验拓扑
图片来源:合天网安实验室
2.2 构建拓扑环境

1)启动Floodlight控制器

图片来源:合天网安实验室

Floodlight 的WebUI端口是8080,我们可以用浏览器访问它

图片来源:合天网安实验室

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

图片来源:合天网安实验室

命令解释:

sudo:以管理员权限运行,因为mininet要调用内核的东西
mn:就是mininet的命令简写
--controller=remote:使用远程的控制器
ip,port:控制器的ip和端口
--topo:指定拓扑类型,single 就是单一拓扑,就是最简单的交换机下面接主机,后面的3 表示,三台主机。

创建过程非常快,类似这样:

图片来源:合天网安实验室

当你看到 mininet> 标识符,表示拓扑创建完成,我们可以输入一些指令查看网络拓扑。

nodes 指令显示节点信息:

图片来源:合天网安实验室

links指令显示链路信息:

图片来源:合天网安实验室

还有检测网络链路连通性情况的pingall 指令:

图片来源:合天网安实验室

想使用更多指令,可以键入 help 进行查看:

图片来源:合天网安实验室

在Floodlight 的WebUI中查看拓扑结构

图片来源:合天网安实验室
2.3 DDoS 攻击检测

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

图片来源:合天网安实验室

可以看到如下信息:

图片来源:合天网安实验室

其中 6343 是sFlow Collector 的默认端口,8008 则是 sFlow 的WebUI端口。

  1. 配置sFlow Agent
    我们需要在虚拟交换机配置sFlow Agent,这样sFlow Collector 才能收集到流量信息进行分析和呈现。
    键入以下指令部署sFlow Agent :
图片来源:合天网安实验室

指令说明:

  1)agent:监控 eth0 网卡产生的流量;
  2)target:sFlow-RT的IP,默认端口6343;
  3)bridge:需要开启sFlow的网桥;
  4)sampling:采样率,表示每隔N个Packet就取样一次
  5)polling:轮询时间,每隔N秒polling一次
  提示:如果有N个网桥,就需要执行N次部署 sFlowAgent 的指令,我们本次实验中只有一个网桥,所以执行一次就可以了。

通过如下指令可以查看已经配置的 sFlow Agent信息:

图片来源:合天网安实验室

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

图片来源:合天网安实验室

可以看到s1 交换机对应的编号是4,交换机连接host1的端口对应的编号是5,依次类推。
查看sFlow Agent 是否配置成功,我们可以通过其WebUI进行查看:

图片来源:合天网安实验室

可以看到已经添加到了监控对象,点击查看详情:

图片来源:合天网安实验室

看到各个端口的各种信息,但是好像没有我们需要的流量信息,我们先添加一个,点击页面上的 Flows 选项

图片来源:合天网安实验室

然后分别在Name ,Keys,Value,Filter列填入:flows;ipsource,ipdestination,stack;bytes;留空 ,然后点击下面的 Submit 提交

图片来源:合天网安实验室

然后再回到 Agent选项,查看监控的详情,就能看到 Flows信息了(提示:如还是看不到 flows,可在 mininet 控制台中执行 pingall 产生流量 。)

图片来源:合天网安实验室

点击 5.flows 进去即可查看交换机1号端口的流量详情

图片来源:合天网安实验室

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

图片来源:合天网安实验室

图片来源:合天网安实验室

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

图片来源:合天网安实验室

在 Host2 上 ping Host1

图片来源:合天网安实验室

然后去观察流量

图片来源:合天网安实验室

可以看到,流量很正常,在 Host2 终端中可以按 Ctrl+c,停止ping。可以试试访问一下 Host1的HTTP服务。
图片来源:合天网安实验室

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

图片来源:合天网安实验室

再去观察交换机流量

图片来源:合天网安实验室

流量随之飙升,我们可以在系统终端中执行,top 命令,查看 cpu占用

图片来源:合天网安实验室

回到 mininet 终端,按 Ctrl+C 终止Ping Flood ,然后再观察流量

图片来源:合天网安实验室

发现流量马上就下降了。

2.4 DDoS 攻击防御

我们首先在mininet 终端执行h2 ping -f h1 模拟 Ping Flood Attack。会发现流量马上又上来了。

图片来源:合天网安实验室

接下来,我们通过Floodlight控制器向OpenFlow交换机下发流表,抑制攻击流量。在此之前,我们先了解一些概念。

1)什么是流表:
流表是交换机进行转发策略控制的核心数据结构。交换机芯片通过查找流表项来决策进入交换机网络的数据包执行适当的处理动作。可以理解为交换机收到数据包之后该做什么的一系列规则。

2)下发流表:
下发一条流表好比一条指令,告诉交换机收到数据包之后该做什么。

3)OpenFlow流表项结构简介
OpenFlow每个流表项由三个部分组成:用于数据包匹配的包头域(Header Fields),用于统计匹配数据包个数的计数器(Counters),用于对匹配的数据包如何处理的动作(Actions)
包头域:OpenFlow流表的包头域(OpenFlow v1.1之后被称作匹配域),用于对交换机接收到的数据包的包头内容进行匹配。在OpenFlow v1.0中,流表的包头域中包括了12个元组(Tuple):

图片来源:合天网安实验室

对应的中文解释:

图片来源:合天网安实验室

关于OpenFLow 流表的详细情况,大家可以自行查找相关资料。
打开一个系统终端,输入如下指令,调用Floodlight 的API 查询现有流表

图片来源:合天网安实验室

返回为空:


图片来源:合天网安实验室

提示:API文档请参考:Static Flow Pusher API pre-v1.0 -Floodlight Controller - Project Floodlight https://floodlight.atlassian.net/wiki/spaces/floodlightcontroller/pages/1343498/Static+Flow+Pusher+API+pre-v1.0?showComments=true&showCommentArea=true
Static Entry Pusher API - FloodlightController - Project Floodlight https://floodlight.atlassian.net/wiki/spaces/floodlightcontroller/pages/1343518/Static+Entry+Pusher+API

图片来源:合天网安实验室

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

图片来源:合天网安实验室

ddos.json字段解释:
switch:交换机dpid(如果你不知道,可以在控制器的WebUI界面查看)

图片来源:合天网安实验室
name:随意取一个名字即可
cookie:流表规则标识
in_port:入端口
priority:优先级
active:是否激活
actions:动作

注意:不同版本的Floodlight API 在字段上可能不同。以下是 1.0 版本的API

图片来源:合天网安实验室
图片来源:合天网安实验室

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

图片来源:合天网安实验室

返回“Entry pushed”,表示流表下发成功,再次查询流表:

图片来源:合天网安实验室

2)观察流量
切换到 sFlow 这边查看流量:

图片来源:合天网安实验室

发现流表下发之后,流量迅速下降,h1h2泛洪的数据包迅速的被完全Drop掉了。
切换到 h2 的终端,访问 h1web服务

图片来源:合天网安实验室

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

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

图片来源:合天网安实验室

再次观察流量:

图片来源:合天网安实验室

攻击的数据包流表又恢复了。
4)DROP指定流量
改造需要下发的流表,让OpenFlowSwitch 只Drop掉 ICMP的流量,不影响正常的HTTP服务。修改内容如下:

图片来源:合天网安实验室

添加了两个字段,eth_type: 指定以太网类型为ipv4ip_proto:指定协议类型为ICMP
再次下发流表:

图片来源:合天网安实验室

此时再观察流量和访问 h1HTTP服务

图片来源:合天网安实验室

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

3、总结

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

4、如何在线体验上述实验

<<<<<<👇👇点击下方链接即可👇👇>>>>>>
基于SDN的DDoS攻击检测与防御-合天网安实验室

5、关于合天网安实验室

本文由合天网安实验室原创,转载请注明来源。
关于合天网安实验室
合天网安实验室(www.hetianlab.com)-国内领先的实操型网络安全在线教育平台
真实环境,在线实操学网络安全 ;
实验内容涵盖:系统安全,软件安全,网络安全,Web安全,移动安全,CTF,取证分析,渗透测试,网安意识教育等。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 206,482评论 6 481
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 88,377评论 2 382
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 152,762评论 0 342
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 55,273评论 1 279
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 64,289评论 5 373
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,046评论 1 285
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,351评论 3 400
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,988评论 0 259
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 43,476评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,948评论 2 324
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,064评论 1 333
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,712评论 4 323
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,261评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,264评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,486评论 1 262
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,511评论 2 354
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,802评论 2 345

推荐阅读更多精彩内容