1.4. 编写 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,例如作为缓存名称服务器。
  • namednamed-chroot 服务正在运行。

流程

  1. 编辑 /etc/named.conf 文件并进行以下更改:

    1. acl 语句添加到文件中。例如,要为 127.0.0.1192.0.2.0/242001: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; };
    2. 在支持它们的声明中使用 ACL 的别名,例如:

      allow-query { internal-networks; dmz-networks; };
      allow-recursion { internal-networks; };
  2. 验证 /etc/named.conf 文件的语法:

    # named-checkconf

    如果命令没有显示输出,则语法为正确的。

  3. 重新载入 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
    ...