openstack FWaaS 防火墙项目因缺少维护者被弃用
介绍
熟悉防火墙的都知道,防火墙一般放在网关上,用来隔离子网之间的访问。因此,防火墙即服务(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 版本的支持已经移除,详见:
使用
安装包
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] Doesnt support hybrid port at the moment
发现是 FWaaS v2 并不支持 hybrid port (混杂模式端口) 最后找到官方仓库,发现因为 FWaaS 项目缺少维护者,已经被弃用,并且从 openstack U 版开始移除该功能
详情: