简单的sdn防火墙
使用到的 pox 指令介绍,参考pox控制器学习笔记
1. forwarding.l2_learning
使OpenFlow交换机充当L2学习交换机的一种。当此组件学习L2地址时,它安装的流在尽可能多的字段上都是完全匹配的。
2. openflow.discovery
该组件在交换机之间使用特制的LLDP报文来发现整个网络的拓扑结构。当链路生效或者失效时,该组件都会产生一个事件(Raise Events)。
3. openflow.spanning_tree
该组件使用discovery组件来创建网络拓扑的视图,构造一棵生成树,然后使不在生成树中的交换机端口的洪泛功能失效,使得网络中不存在洪泛回路。
两个选项:
(1) --no-flood,只要交换机连接上了就使该交换机的所有端口洪泛失效,对于某些端口,稍后将使能。
(2) --hold-down,防止洪泛控制在一个完整的发现回路完成前被改变
因此该组件最安全的的使用方法是
openflow.spanning_tree --no-flood --hold-down
使用到的 mininet 指令介绍,参考Mininet常用命令参数介绍
1. mn --custom file.py --topo mytopo
依照 file.py 内的方式创建拓扑,可以参考mininet入门(二)
2. --mac
使用这个参数可以让MAC地址从小到达排列,使得复杂的网络更清晰,容易辨识各个组件的MAC地址。不使用这个参数的话,复杂的网络容易混乱。
3. --controller
一般我们不用mininet自带的控制器,而是自己制定一个远程控制器,代码如下:
mn --controller = remote,
--ip = [控制器的IP地址]
--port = [控制器的端口号]
如果--ip和--port省略的话,则默认使用本地ip地址,端口默认使用6653或6633端口号。
构建思路
Mininet是由斯坦福大学基于Linux Container架构开发的一个进程虚拟化网络仿真工具,可以创建一个包含主机,交换机,控制器和链路的虚拟网络,其交换机支持OpenFlow,具备高度灵活的自定义软件定义网络。
我们可以通过topology.py在虚拟机上使用Mininet构建一个虚拟的小型网络,该网络包含6个交换机,每个交换机都连接着一台主机。尽管Mininet本身可以创建一个主控制器来控制交换机,但我在Loopback接口的tcp6633端口处使用了远程控制器(POX),使其具有学习交换机和防火墙等附加功能。
firewallpolicies.csv提供所要阻止的ip地址并由firewall.py识别,firewall.py将指示控制器在交换机的流表中添加特定的条目,来自这些被阻止的ip地址的数据包将交由交换机独立处理。
L2学习算法将与POX控制器一起运行,控制器强制将所有交换机转换成具有学习功能的二层交换机(L2 switch)。当一个新的数据包到达交换机时,交换机根据openflow协议进行操作,在openflow协议中,它需要将数据包发送到控制器,因为交换机不知该如何操作,所以此时控制器会“告诉”交换机该如何操作,交换机会“学习”源地址及其相应的操作,并在交换机的流表中添加特定的流项。
在POX控制器上(特别是在此网络中)还需要运行openflow协议的Spanning_tree模块,以便大量的交换机能够有效地管理数据包流而不会出现任何循环和错误。
如果我们不将生成树算法与openflow的发现和生成树模块一起使用,则POX控制器将变得不受管理,并引发以下错误:
WARNING:openflow.of_01:<class 'pox.openflow.PacketIn'> raised on dummy OpenFlow nexus.
在2或3台交换机(线性连接)的网络中不会出现此问题。但是,该网络更像是一个网状网络,其中大多数主机都具有与其他主机的直接和多个间接连接。 openflow的spanning_tree组件使用openflow的发现组件来构建网络拓扑的视图,构造一个生成树,然后在不在树上的交换机端口上禁用洪泛。 Spanning_tree组件使用以下选项来修改交换机的行为:--no-flood选项在交换机连接后立即禁用所有端口上的洪泛。 --hold-down选项可防止更改洪水控制,直到完成一个完整的发现周期,因此,所有链接都有机会被发现。 openflow.discovery组件将LLDP消息从openflow交换机发送出去,以便它可以发现网络拓扑。
由于此项目的主要功能是在POX控制器上添加防火墙,因此firewall.py需要与POX控制器一起启动,该算法根据firewallpolicies.csv表工作。当交换机收到从ip_0地址发来的包时,会将其发送到POX,经防火墙模块处理后,将“丢弃”流条目下推到交换机以阻止数据包。因此,交换机将阻止来自该源的任何其他数据包。其他来源的数据包将被简单地转发,POX控制器会在交换机的流表中添加相应的流条目,以便任何其他数据包仅由交换机管理,而无需将数据包发送到控制器,因此符合软件定义网络的原则。
拦截规则

规则未启用

规则启用后

简单的sdn防火墙的更多相关文章
- Linux的简单命令(防火墙篇)
名称 解释 重启 reboot 关机 shutdown -h now poweroff 查看本机IP地址 ifconfig 查看默认网卡信息的文件 cat /etc/sysconfig/netw ...
- nginx+lua构建简单waf网页防火墙
需求背景 类似于论坛型的网站经常会被黑掉,除了增加硬件防护感觉效果还是不太好,还会偶尔被黑,waf的功能正好实现了这个需求. waf的作用: 防止sql注入,本地包含,部分溢出,fuzzing测试,x ...
- Ubuntu默认防火墙安装、启用、配置、端口、查看状态相关信息
Ubuntu附带了一个相对iptables简单很多的防火墙 配置工具:ufw ufw防火墙 即uncomplicated firewall,不复杂的防火墙,繁琐部分的设置还是需要去到iptables ...
- SDN三种模型解析
数十年前,计算机科学家兼网络作家Andrew S. Tanenbaum讽刺标准过多难以选择,当然现在也是如此,比如软件定义网络模型的数量也很多.但是在考虑部署软件定义网络(SDN)或者试点之前,首先需 ...
- 《SDN核心技术剖析和实战指南》第一章小结
第一章主要是概况.新技术有一个特点是,每家都有不同的说法.这里我只说说我比较认同的部分. SDN的核心概念大概有两个:转发面与控制面分离.开发可编程化.书里还说逻辑上集中控制,其实这个就可以从转发与控 ...
- iptables防火墙详解(一)
-- 防火墙 常见的防火墙 :瑞星 江民 诺顿 卡巴斯基 天网...... iptables firewalld http://www.netfilter.org/ netfilter / iptab ...
- ubuntu ufw防火墙软件的配置入门
顺便,一条龙作完安全吧. ufw的使用,是比iptables简单.但只能作简单的事儿,更改简单的netfilter里的iptable里的记录.难点的,可能还是得iptables原生命令. 自打2.4版 ...
- SDN期末作业验收
作业链接:https://edu.cnblogs.com/campus/fzu/SoftwareDefinedNetworking2017/homework/1585 负载均衡程序 1.github链 ...
- [转载]ubuntu防火墙设置
原文地址:ubuntu防火墙设置作者:風飏 自打2.4版本以后的Linux内核中, 提供了一个非常优秀的防火墙工具.这个工具可以对出入服务的网络数据进行分割.过滤.转发等等细微的控制,进而实现诸 ...
随机推荐
- Hooks中的useState
Hooks中的useState React的数据是自顶向下单向流动的,即从父组件到子组件中,组件的数据存储在props和state中,实际上在任何应用中,数据都是必不可少的,我们需要直接的改变页面上一 ...
- 40张图+万字,从9个数据类型帮你稳稳的拿捏Redis数据结构
摘要:本文把Redis新旧版本的数据结构说图解一遍,共有 9 种数据结构:SDS.双向链表.压缩列表.哈希表.跳表.整数集合.quicklist.listpack. 本文分享自华为云社区<为了拿 ...
- logging模块学习
logging模块: https://docs.python.org/3/howto/logging.html#logging-basic-tutorial 本记录教程 日志记录是一种跟踪某些软件运行 ...
- tcp十种状态;关于tcp中time_wait状态(2MSL问题)
tcp十种状态 注意: 当一端收到一个FIN,内核让read返回0来通知应用层另一端已经终止了向本端的数据传送 发送FIN通常是应用层对socket进行关闭的结果 关于tcp中time_wait状态的 ...
- wordpress页面F12时源码多出的内容在index.php header.php找不到
wordpress页面按F12时源码多出的内容在index.php header.php找不到 比如类似这样的内容: <div style="position:absolute;fil ...
- Jenkins安装部署使用图文详解(非常详细)
前言 最近公司需要弄一套自动化运维部署,于是抽空学习了一下,用了两天左右完成Jenkins的安装部署和各种项目的配置化,于是整理一下进行分享. 介绍 Jenkins是一个独立的开源软件项目,是基于Ja ...
- Oracle不等于符号过滤null情况
在Oracle查询过程中,条件查询时,用"<>"操作符进行查询会过滤掉字段为null的记录. 一.不使用"<>"操作符查询:select ...
- Brute-force Algorithm(hdu3221)
Brute-force Algorithm Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Ot ...
- 1678 lyk与gcd
1678 lyk与gcd 基准时间限制:2 秒 空间限制:131072 KB 这天,lyk又和gcd杠上了.它拥有一个n个数的数列,它想实现两种操作. 1:将 ai 改为b.2:给定一个数i,求所有 ...
- Kernel PCA for Novelty Detection
目录 引 主要内容 的选择 数值实验 矩形框 spiral 代码 Hoffmann H. Kernel PCA for novelty detection[J]. Pattern Recognitio ...
