如何配置网络 ACL¶
注意
网络 ACL 可用于OVN NIC 类型、OVN 网络和桥接网络(有一些例外情况,请参阅桥接限制)。
网络ACL定义流量规则,允许控制连接到同一网络的不同实例之间的网络访问,以及与其他网络之间 的访问。
网络 ACL 可以直接分配给实例的NIC或网络。当分配给网络时,ACL 应用于连接到该网络的所有 NIC。
应用了特定 ACL(显式或通过网络隐式)的实例 NIC 构成一个逻辑组,可以从其他规则中将其作为源或目标进行引用。有关详细信息,请参阅ACL 组。
创建 ACL¶
使用以下命令创建 ACL
incus network acl create <ACL_name> [configuration_options...]
此命令创建了一个没有规则的 ACL。下一步,向 ACL 添加规则。
有效的网络 ACL 名称必须遵守以下规则
名称必须在 1 到 63 个字符之间。
名称必须仅由 ASCII 表中的字母、数字和连字符组成。
名称不能以数字或连字符开头。
名称不能以连字符结尾。
ACL 属性¶
ACL 具有以下属性
属性 |
类型 |
必需 |
描述 |
---|---|---|---|
|
字符串 |
是 |
项目中网络 ACL 的唯一名称 |
|
字符串 |
否 |
网络 ACL 的描述 |
|
规则列表 |
否 |
入站流量规则 |
|
规则列表 |
否 |
规则列表 |
|
字符串集 |
否 |
配置选项作为键/值对(仅支持 |
添加或删除规则¶
每个 ACL 包含两个规则列表
入站规则适用于进入 NIC 的入站流量。
出站规则适用于离开 NIC 的出站流量。
要向 ACL 添加规则,请使用以下命令,其中<direction>
可以是ingress
或egress
incus network acl rule add <ACL_name> <direction> [properties...]
此命令将规则添加到指定方向的列表中。
您无法编辑规则(除非您编辑完整的 ACL),但您可以使用以下命令删除规则
incus network acl rule remove <ACL_name> <direction> [properties...]
您必须指定唯一标识规则所需的所有属性,或者向命令添加--force
以删除所有匹配的规则。
规则排序和优先级¶
规则作为列表提供。但是,列表中规则的顺序并不重要,也不会影响过滤。
Incus 根据action
属性自动对规则进行排序,如下所示
drop
reject
allow
任何不匹配流量的自动默认操作(默认为
reject
,请参阅配置默认操作)。
这意味着,当您将多个 ACL 应用于 NIC 时,无需指定组合规则排序。如果 ACL 中的其中一条规则匹配,则执行该规则的操作,并且不再考虑其他规则。
规则属性¶
ACL 规则具有以下属性
属性 |
类型 |
必需 |
描述 |
---|---|---|---|
|
字符串 |
是 |
对匹配流量采取的操作( |
|
字符串 |
是 |
规则的状态( |
|
字符串 |
否 |
规则的描述 |
|
字符串 |
否 |
CIDR 或 IP 范围的逗号分隔列表、源主体名称选择器(对于入站规则)或空表示任何 |
|
字符串 |
否 |
CIDR 或 IP 范围的逗号分隔列表、目标主体名称选择器(对于出站规则)或空表示任何 |
|
字符串 |
否 |
要匹配的协议( |
|
字符串 |
否 |
如果协议是 |
|
字符串 |
否 |
如果协议是 |
|
字符串 |
否 |
如果协议是 |
|
字符串 |
否 |
如果协议是 |
在规则中使用选择器¶
source
字段(用于入站规则)和 destination
字段(用于出站规则)支持使用选择器而不是 CIDR 或 IP 范围。
使用此方法,您可以使用 ACL 组或网络选择器为实例组定义规则,而无需维护 IP 列表或创建额外的子网。
ACL 组¶
分配特定 ACL(显式或通过网络隐式)的实例网卡构成一个逻辑端口组。
此类 ACL 组称为“主体名称选择器”,它们可以在其他 ACL 组中使用 ACL 的名称进行引用。
例如,如果您有一个名为 foo
的 ACL,您可以使用 source=foo
指定分配此 ACL 的实例网卡组作为源。
网络选择器¶
您可以使用“网络主体选择器”根据流量来源或目标网络定义规则。
有两个特殊的网络主体选择器,称为 @internal
和 @external
。它们分别表示网络本地流量和外部流量。例如
source=@internal
如果您的网络支持网络对等体,则可以使用格式为 @<network_name>/<peer_name>
的网络主体选择器引用对等连接的流量。例如
source=@ovn1/mypeer
使用网络主体选择器时,应用 ACL 的网络必须具有指定的对等连接。否则,无法将 ACL 应用于它。
日志流量¶
通常,ACL 规则旨在控制实例和网络之间的网络流量。但是,您也可以使用它们来记录特定的网络流量,这对于监控或在实际启用规则之前测试规则很有用。
要添加记录规则,请使用 state=logged
属性创建它。然后,您可以使用以下命令显示 ACL 中所有记录规则的日志输出
incus network acl show-log <ACL_name>
编辑 ACL¶
使用以下命令编辑 ACL
incus network acl edit <ACL_name>
此命令以 YAML 格式打开 ACL 进行编辑。您可以编辑 ACL 配置和规则。
分配 ACL¶
配置 ACL 后,必须将其分配给网络或实例网卡。
为此,请将其添加到网络或网卡配置的 security.acls
列表中。对于网络,请使用以下命令
incus network set <network_name> security.acls="<ACL_name>"
对于实例网卡,请使用以下命令
incus config device set <instance_name> <device_name> security.acls="<ACL_name>"
配置默认操作¶
当一个或多个 ACL 应用于网卡(显式或通过网络隐式)时,会向网卡添加一个默认拒绝规则。此规则拒绝与应用 ACL 中任何规则都不匹配的所有流量。
您可以使用网络和网卡级别的 security.acls.default.ingress.action
和 security.acls.default.egress.action
设置更改此行为。网卡级别设置会覆盖网络级别设置。
例如,要将所有连接到网络的实例的入站流量的默认操作设置为 allow
,请使用以下命令
incus network set <network_name> security.acls.default.ingress.action=allow
要为实例网卡配置相同的默认操作,请使用以下命令
incus config device set <instance_name> <device_name> security.acls.default.ingress.action=allow
桥接限制¶
在桥接网络中使用网络 ACL 时,请注意以下限制
与 OVN ACL 不同,桥接 ACL 仅应用于桥接和 Incus 主机之间的边界。这意味着它们只能用于为进出外部网络的流量应用网络策略。它们不能用于创建
桥接内部 防火墙,因此防火墙控制连接到同一桥接的实例之间的流量。ACL 组和网络选择器 不受支持。
使用
iptables
防火墙驱动程序时,不能使用 IP 范围主体(例如,192.0.2.1-192.0.2.10
)。基线网络服务规则在 ACL 规则之前添加(在其各自的 INPUT/OUTPUT 链中),因为一旦跳转到 ACL 链,我们就无法区分 INPUT/OUTPUT 和 FORWARD 流量。因此,ACL 规则不能用于阻止基线服务规则。