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. 为什么volatile能保证有序性不能保证原子性

    对于内存模型的三大特性:有序性.原子性.可见性. 大家都知道volatile能保证可见性和有序性但是不能保证原子性,但是为什么呢? 一.原子性.有序性.可见性 1.原子性: (1)原子的意思代表着-- ...

  2. 面渣逆袭:Java集合连环三十问

    大家好,我是老三.上期发布了一篇:面渣逆袭:HashMap追魂二十三问,反响很好! 围观群众纷纷表示 不写,是不可能不写的,只有卷才能维持了生活这样子. 当然,我写的这一系列,不是背诵版,是理解版,很 ...

  3. Mysql主从复制参数详解

    目录 一.简介 二.例子 同步 修改 三.参数 一.简介 change master to配置和改变slave服务器用于连接master服务器的参数,以便slave服务器读取master服务器的bin ...

  4. NepCTF pwn writeup

    上周抽时间打了nepnep举办的CTF比赛,pwn题目出的挺不错的,适合我这种只会一点点选手做,都可以学到新东西. [签到] 送你一朵小红花 64位程序,保护全开. 程序会在buf[2]处留下一个da ...

  5. C语言程序设计:模拟简单运算器的工作

    目录 C语言程序设计:模拟简单运算器的工作 1.题目 2.分析 3.代码实现 4.结尾 C语言程序设计:模拟简单运算器的工作 1.题目 ​ 模拟简单运算器的工作,输入一个算式(没有空格),遇等号&qu ...

  6. manjaro(arch系)Linux使用(一)

    # manjaro的使用 ## 配置源 先切换国内的镜像源仓库 `sudo pacman-mirrors -i -c China -m rank` 在弹出的窗口中选择延迟最小的源 ### 添加arch ...

  7. Django记录操作日志、LogEntry的使用

    LogEntry是在后台开发中经常用到的模块,它在admin是默认开启的. 可以使用LogEntry模块记录所有用户的操作记录.一方面可以用来监督,另一方面可以用来做回滚. 1. 使用LogEntry ...

  8. CF1036A Function Height 题解

    Content 给定一个坐标系,在它的 \(x\) 轴上有 \(2n+1\) 个点 \(P_0,P_1,P_2,...,P_{2n}\),其中对于 \(0\leqslant i\leqslant 2n ...

  9. CF1514A Perfectly Imperfect Array 题解

    Content 给定一个长度为 \(n\) 的序列,问是否存在一个非空子序列,使得这个子序列所有元素的积不是完全平方数. 数据范围:\(t\) 组数据,\(1\leqslant t\leqslant ...

  10. lvm 扩容

    总体思路: 逻辑卷要扩容,先扩容对应卷组, 扩容卷组的方式: 添加新的物理卷(磁盘已有分区,扩容后新建分区:或者新加了一块硬盘创建了新的物理卷),vgextend myvg /dev/vdb 扩容,/ ...