FreeBSD 5.3 将 BIND9 DNS 服务软件引入了发行包。 与此同时, 这带来了新的安全特性, 文件布局, 以及自动的 chroot(8) 配置。 这一节包含两部分, 第一部分讨论了新特性以及如何配置它们, 而后一部分则介绍了升级的步骤, 它将帮您顺利地迁移到 FreeBSD 5.3。 从此开始, 服务器将被简写为 named(8) 而不是 BIND。 这一节跳过了前一节中所介绍的术语以及一些理论上的讨论, 因此, 建议您阅读前一节然后再看这一节。
named 的配置文件目前存放在 /var/named/etc/namedb/, 在使用前需要进行一些修改。 这也是绝大多数配置所在的位置。
要配置主域您需要进入 /var/named/etc/namedb/ 并执行下面的命令:
# sh make-localhost
如果一切正常, 则将在 master 目录中建立两个新的文件。 它们的文件名是 localhost.rev 和 localhost-v6.rev, 分别用来解析本地的名字和 IPv6 配置中的名字。 作为默认的配置文件, 它们已经在 named.conf 文件中进行了定义。
可以通过配置从域来提供额外的域或子域的解析。 多数情况下, master/localhost.rev 可以复制到 slave 中并进行修改。 一旦完成, 这些文件就可以加入到 named.conf 类似 example.com 的配置中:
zone "example.com" { type slave; file "slave/example.com"; masters { 10.0.0.1; }; }; zone "0.168.192.in-addr.arpa" { type slave; file "slave/0.168.192.in-addr.arpa"; masters { 10.0.0.1; }; };
请注意在这个例子中, 主服务器的 IP 地址指明了我们要从哪里把域传过来; 那台服务器本身并不一定要作为对外的 DNS 服务器来用。
为了让 named 服务能够在系统启动时自动加载, 需要把下面的选项加到 rc.conf 文件中:
named_enable="YES"
尽管还有其他的一些可用选项, 这是运行域名服务器所需要的最小配置。 请参考 rc.conf(5) 联机手册了解更多的选项。 在 rc.conf 中进行了这些配置之后, 可以通过下面的命令行来启动 named:
# /etc/rc.d/named start
尽管 FreeBSD 会自动地将 named 放到一个 chroot(8) 环境中, 您仍然可以采取一些更严密的措施来防止可能的针对 DNS 服务的攻击。
查询访问控制表可以用来限制对于域的查询。 这些配置通过在 acl 语句中列出的 IP 地址来发挥作用。 要允许一个子网查询 example.org 中的主机, 可以做下面的定义:
acl "example.com" { 192.168.0.0/24; }; zone "example.com" { type slave; file "slave/example.com"; masters { 10.0.0.1; }; allow-query { example.com; }; }; zone "0.168.192.in-addr.arpa" { type slave; file "slave/0.168.192.in-addr.arpa"; masters { 10.0.0.1; }; allow-query { example.com; }; };
允许查询 DNS 服务的版本, 可能会给攻击者敞开方便之门。 心存恶意的用户能够利用这一信息找到存在已知漏洞的服务器, 并对其实施攻击。 在 named.conf 的 options 小节中可以伪造版本字符串:
options { directory "/etc/namedb"; pid-file "/var/run/named/pid"; dump-file "/var/dump/named_dump.db"; statistics-file "/var/stats/named.stats"; version "None of your business";