端口关联的防火墙组排序

https://bugs.launchpad.net/neutron/+bug/1979816

目前,数据包有时会被通过,有时会被阻止,具体取决于应用于端口的组的排序。这与现有的 FWaaS 规范相反,该规范指出,只要端口上的任何组允许该数据包,该数据包就会被允许。

问题描述

当多个防火墙组应用于端口时,组的评估顺序每当其中一个组被修改时都可能发生变化。因此,多个防火墙组产生的组合防火墙规则集会无意中被重新排列。这可能导致某些流量被允许或拒绝,而原本应该相反的行为。

提议的变更

类似于 firewall_policy_rule_associations_v2firewall_group_port_associations_v2 表应该有一个必需的 position 列,以维护将 firewall groups 应用到端口的顺序。

此外,应该限制对这种排序的修改权限,例如,OpenStack 管理员可能希望某个组始终首先或最后应用,而不管租户添加到端口的组如何。在 iptables 中,这通常被称为 HEADTAIL 规则。所有 HEAD 组应该首先应用,按顺序。所有 TAIL 组应该最后应用,按顺序。所有其他组将按顺序应用在两者之间。默认情况下,只有具有 admin 角色的 OpenStack 用户才能访问 HEADTAIL 层。

例如:

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 影响

PUTPOST 类型用于 /v2.0/fw/firewall_groups 将更新以支持添加 positiontier

  1. 响应体应包含新的字段。

    # 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"
        }
    ]
}

数据模型影响

positiontier 将添加到 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