本文主要介绍Openstack的安全组在规则及其在ovs的流表中的体现。
实验基于openstack的stein版本,devstack安装,采用了ovs作为虚拟交换机。描述Openflow在Openstack安全组中的应用分析。实验环境以Ubuntu 18.04.3 LTS搭建
Openstack安全组
1. 安全组
在Openstack中,安全组是做哦那个在neutron port上的一组策略,这些策略可以理解为一些防火墙的规则集合。
2. 安全组的实现
Openstack中的安全组的实现有以下集中:
- ovs + iptables + connection track
- ovs + openflow + connection track
- linuxbridge + iptables + connection track
由于本文实验环境基于devstack(stein),因此,仅基于第二种情况进行说明
实验准备
1. 创建项目及用户(非必须)
创建一个test的project和user
1 | $ openstack project create --domain default --description "Security Group Test Project" test |
2. 查看test租户的默认安全组下的规则
以test用户登陆openstack的dashboard,在网络 > 安全组 下找到default安全组,查看对应的规则
安全组实验
需要事先创建一个虚拟机示例,默认关联default的安全组
0. 获取一些信息
- 端口ID
1 | $ openstack port list |
创建了一个ID为41ca5359-2edc-4d74-8321-5883ecb618c5
的port,分配IP地址为192.168.233.49
- 接口名称
1 | $ ovs-vsctl show |
对应的创建了一个tap41ca5359-2e
的接口
1. 创建一条ingress的规则
通过Dashboard在default的安全组下创建一条ingress的规则,remote-ip为199.0.0.0/24,协议为tcp,目的端口为80
- 查看br-int流表
br-int下的流表非常的多,可以使用过滤规则进行匹配
1 | $ ovs-ofctl dump-flows br-int | grep 199.0.0.0 |
可以看到,共新增了两条流表
3. 创建一条egress的规则
同样以remote-ip为199.0.0.0/24,协议为tcp,目的端口为80的参数创建egress规则
查看流表看到新增了如下两条:
1 | cookie=0xd9177c011dbdf439, duration=19.261s, table=72, n_packets=0, n_bytes=0, idle_age=19, priority=77,ct_state=+est-rel-rpl,tcp,reg5=0xe,nw_dst=199.0.0.0/24,tp_dst=80 actions=resubmit(,73) |
4. 流表解读
4.1 ingress
- stpe2中的流表,分别指定了
tcp
协议,nw_src
为199.0.0.0/24
,tp_dst
为80
- step2的action,第一条为直接从14的接口送出,第二条为重定向到了92
先来看看ID为14的接口是哪个?不出所料,自然是tap41ca5359-2e
的接口
1 | $ ovs-ofctl show br-int |
- table 92
丢弃
1 | cookie=0xd9177c011dbdf439, duration=3197934.551s, table=92, n_packets=0, n_bytes=0, priority=0 actions=drop |
以上可看到,源地址为199.0.0.0/24
,目的端口为80
的TCP
报文大多数情况将送往tap41ca5359-2e
的接口
4.2 egress
- step3中的流表,则分别指定了
tcp
协议,nw_dst
为199.0.0.0/24
,tp_dst
为80
- step3的action则送往了73的table,而73则非常复杂,又涉及到了81,91,94的table
1 | cookie=0xd9177c011dbdf439, duration=1305.051s, table=73, n_packets=10, n_bytes=1345, priority=100,reg6=0x3,dl_dst=fa:16:3e:fa:fd:13 actions=load:0xe->NXM_NX_REG5[],resubmit(,81) |
- table 91
重定向到了94
1 | cookie=0xd9177c011dbdf439, duration=3197934.561s, table=91, n_packets=10, n_bytes=876, priority=1 actions=resubmit(,94) |
- table 94
正常转发
1 | cookie=0xd9177c011dbdf439, duration=3197934.572s, table=94, n_packets=49280, n_bytes=5803120, priority=1 actions=NORMAL |
- table 81
送往
tap41ca5359-2e
的接口
1 | cookie=0xd9177c011dbdf439, duration=1305.051s, table=81, n_packets=3, n_bytes=126, priority=100,arp,reg5=0xe actions=output:"tap41ca5359-2e" |
由上可看到,送往199.0.0.0/24
,目的端口为80
的TCP
报文大多数情况将正常转发出去