利用Floodlight进行DDOS攻击防御实验笔记

news2024/10/5 22:30:16

Floodlight

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

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

 流表

        把同一时间,经过同一网络中具有某种共同特征或属性的数据抽象为一个流。比如,一般将访问同一目的地址的数据视为一个流。流一般由网络管理员定义的,可以根据不同的流执行不同的策略。

        流表是针对特定流的策略表项的集合,负责数据包的查找和转发。流表是交换机进行转发策略控制的核心数据结构。交换机芯片通过查找流表项来决策进入交换机网络的数据包执行适当的处理动作。可以将其理解为交换机收到数据包之后该做什么的一系列规则。       

        OpenFlow每个流表项由三个部分组成:用于数据包匹配的包头域(Header Fields),用于统计匹配数据包个数的计数器(Counters),用于对匹配的数据包如何处理的动作(Actions)

        包头域:

        OpenFlow流表的包头域(OpenFlow v1.1之后被称作匹配域),用于对交换机接收到的数据包的包头内容进行匹配。在OpenFlow v1.0中,流表的包头域中包括了12个元组(Tuple):

(图片来源:Juniper Networks)
        对应的中文解释:

 

         计数器:
        用于统计数据流量相关信息,可以针对交换机中的每张流表,每个数据流,设备端口,转发队列进行维护,用于统计数据流量的相关信息。
        1)流表:统计当前活动的表项数,数据包查找次数,以及数据包匹配次数等。
        2)数据流:统计接收到的数据包数、字节数、数据流持续时间等。
        3)设备端口:统计接收到的数据包数,发送数据包数,接收字节数,发送字节数,错误发生的次数。
        4)队列:发送的数据包数、字节数,溢出错误次数。

        动作表:

        用于指示交换机在收到匹配的数据包后,如何对其进行处理,每个流表项可以对应零到多个动作。

实验过程

        在mininet 终端执行 h2 ping -f h1 模拟 Ping Flood Attack,会发现流量涨幅巨大。
调用Floodlight 的API 查询现有流表,返回为空:

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

{
"switch" :"00:00:00:00:00:00:00:01",
"name" : "flow-mod-dropt",
"cookie" : "0",
"in _port" : "1",
"priority" : "100" ,
"active" : "true" ,
"actions " : "output=no-forward"
}

        switch:交换机dpid

        name:随意取一个名字即可

        cookie:流表规则标识

        in_port:入端口

        priority:优先级

        active:是否激活

        actions:动作

        下发流表Drop数据包 :

        出现entry pushed表示流表下发成功,再次查询流表:

        这样设置之后,确实能控制住流量,保证h1不被DDOS,但是即使是正常的h2对h1的访问也无法进行:

         很明显是不恰当的,需要删除刚刚设置的流表,下发更合理的流表,让OpenFlowSwitch 只Drop掉 ICMP的流量,不影响正常的HTTP服务:

{
"switch" :"00:00:00:00:00:00:00:01",
"name" : "flow-mod-dropt",
"cookie" : "0",
"in _port" : "1",
"eth_type":"0x0800",
"ip_proto":"0x01",
"priority" : "100" ,
"active" : "true" ,
"actions " : "output=no-forward"
}

         eth_type: 指定以太网类型为ipv4,ip_proto:指定协议类型为ICMP.

        再次下发流表:

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

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

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/461713.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

线程同步方式之二条件变量

Linux线程同步方法之二 条件变量 饥饿状态:由于线程A频繁地申请/释放锁,而导致其他线程无法访问临界资源的情况。 同步synchronized:在保证数据安全的前提下,让线程能够按照某种特定的顺序访问临界资源,从而有效避免…

Spring Security实战(九)—— 使用Spring Security OAuth实现OAuth对接

一、OAuth2.0介绍 OAuth2.0是一种授权协议,允许用户授权第三方应用程序代表他们获取受保护的资源,如个人信息或照片等。它允许用户授权访问他们存储在另一个服务提供商上的资源,而无需将其凭据共享给第三方应用程序。OAuth2.0协议建立在OAuth…

直升机空气动力学基础--004翼型的阻力

来源 1. 空气的粘性 2.阻力的产生 3.形成因素 4.阻力系数曲线

LeetCode-242. 有效的字母异位词

题目链接 LeetCode-242. 有效的字母异位词 题目描述 题解 题解一(Java) 作者:仲景 首先,满足条件的情况下,两个字符串的长度一定是相等的,不相等一定不满足条件 使用Hash表来存储字符串s中各个字符出现的…

回溯算法——我欲修仙(功法篇)

个人主页:【😊个人主页】 系列专栏:【❤️我欲修仙】 系列文章目录 第一章 ❤️ 学习前的必知知识 第二章 ❤️ 二分查找 文章目录 系列文章目录回溯算法🤔🤔🤔回溯算法一般可以解决的问题回溯算法的实现回…

Python语言简介

B站讲解视频:https://www.bilibili.com/video/BV1Mv4y1n7n8/?vd_source515e6808c21c69114a4fae34589dfb0e Python是什么 Python是一个高层次的结合了解释性、编译性、互动性和面向对象的脚本语言。具有很强的可读性,相比其他语言经常使用英文关键字&a…

为什么有时候磁珠会使电源的纹波变大

电路设计时,我们常常在芯片电源的输入放一个磁珠和电容,用以滤除电源上的高频噪声。 但是有时候会发现,加了磁珠后,芯片电源输入处纹波竟然变大了,超出了电源纹波范围,导致芯片工作异常。 把磁珠换成0R电阻…

论文阅读:Heterogeneous Graph Contrastive Learning for Recommendation(WSDM ’23)

论文链接 Motivation: 在推荐系统中,图神经网络在建模图结构数据上已经变成一个强有力的工具。但是现实生活的推荐语义通常涉及异质关系(像用户的社交关系,物品知识关系的依赖),这些都包含丰富的语义信息…

Linux下实现C语言程序

一.情况说明 写这篇博客的情况比较复杂,首先我本来是参加新星计划按照规划现在去学习shell脚本语言的,但是博主现在由于其他原因需要了解makefile,makefile是Linux系统下的一种工具,makefile的一些背景要涉及链接库的知识&#xf…

从0开始搭建一个简单的前后端分离的XX系统-vue+Springboot+mybatis-plus+mysql

一、准备工作 1.安装node 2.idea 旗舰版** idea**教程 上述教程中的idea**工具 3.安装mysql任意版本 mysql 4.安装mysql workbench(没用上) 5.安装navicate 参考文章:百度-从小白到架构(作者)-Navicat16** Nav…

Thinkphp获取项目最近更改变动的所有文件

导读: 企业级的网站项目都是要不断优化迭代更新的,做为一名后端程序员,在编写更新模块时,如何能快速获取最近修改的文件,然后打包压缩成更新补丁呢?我们先来看一下最终效果图: 步骤&#xff1a…

使用FFMPEG分离mp4/flv文件中的264视频和aac音频

准备 ffmpeg 4.4 一个MP4或flv格式的视频文件 分离流程 大致分为以下几个简单步骤: 1.使用avformat_open_input 函数打开文件并初始化结构AVFormatContext 2.查找是否存在音频和视频信息 3.构建一个h264_mp4toannexb比特流的过滤器,用来给视频avpa…

Hudi 数据湖技术之集成Flink

目录 1 安装Flink2 快速入门2.1 集成Flink概述2.2 环境准备2.3 创建表2.4 插入数据2.5 查询数据2.6 更新数据 3 Streaming query3.1 创建表3.2 查询数据3.3 插入数据 4 Flink SQL Writer4.1 Flink SQL集成Kafka4.2 Flink SQL写入Hudi4.2.1 创建Maven Module4.2.2 消费Kafka数据…

【C++】了解设计模式、 stackqueue的使用与模拟实现

文章目录 1.设计模式2.stack1.stack的使用1.stack的结构2.stack的接口 2.stack的模拟实现1.stack的结构2.接口实现 3.queue1.queue的使用1.queue的结构3.queue的接口 2.queue的模拟实现1.queue的结构2.接口实现 4.了解deque1.deque的原理介绍2.deque的底层结构3.deque的迭代器设…

Codeforces Round 861 (Div. 2)(A~D)

A. Lucky Numbers 给出边界l和r,在区间[l, r]之间找到幸运值最大的数字。一个数字的幸运值被定义为数位差的最大值,即数字中最大的数位和最小的数位的差。 思路:因为涉及到至少两位,即个位和十位变化最快,最容易得到相…

Android四大组件之广播接收者BroadcastReceiver

一、全局广播 Android中的广播可以分为两种类型:标准广播和有序广播 标准广播:一种完全异步执行的广播,在广播发出之后,所有的广播接收器几乎都会同一时刻接收到这条广播消息,因此它们之间没有任何先后顺序。无法进行…

Vector-常用CAN工具 - 入门到精通 - 专栏链接

一、CANoe篇 1、CANoe入门到精通_软件安装 2、CANoe入门到精通_硬件及环境搭建 3、CANoe入门到精通_软件环境配置 4、CANoe入门到精通_Network Node CAPL开发 5、CANoe入门到精通_Node节点开发基本数据类型 6、CANoe入门到精通_Test Node节点开发设置 7、CANoe入门到精通…

《Cocos Creator游戏实战》AIGC之将草稿内容转为真实内容

目录 前言 训练AI 从识别结果中提取必要数据 发送图片并生成最终代码 总结与提高 资源下载 前言 当创作灵感来的时候,我们可能会先把灵感记录在草稿上,之后再去实现它。比方说有一天,我突然来了游戏创作灵感,想着那可以先把…

gpt 怎么用-免费gpt下载使用方法

gpt 怎么用 GPT(Generative Pre-trained Transformer)是一种基于Transformer的神经网络模型,用于自然语言处理任务,例如文本生成、摘要生成、翻译、问答等。以下是使用GPT进行文本生成的一般步骤: 首先,您…

编译预处理

编译预处理 1、宏定义1.1、 无参宏定义1.2、使用宏定义的优点1.3、宏定义注意点1.4、带参数的宏(重点)1.5、条件编译1.6、宏定义的一些巧妙用法(有用)1.7、结构体占用字节数的计算原则(考题经常考,要会画图)1.8、#在宏定义中的作用&#xff0…