OSSN/OSSN-0029
Neutron FWaaS 规则在使用协议 'any' 时缺少端口限制
总结
实验性的 Neutron FWaaS(防火墙即服务)扩展中的一个错误导致生成的 iptables 规则未能反映所需的端口限制。当指定除 'udp' 或 'tcp' 之外的协议(例如 'any')时,会触发此行为。
此错误的范围仅限于实验性的 Neutron FWaaS 扩展及其构建的系统。它不会影响受支持的核心 Neutron 功能。安全组不受影响。
受影响的服务 / 软件
Neutron FWaaS, Grizzly, Havana, Icehouse
讨论
在使用 Neutron 定义防火墙规则以匹配多个协议时,指定协议为 'any' 代替定义多个特定规则会更加方便。
例如,为了允许 DNS (TCP 和 UDP) 请求,可以定义以下规则
neutron firewall-rule-create --protocol any --destination-port 53 --action allow
但是,此规则导致生成 iptables 防火墙规则,这些规则未能反映所需的端口限制。生成的 iptables 规则示例可能如下所示
-A neutron-l3-agent-iv441c58eb2 -j ACCEPT
请注意,缺少端口 53 的限制。因此,生成的规则将匹配并接受属于其规则链的任何正在处理的流量。
此外,iptables 将规则集排列成链,并逐个处理进入链的数据包。规则匹配在第一个匹配的退出条件(例如 accept 或 drop)处停止。由于上述生成的规则将匹配并接受所有数据包,因此它将有效地短路链中较低的任何过滤规则。因此,这可能会破坏其他防火墙规则,无论使用 Neutron 定义这些规则时指定的协议如何。它们只需要出现在生成的 iptables 规则链中稍后即可。
当与源或目标端口号一起指定任何非 'tcp' 或 'udp' 协议时,会触发此错误。
建议的操作
Neutron FWaaS 扩展当前是实验性的,此时不应在生产环境中使用。如果您正在使用它,则应避免在指定 Neutron FWaaS 规则的协议时使用 'any'。相反,为 'tcp' 和 'udp' 协议分别创建多个规则。
此问题已在 OpenStack 的 Juno 版本中修复。
联系方式 / 参考文献
- 作者:Tim Kelsey, HP
- 此 OSSN:https://wiki.openstack.org/wiki/OSSN/OSSN-0029
- 原始 LaunchPad Bug:https://bugs.launchpad.net/neutron/+bug/1365961
- OpenStack Security ML:openstack-security@lists.openstack.org
- OpenStack Security Group:https://launchpad.net/~openstack-ossg