1.5. 编写 BIND ACL
控制 BIND 的某些功能的访问可以防止未经授权的访问和攻击,如拒绝服务 (DoS)。BIND 访问控制列表 (acl
) 语句是 IP 地址和范围的列表。每个 ACL 都有一个别名,您可以在几个语句中使用,如 allow-query
来引用指定的 IP 地址和范围。
BIND 仅在 ACL 中使用第一个匹配条目。例如,如果您定义了 ACL { 192.0.2/24; !192.0.2.1; }
以及带有 192.0.2.1
IP 地址的主机的连接,即使第二个条目排除这个地址,也会授予访问权限。
BIND 有以下内置 ACL:
-
none
:不匹配主机。 -
any
: 匹配所有主机。 -
localhost
:匹配回环地址127.0.0.1
和::1
,以及服务器上运行 BIND 的服务器上的所有接口的 IP 地址。 -
localnets
:匹配回环地址127.0.0.1
和::1
,以及运行 BIND 的服务器都直接连接到的所有子网。
前提条件
- 已配置了 BIND,例如作为缓存名称服务器。
-
named
或named-chroot
服务正在运行。
流程
编辑
/etc/named.conf
文件并进行以下更改:将
acl
语句添加到文件中。例如,要为127.0.0.1
、192.0.2.0/24
和2001:db8:1::/64
创建名为internal-networks
的 ACL,请输入:acl internal-networks { 127.0.0.1; 192.0.2.0/24; 2001:db8:1::/64; }; acl dmz-networks { 198.51.100.0/24; 2001:db8:2::/64; };
在支持它们的声明中使用 ACL 的别名,例如:
allow-query { internal-networks; dmz-networks; }; allow-recursion { internal-networks; };
验证
/etc/named.conf
文件的语法:# named-checkconf
如果命令没有显示输出,则语法为正确的。
重新载入 BIND:
# systemctl reload named
如果在 change-root 环境中运行 BIND,请使用
systemctl reload named-chroot
命令来重新加载该服务。
验证
执行操作,以触发使用配置的 ACL 的功能。例如,此流程中的 ACL 只允许来自定义的 IP 地址的递归查询。在这种情况下,在不属于 ACL 定义的主机上输入以下命令来尝试解析外部域:
# dig +short @192.0.2.1 www.example.com
如果命令没有返回任何输出,BIND 拒绝访问,且 ACL 可以正常工作。有关客户端的详细输出,请使用不带
+short
选项的命令:# dig @192.0.2.1 www.example.com ... ;; WARNING: recursion requested but not available ...
其他资源
-
BIND Administrator Reference Manual 中的
Access control lists
部分。