github仓库

演示视频

本次实验建立的拓扑

使用到的 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防火墙的更多相关文章

  1. Linux的简单命令(防火墙篇)

    名称 解释 重启 reboot 关机 shutdown  -h   now poweroff 查看本机IP地址 ifconfig 查看默认网卡信息的文件 cat /etc/sysconfig/netw ...

  2. nginx+lua构建简单waf网页防火墙

    需求背景 类似于论坛型的网站经常会被黑掉,除了增加硬件防护感觉效果还是不太好,还会偶尔被黑,waf的功能正好实现了这个需求. waf的作用: 防止sql注入,本地包含,部分溢出,fuzzing测试,x ...

  3. Ubuntu默认防火墙安装、启用、配置、端口、查看状态相关信息

    Ubuntu附带了一个相对iptables简单很多的防火墙 配置工具:ufw ufw防火墙 即uncomplicated firewall,不复杂的防火墙,繁琐部分的设置还是需要去到iptables ...

  4. SDN三种模型解析

    数十年前,计算机科学家兼网络作家Andrew S. Tanenbaum讽刺标准过多难以选择,当然现在也是如此,比如软件定义网络模型的数量也很多.但是在考虑部署软件定义网络(SDN)或者试点之前,首先需 ...

  5. 《SDN核心技术剖析和实战指南》第一章小结

    第一章主要是概况.新技术有一个特点是,每家都有不同的说法.这里我只说说我比较认同的部分. SDN的核心概念大概有两个:转发面与控制面分离.开发可编程化.书里还说逻辑上集中控制,其实这个就可以从转发与控 ...

  6. iptables防火墙详解(一)

    -- 防火墙 常见的防火墙 :瑞星 江民 诺顿 卡巴斯基 天网...... iptables firewalld http://www.netfilter.org/ netfilter / iptab ...

  7. ubuntu ufw防火墙软件的配置入门

    顺便,一条龙作完安全吧. ufw的使用,是比iptables简单.但只能作简单的事儿,更改简单的netfilter里的iptable里的记录.难点的,可能还是得iptables原生命令. 自打2.4版 ...

  8. SDN期末作业验收

    作业链接:https://edu.cnblogs.com/campus/fzu/SoftwareDefinedNetworking2017/homework/1585 负载均衡程序 1.github链 ...

  9. [转载]ubuntu防火墙设置

    原文地址:ubuntu防火墙设置作者:風飏    自打2.4版本以后的Linux内核中, 提供了一个非常优秀的防火墙工具.这个工具可以对出入服务的网络数据进行分割.过滤.转发等等细微的控制,进而实现诸 ...

随机推荐

  1. Log4j2 Jndi 漏洞原理解析、复盘

    " 2021-12-10一个值得所有研发纪念的日子." 一波操作猛如虎,下班到了凌晨2点25. 基础组件的重要性,在此次的Log4j2漏洞上反应的淋漓尽致,各种"核弹级漏 ...

  2. SpringCloud技术涵盖简介

    SpringCloud是微服务架构的集大成者,云计算最佳业务实践. 我们平常使用的Spring和他们的关系,对Spring,springboot , SpringCloud 的 概念区分,上图: Sp ...

  3. 查看MySQL正在执行的线程

    一.使用SQL语句查询正在执行的线程 SHOW PROCESSLIST; 二.使用kill 线程id就可以结束线程(引起数据变化的线程需特别小心) SHOW PROCESSLIST; +------+ ...

  4. Excel如何使用VLOOKUP函数多条件匹配查找数据

    一.对应源数据如sheet6所示,对应需查找的数据如sheet7所示 二.在sheet6中添加一列辅助列 三.在sheet7对应位置插入vlookup函数 四.最终结果如下图所示

  5. layout_weight属性分析

    最近写Demo,突然发现了Layout_weight这个属性,发现网上有很多关于这个属性的有意思的讨论,可是找了好多资料都没有找到一个能够说的清楚的,于是自己结合网上资料研究了一下,终于迎刃而解,写出 ...

  6. net start Mysql 启动服务时 ,显示"Mysql服务正在启动 Mysql服务无法启动 服务没有报告任何错误

    一.问题 有时候,输入net start Mysql 启动服务时 mysql>net start Mysql 显示 Mysql服务正在启动 Mysql服务无法启动 服务没有报告任何错误 二.原因 ...

  7. not_the_same_3dsctf_2016

    老样子查看程序开启的保护 可以看到程序是32位的程序开启了nx保护,把程序放入ida编译一下 shift+f12可以看到flag.txt,我们用ctrl+x跟随一下 看到程序,直接想到的就是通过溢出获 ...

  8. 【cs231n笔记】assignment1之KNN

    k-Nearest Neighbor (kNN) 练习 这篇博文是对cs231n课程assignment1的第一个问题KNN算法的完成,参考了一些网上的博客,不具有什么创造性,以个人学习笔记为目的发布 ...

  9. Django的Form表单验证

    Form(from django import forms) 简短理解:后端提供了一个类:from django import forms,继承此类定义子类.子类中定义和form表单中提交到name名 ...

  10. WinFrm中多线程操作窗体属性

    首先声明一个委托. delegate void SetTextCallback(string text); 然后再写一个事件. private void SetInfo(string text) { ...