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官网:mininet.org/
1.3 什么是Floodlight
Floodlight是Apache授权并基于JAVA开发的企业级OpenFlow控制器,当前最新版本是1.2。
Floodlight OpenFlow Controller -ProjectFloodlight:www.projectfloodlight.org/floodlight/
1.3 什么是sFlow
sFlow是一款适用于高速交换网络中的监控软件,可以实时监测网络流量,sFlow需要交换机支持才能使用,而OpenvSwitch支持这个功能。sFlow监控工具由sFlow Agent和sFlow Collector两部分组成。Agent作为客户端,一般内嵌于网络转发设备(如交换机、路由器),通过获取本设备上的接口统计信息和数据信息,将信息封装成sFlow报文发送到指定的Collector。Collector作为远端服务器,负责对sFlow报文分析、汇总、生成流量报告。 sFlow-RT:inmon.com/products/sF…
2、实验过程
2.1 实验拓扑
2.2 构建拓扑环境
1)启动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。
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
指令可以查看,虚拟交换机端口与端口编号的映射
Name ,Keys,Value,Filter
列填入:
flows;ipsource,ipdestination,stack;bytes;留空
,然后点击下面的
Submit
提交
Agent
选项,查看监控的详情,就能看到
Flows
信息了(提示:如还是看不到
flows
,可在 mininet 控制台中执行
pingall
产生流量 。)
5.flows
进去即可查看交换机1号端口的流量详情
mininet
控制台窗口,使用如下指令,打开 Host1,和Host2的终端:
http
服务
ping
Host1
Ctrl+c
,停止ping。可以试试访问一下 Host1的HTTP服务。
mininet
终端中执行,
h2 ping -f h1
,
-f
参数的意思就是 Ping Flood ,模拟 Flood Attack。
top
命令,查看 cpu占用
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 floodlight.atlassian.net/wiki/spaces… Static Entry Pusher API - FloodlightController - Project Floodlight floodlight.atlassian.net/wiki/spaces…
ddos.json
的文件,将流表内容写入到这个文件,然后通过 API 进行提交,文件内容如下:
name:随意取一个名字即可
cookie:流表规则标识
in_port:入端口
priority:优先级
active:是否激活
actions:动作
复制代码
注意:不同版本的Floodlight API 在字段上可能不同。以下是 1.0 版本的API
执行下列指令,下发流表Drop数据包:
返回“Entry pushed”,表示流表下发成功,再次查询流表:
2)观察流量 切换到 sFlow 这边查看流量:
发现流表下发之后,流量迅速下降,h1
向h2
泛洪的数据包迅速的被完全Drop掉了。 切换到 h2
的终端,访问 h1
的web
服务
同样无法访问了。这是因为我们下发的流表是把所有的数据包都Drop掉了。这并不是我们想要的效果,等下我们再来解决这个问题。
3)删除流表 执行以下指令删除刚刚下发的流表:
攻击的数据包流表又恢复了。 4)DROP指定流量 改造需要下发的流表,让OpenFlowSwitch 只Drop掉 ICMP
的流量,不影响正常的HTTP服务
。修改内容如下:
eth_type
: 指定以太网类型为
ipv4
,
ip_proto
:指定协议类型为
ICMP
。 再次下发流表:
此时再观察流量和访问 h1
的HTTP
服务
HTTP
服务依然可以访问,没有受到影响。
3、总结
通过SDN技术,我们可以对网络流量进行实时监控,提取,分析,并能够及时的对流量进行调整比如QoS,负载均衡,DDoS流量过滤等。
4、如何在线体验上述实验
<<<<<<??点击下方链接即可??>>>>>>
5、说明
本文由合天网安实验室原创,转载请注明来源。
关于合天网安实验室
合天网安实验室(www.hetianlab.com)-国内领先的实操型网络安全在线教育平台 真实环境,在线实操学网络安全 ; 实验内容涵盖:系统安全,软件安全,网络安全,Web安全,移动安全,CTF,取证分析,渗透测试,网安意识教育等。