跳转到: 导航, 搜索

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 版本中修复。

联系方式 / 参考文献