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. C#获取Windows10屏幕的缩放比例

    现在1920x1080以上分辨率的高分屏电脑渐渐普及了.我们会在Windows的显示设置里看到缩放比例的设置.在Windows桌面客户端的开发中,有时会想要精确计算窗口的面积或位置.然而在默认情况下, ...

  2. Service Worker的应用

    Service Worker的应用 Service worker本质上充当Web应用程序.浏览器与网络(可用时)之间的代理服务器,这个API旨在创建有效的离线体验,它会拦截网络请求并根据网络是否可用来 ...

  3. Jenkins 关闭和重启的实现方式

    关闭jenkins 只需要在访问jenkins服务器的网址url地址后加上exit.例如我jenkins的地址http://localhost:8080/ , 那么我只需要在浏览器地址栏上敲下 htt ...

  4. STL 较详尽总结

    STL就是Standard Template Library,标准模板库.这可能是一个历史上最令人兴奋的工具的最无聊的术语.从根本上说,STL是一些"容器"的集合,这些" ...

  5. mysql--求中位数

    第一种求中位数方法: /* 第一步:添加一个正序和反序 第二步:当列表数目为奇数的时候,列表选出的情况,当列表为偶数的时候列表的情况 第三步:统筹奇数和偶数时中位数 */ select sum(Mat ...

  6. java中栈,堆,方法区

    最近在看面试题复习javaee,所以在这里对栈,堆,方法区做一下整理 参考了https://www.cnblogs.com/hqji/p/6582365.html 1.栈 每个线程包含一个栈区,栈中只 ...

  7. 洛谷 11 月月赛 I Div.2 A [Kubic] Addition 题解

    Content 你有一个长度为 \(n\) 的序列 \(a\).你可以执行 \(n-1\) 次操作,每次操作中你可以选择一个位置 \(i\),并删除 \(a_i\) 和 \(a_{i+1}\),再在原 ...

  8. CF1154A Restoring Three Numbers 题解

    Content 已知有三个正整数 \(a,b,c\),现在给出 \(a+b,a+c,b+c,a+b+c\)(不保证有序)的值,试求出 \(a,b,c\). 数据范围:\(2\leqslant a+b, ...

  9. 大学MOOC课程视频下载、流文件合并、批量重命名、b站视频下载及学习课程视频推荐

    计算机行业技术更新快,编程语言种类多,在当今大数据和人工智能的时代,为了能在相关领域有所成就,就必须掌握好python.R等语言,较好的数学基础和深入的行业背景知识.计算机从业人员务必践行" ...

  10. flexpaper上传带中文名字的文档,在页面显示若出现404错误时,请在server.xml文件中进行编码utf-8

    flexpaper上传带中文名字的文档,在页面显示若出现404错误时,请在server.xml文件中进行编码utf-8