作者:Jamie Norrish
设置配置选项以减少出现问题的可能性。
您可以采取一些简单的步骤,这些步骤既可以提高服务器的安全性,又可以潜在地减少服务器的负载。这里介绍的材料仅仅是一个起点;如果您担心安全性(您应该担心),请查阅网络上的其他资源(请参阅最后一章)。
以下配置指令出现在 named.conf
文件中。如果指令出现在文件的 options
部分,则它适用于该文件中列出的所有区域。如果它出现在 zone
条目中,则它仅适用于该区域。zone
条目会覆盖 options
条目。
为了使您的辅助服务器能够回答关于您域的查询,它们必须能够从您的主服务器传输区域信息。很少有其他人需要这样做。因此,请使用 allow-transfer
选项限制区域传送,假设 192.168.1.4 是 ns.friend.bogus 的 IP 地址,并为了调试目的添加您自己。
zone "linux.bogus" { allow-transfer { 192.168.1.4; localhost; }; };
通过限制区域传送,您可以确保人们能够获得的唯一信息是他们直接请求的信息 - 没有人可以直接索取关于您设置的所有详细信息。
首先,禁用对您不拥有的域的所有查询,但来自您的内部/本地计算机的查询除外。这不仅有助于防止恶意使用您的 DNS 服务器,还可以减少服务器的不必要使用。
options { allow-query { 192.168.196.0/24; localhost; }; }; zone "linux.bogus" { allow-query { any; }; }; zone "196.168.192.in-addr.arpa" { allow-query { any; }; };
此外,禁用递归查询,但来自内部/本地源的查询除外。这降低了缓存中毒攻击的风险(在这种攻击中,虚假数据被馈送到您的服务器)。
options { allow-recursion { 192.168.196.0/24; localhost; }; };
最好以非 root 用户身份运行 named,这样,如果它被入侵,攻击者获得的权限将尽可能受到限制。您首先必须创建一个用户供 named 在其下运行,然后修改您使用的任何启动 named 的 init 脚本。使用 -u 和 -g 标志将新用户名和组传递给 named。
例如,在 Debian GNU/Linux 2.2 中,您可能会修改您的 /etc/init.d/bind
脚本以包含以下行(其中已创建用户 named
)
start-stop-daemon --start --quiet --exec /usr/sbin/named -- -u named
Red Hat 和其他发行版也可以这样做。
Dave Lugo 描述了一个安全的双 chroot 设置 http://www.etherboy.com/dns/chrootdns.html,您可能会觉得阅读它很有趣,它可以使您运行 named 的主机更加安全。