23.7. BIND9 和 FreeBSD

撰写者 Tom Rhodes.

FreeBSD 5.3 将 BIND9 DNS 服务软件引入了发行包。 与此同时, 这带来了新的安全特性, 文件布局, 以及自动的 chroot(8) 配置。 这一节包含两部分, 第一部分讨论了新特性以及如何配置它们, 而后一部分则介绍了升级的步骤, 它将帮您顺利地迁移到 FreeBSD 5.3。 从此开始, 服务器将被简写为 named(8) 而不是 BIND。 这一节跳过了前一节中所介绍的术语以及一些理论上的讨论, 因此, 建议您阅读前一节然后再看这一节。

named 的配置文件目前存放在 /var/named/etc/namedb/, 在使用前需要进行一些修改。 这也是绝大多数配置所在的位置。

23.7.1. 配置主域

要配置主域您需要进入 /var/named/etc/namedb/ 并执行下面的命令:

# sh make-localhost

如果一切正常, 则将在 master 目录中建立两个新的文件。 它们的文件名是 localhost.revlocalhost-v6.rev, 分别用来解析本地的名字和 IPv6 配置中的名字。 作为默认的配置文件, 它们已经在 named.conf 文件中进行了定义。

23.7.2. 配置从域

可以通过配置从域来提供额外的域或子域的解析。 多数情况下, 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 服务器来用。

23.7.3. 系统的初始配置

为了让 named 服务能够在系统启动时自动加载, 需要把下面的选项加到 rc.conf 文件中:

named_enable="YES"

尽管还有其他的一些可用选项, 这是运行域名服务器所需要的最小配置。 请参考 rc.conf(5) 联机手册了解更多的选项。 在 rc.conf 中进行了这些配置之后, 可以通过下面的命令行来启动 named

# /etc/rc.d/named start

23.7.4. BIND9 的安全

尽管 FreeBSD 会自动地将 named 放到一个 chroot(8) 环境中, 您仍然可以采取一些更严密的措施来防止可能的针对 DNS 服务的攻击。

23.7.4.1. 查询访问控制表

查询访问控制表可以用来限制对于域的查询。 这些配置通过在 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; };
};

23.7.4.2. 限制版本查询

允许查询 DNS 服务的版本, 可能会给攻击者敞开方便之门。 心存恶意的用户能够利用这一信息找到存在已知漏洞的服务器, 并对其实施攻击。 在 named.confoptions 小节中可以伪造版本字符串:

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";