在 BIND 命名 acl 中排除网络子集

在 BIND 命名 acl 中排除网络子集

我想从 acl 中排除一些 IP,例如:

acl "exclude" {
  192.168.1.1;
  192.168.1.2;
  192.168.1.3;
};

acl "internal" {
  192.168.1.0/24;
  !exclude;
};

这不起作用,我认为这是因为排除 acl 中包含的 IP 包含在整个范围内。

答案1

您必须在要排除的 IP 前添加“!”。如果您要从“排除”acl 中排除所有 IP,请将其更改为:

acl "exclude" {
  !192.168.1.1/24;
  !192.168.1.2/24;
  !192.168.1.3/24;
};

答案2

BIND ACL 使用“首次匹配”逻辑,而不是“最佳匹配”。您的“内部”ACL 无法按预期工作,因为第一的地址元素与您想要排除的所有地址匹配,然后是接下来的所有内容(即 !exclude; 元素)被忽略

您只需切换顺序即可,如下所示:

acl "internal" {
  !exclude;
  192.168.1.0/24;
};

这一问题在官方 BIND 9.11 管理员参考手册,第 7.1 节有关正确实施 ACL 的安全注意事项。

相关内容