端口关联的防火墙组排序¶
https://bugs.launchpad.net/neutron/+bug/1979816
目前,数据包有时会被通过,有时会被阻止,具体取决于应用于端口的组的排序。这与现有的 FWaaS 规范相反,该规范指出,只要端口上的任何组允许该数据包,该数据包就会被允许。
问题描述¶
当多个防火墙组应用于端口时,组的评估顺序每当其中一个组被修改时都可能发生变化。因此,多个防火墙组产生的组合防火墙规则集会无意中被重新排列。这可能导致某些流量被允许或拒绝,而原本应该相反的行为。
提议的变更¶
类似于 firewall_policy_rule_associations_v2,firewall_group_port_associations_v2 表应该有一个必需的 position 列,以维护将 firewall groups 应用到端口的顺序。
此外,应该限制对这种排序的修改权限,例如,OpenStack 管理员可能希望某个组始终首先或最后应用,而不管租户添加到端口的组如何。在 iptables 中,这通常被称为 HEAD 和 TAIL 规则。所有 HEAD 组应该首先应用,按顺序。所有 TAIL 组应该最后应用,按顺序。所有其他组将按顺序应用在两者之间。默认情况下,只有具有 admin 角色的 OpenStack 用户才能访问 HEAD 和 TAIL 层。
例如:
firewall_group_id |
port_id |
position |
tier |
da4be831-907b-43d9-86e0-b14a3bd391fc |
efb7d60e-d3fc-4f97-91ed-ca71d930bb7c |
1 |
HEAD |
0814e179-d2be-464a-a9d4-e13c94451532 |
efb7d60e-d3fc-4f97-91ed-ca71d930bb7c |
2 |
HEAD |
33ce9937-d9db-48b8-a65d-05fa3a75844a |
efb7d60e-d3fc-4f97-91ed-ca71d930bb7c |
1 |
null |
6b3172af-9ae0-40e4-b455-c70de7c80c24 |
efb7d60e-d3fc-4f97-91ed-ca71d930bb7c |
2 |
null |
70a7087e-c6ae-4cef-9b30-35e702746b68 |
efb7d60e-d3fc-4f97-91ed-ca71d930bb7c |
1 |
TAIL |
ff1e5eda-c285-4ec2-80f8-49f1a6d77347 |
efb7d60e-d3fc-4f97-91ed-ca71d930bb7c |
2 |
TAIL |
Position 应该自动递增,如果未指定 position 关键字。如果指定了 position 关键字,并且该数字可用,则使用该数字。如果该数字已被使用,则现有组将从该点向下移动,并将新组应用于其位置。例如,如果位置 1-5 正在使用中,并且添加了位置 2,则表将更新如下
position |
新位置 |
1 |
1 |
2 |
新组 (2) |
2 |
3 |
3 |
4 |
4 |
5 |
5 |
6 |
REST API 影响¶
PUT 和 POST 类型用于 /v2.0/fw/firewall_groups 将更新以支持添加 position 和 tier。
响应体应包含新的字段。
# Create (POST) { "firewall_rule": { "ports":[ "8722e0e0-9cc9-4490-9660-8c9a5732fbb0" ], "name": "FW_GROUP_1", "position": 2, "tier": "HEAD" } } # Update (PUT) { "firewall_rule": { "ports":[ "8722e0e0-9cc9-4490-9660-8c9a5732fbb0" ], "name": "FW_GROUP_1", "position": 3, "tier": "TAIL" } }
2. GET 请求,无论是列表方法还是 show 方法,都应在响应中包含新的值。
# List/Show (GET) Response { "firewall_groups": [ { "description": "", "ingress_firewall_policy_id": null, "egress_firewall_policy_id": null, "id": "8722e0e0-9cc9-4490-9660-8c9a5732fbb0", "name": "FW_GROUP_1", "project_id": "45977fa2dbd7482098dd68d0d8970117", "ports":[ "8722e0e0-9cc9-4490-9660-8c9a5732fbb0" ], "position": 3, "tier": "TAIL" } ] }
数据模型影响¶
position 和 tier 将添加到 firewall_group_port_associations_v2 表中。
现有条目应被分配连续的 position 数字,从 1 开始,默认 tier 值为 null。
防火墙组端口关联
属性 |
类型 |
必需 |
CRUD |
描述 |
position |
integer |
是 |
CRU |
评估此防火墙组的位置 |
tier |
字符串 |
是 |
CRU |
此防火墙组存在的层级 (HEAD, TAIL, null) 默认值:null |
参考资料¶
https://etherpad.opendev.org/p/fwaas-api-evolution-spec https://specs.openstack.org/openstack/neutron-specs/specs/newton/fwaas-api-2.0.html