介绍
熟悉防火墙的都知道,防火墙一般放在网关上,用来隔离子网之间的访问。因此,防火墙即服务(FireWall as a Service
)也是在网络节点上(具体说来是在路由器命名空间中)来实现。
目前,OpenStack
中实现防火墙还是基于 Linux
系统自带的 iptables
,所以大家对于其性能和功能就不要抱太大的期望了。
一个可能混淆的概念是安全组(Security Group
),安全组的对象是虚拟网卡,由L2 Agent
来实现,比如neutron_openvswitch_agent
和 neutron_linuxbridge_agent
,会在计算节点上通过配置 iptables
规则来限制虚拟网卡的进出访问。防火墙可以在安全组之前隔离外部过来的恶意流量,但是对于同个子网内部不同虚拟网卡间的通讯不能过滤(除非它要跨子网)。
可以同时部署防火墙和安全组实现双重防护。
架构
FWaaS
是通过在其所在 tenant
中的所有 Virtual Router
上添加 iptbales
规则来实现对进出数据网络的网络包进行控制的。
防火墙控制进出租户网络的网络包。对不经过 Virutal Router
的网络包不起作用
与安全组对比
这里需要说明的是 FWaas
和 Security Group
(安全组) 的区别。安全组规则在连接到一个实例的计算节点上的Linux
桥 qbr
上实施,FWaaS
创建的防火墙规则在租户网络边缘实现的虚拟路由器上实施。 FWaaS
并不旨在取代安全组的功能,并且它提供更为补充安全组,特别是在其当前实现状态下。 FWaaS
目前缺乏安全组提供的一些功能,包括无法指定通信的方向等。与此相反,安全组,也因为他们缺乏创建特定规则拒绝所有流量的能力,因此需要 FWaas
作为补充
部署
kolla-ansible
剧本 global.yml
文件中打开 enable_neutron_fwaas
开关,并 reconfigure
即可
v1 vs v2
FWaaS
有 v1
和 v2
两个版本,v1
的防火墙规则针对租户所有路由器的所有端口,而 v2
的粒度更小,可以针对路由器上指定端口设置规则
horizon
目前并不支持 FWaaS v2
,虽然页面上可以显示防火墙规则以及一些信息,但是并不能绑定端口,绑定端口会报错:
而新版 kolla-ansible
只支持部署 v2
版本,v1
版本的支持已经移除,详见:https://review.opendev.org/#/c/668403/
使用
安装包
pip3 install python-openstackclient python-neutronclient
安装完之后,openstack firewall group
命令就是用来操作防火墙的
首次启用防火墙,会自动创建一个防火墙组,包含 ingress
策略和 exgress
策略,默认 ingress
策略是拒绝所有流量,默认 exgress
策略是放通所有流量
也就是默认创建的防火墙组会拒绝所有的入口流量,而放通所有的出口流量
之后我们通过给防火墙组配置端口,来实现将这些规则应用到路由器具体端口上,默认是没有指定任何端口的
openstack firewall group set --port <端口id> <防火墙组id>
openstack firewall group set --port dd0cd411-8cf3-4b3f-b9a1-c544526beaff fdcf8ccf-250e-4b69-a705-fe382ea65e83
但是上面命令会报错:Failed to set firewall group 'fdcf8ccf-250e-4b69-a705-fe382ea65e83': Port dd0cd411-8cf3-4b3f-b9a1-c544526beaff is not supported by firewall driver 'fwaas_db'.
查看neutron
日志:WARNING neutron_fwaas.services.firewall.service_drivers.agents.agents [req-8576c62d-0a6c-4a93-a2db-5228cfc2162e ec021436d81947aba552149b2255e137 7ed34d8be3ec41b7a29c2f9f64713486 - default default] Doesn't support hybrid port at the moment
发现是 FWaaS v2
并不支持 hybrid port
(混杂模式端口)
最后找到官方仓库,发现因为 FWaaS
项目缺少维护者,已经被弃用,并且从 openstack U
版开始移除该功能