防火墙功能
yy 编写
1.需要的软件
RYU+Mininet+OVS,当然也可以使用其他的控制器。
RYU:主要是启动防火墙功能,我们直接使用默认的RYU的rest_firewall.py就行
Mininet:主要是拓扑构建以及一些设置,撰写python代码构建拓扑以及配置相关
2.拓扑的搭建
2.1.mininet命令搭建拓扑
2.2.python搭建拓扑
三个函数
增加主机:
addHost('hostname')
增加交换机:
addSwitch('switchname')
增加链路:
扫描二维码关注公众号,回复:
17245099 查看本文章
addLink(node1,node2,node1_port,node2_port)
示例python代码:
from mininet.topo import Topo
class MyTopo(Topo):
def __init__(self):
# initilaize topology
Topo.__init__(self)
# add hosts and switches
host1 = self.addHost('h1')
host2 = self.addHost('h2')
host3 = self.addHost('h3')
host4 = self.addHost('h4')
switch1 = self.addSwitch('s1')
switch2 = self.addSwitch('s2')
# add links
self.addLink(host1, switch1, 1, 1)
self.addLink(host2, switch1, 1, 2)
self.addLink(host3, switch2, 1, 1)
self.addLink(host4, switch2, 1, 2)
topos = {'mytopo': (lambda: MyTopo())}
在对应文件的目录下执行
sudo mn --custom mininet_topo.py --topo mytopo
2.3可视化搭建拓扑
注意:不推荐使用
使用命令:运行mininet/examples下的miniedit.py
注意:可能会遇到报错
因为mininet运行需要python2和python3的支持,所以需要软连接一下,让mininet两个python环境都可以使用。
3.Ryu防火墙设置
3.1启用网络拓扑
命令:sudo mn --custom mininet_topo.py --topo mytopo
3.2设置openflow13
作用:主要是查看各个交换机上的流表
命令:sudo ovs-vsctl set Bridge s1 protocols=OpenFlow13
3.3启动防火墙
命令:ryu-manager rest_firewall.py
注意到:ryu-manager这个命令可以同时启用多个py文件
可以看到,ryu已经获取了拓扑中的各个交换机,每个交换机的编号是16位数字
3.4如何配置防火墙
3.4.1交换机状态查询
Ubuntu中在浏览器输入:http://localhost:8080/firewall/module/status
初始状态都是disable的
开启交换机enable的
命令:curl -X PUT http://localhost:8080/firewall/module/enable/0000000000000001
设置一些特殊的报文可以通过交换机
命令:curl -X POST -d '{"nw_src": "10.0.0.2", "nw_dst": "10.0.0.1", "nw_proto": "ICMP"}' http://127.0.0.1:8080/firewall/rules/0000000000000001
3.4.2在python代码中设置防火墙的状态
import requests
data = '{"nw_src": "10.0.0.2", "nw_dst": "10.0.0.1", "nw_proto": "ICMP"}'
response = requests.post('http://127.0.0.1:8080/firewall/rules/0000000000000001', data=data)
允许IP包进行通信
命令:
curl -X POST -d ’{"nw_src": "10.0.0.2/32", "nw_dst": "10.0.0.3/32"}’
查看交换机的流表规则
sudo ovs-ofctl -O openflow13 dump-flows s1
阻塞数据包
命令:curl -X POST -d ’{"nw_src": "10.0.0.3/32", "nw_dst": "10.0.0.2/32", "nw_proto": "ICMP", "actions": "DENY", "priority": "10"}’
3.4.3查看已经下发的规则
命令:curl http://localhost:8080/firewall/rules/0000000000000001
3.4.4删除已经设定的规则
curl -X DELETE -d ’{"rule_id": "5"}’ http://localhost:8080/firewall/rules
/0000000000000001