LPI Linux 认证/LPIC2 考试 202/DNS
|
- BIND 8 基本配置
- 创建和维护 DNS 区域
- 保护 DNS 服务器
为了加速 DNS 查询的繁琐过程,DNS 服务器通常会缓存来自其他 DNS 服务器的答案 - 甚至包括负面查询(即权威服务器的答案「名称不存在」也会被您的本地 DNS 缓存)
将 BIND 配置为仅缓存名称服务器只涉及设置一个「.」区域,即只告诉它根名称服务器,而不指定任何区域,如下所示:
zone « . » in { type hint; file « named.cache »; };
名为 named.cache 的文件可以通过使用 dig @a.root-servers.net 生成
BIND 中的日志记录由两个主要概念控制:通道和类别。通道指定记录的数据去向:发送到 syslog、发送到文件等等。类别指定记录的数据类型。
通道允许您按优先级过滤消息,例如 syslog 的优先级。它们本质上是一样的,但 BIND 可用两个更多通道:debug 和 dynamic,它们会影响调试级别日志记录。Debug 会设置一个调试级别,该级别会在第一次通过 ndc 发出 trace 命令后生效;dynamic 会在每次通过 ndc 发出 trace 命令后递增或递减调试级别。
日志记录配置示例
logging { channel my_syslog { syslog daemon; severity info; }; channel my_file { file « log.msgs »; severity dynamic; }; category statistics { my_syslog; my_file; }; category queries { my_file; }; };
要激活日志记录,在启动 bind 后,执行以下命令:
ndc trace
关键词、文件和工具:/etc/named.conf /usr/sbin/ndc /usr/sbin/named-bootconf Kill
=== 练习 ===.
DNS 区域文件主要由资源记录 (RR) 组成。资源记录必须从一行的第一列开始。它们出现的顺序并不重要,但大多数人倾向于遵循 DNS RFC 中的顺序。SOA(授权起始):「指示此区域的授权方」 NS(名称服务器):「列出此区域的名称服务器」其他记录:
A:「名称到地址的映射」 PTR:「地址到名称的映射」 CNAME(规范名称):「别名」不要忘记为 127.0.0 创建区域!创建和维护 DNS 区域 通常的区域文件格式:
$TTL <ttl value> <domain name>. IN SOA <nameserver name>. <user.email>. ( <serial>; serial number <refresh>; refresh value <retry>; retry value <expire>; expire value <n-ttl>; negative caching TTL of 1 day <domain name>. IN NS <authoritative NS name>. <domain name>. IN NS <authoritative NS name>. ... <hostname>. IN A <IP address> <hostname>. IN A <IP address> ...
创建和维护 DNS 区域 对于反向映射:「$TTL <ttl value> <reverse net addr>.in-addr.arpa. IN SOA <NS name>. <user.email>. ( <serial>; 序列号 <refresh>; 刷新值 <retry>; 重试值 <expire>; 过期值 <n-ttl>; 负缓存 TTL 为 1 天 <rev net addr>.in-addr.arpa. IN NS <authoritative NS name>. <rev net addr>.in-addr.arpa. IN NS <authoritative NS name>. ... <rev IP addr>.in-addr.arpa. IN PTR <fqdn>. <rev IP addr>.in-addr.arpa. IN PTR <fqdn>. ...
关键词、文件和工具:/var/named 内容 区域文件语法 资源记录格式 Dig Nslookup Host
=== 练习 ===.
首先,查看安全邮件列表和网站以获取 BIND 的新版本。特别是,8.2.3 之前的版本容易受到已知攻击的攻击。
隐藏您的版本号,使其不会被外部查询识别 - 这可能被用来针对您进行特殊攻击。从 BIND 8.2 开始,您可以在 named.conf 中使用
options { version « None of your business »; };
您还可以限制查询:全局地
options { allow-query { address-match-list; }; };
或按区域(优先于全局 ACL):
zone « test.com » { type slave; file « db.test »; allow-query { 192.168.0.0/24; }; };
更重要的是,确保只有真正的从属 DNS 才能从您的主服务器传输您的区域。使用关键词 allow-transfer:全局(在「options」语句中),适用于所有区域 按区域 在从属服务器上,禁用区域传输!使用「allow-transfer { none; };」
不要以 root 用户身份运行 BIND!从 8.1.2 开始,有选项可以更改 BIND 运行的用户 (-u) 和组 (-g)。使用非特权用户(例如创建一个没有 shell 访问权限的新用户)。确保您的区域文件具有正确的权限(named.conf 在 BIND 仍然处于 root 权限下时被读取,因此不要更改此文件的权限)。
此外,在 chroot 监狱中运行 bind。从 8.1.2 开始,有选项 -t 用于指定名称服务器 chroot() 到哪个目录。确保 BIND 需要的所有文件(例如日志文件等)都在根监狱中。如果您计划将 chroot 的 BIND 与 ndc 一起使用,不要忘记将新路径名传递给 ndc 的 UNIX 套接字!
以下是关于如何在 Debian 中设置 chroot 的 bind9 环境的一些内容。由于 bind9 的配置非常类似,因此相同的步骤适用于 bind8 以创建 chroot 环境。
- 停止当前运行的 bind。
/etc/init.d/bind9 stop
- 为了在监狱中 chroot bind,我们需要在 /etc/default/bind9 中指定什么环境
OPTIONS="-u bind -t /var/lib/named"
- 我们仍然希望在 /var/log/syslog 中进行日志记录,因此我们需要更改 /etc/default/syslogd,使其打开一个额外的套接字,让 chroot 的 bind 可以通过该套接字记录到 /var/log/syslog 中。
SYSLOGD="-a /var/lib/named/dev/log"
- 为环境运行几个 mkdir 命令
mkdir /var/lib/named mkdir -p /var/lib/named/var/run/bind/run mkdir /var/lib/named/etc mkdir /var/lib/named/dev mkdir /var/lib/named/var/cache
- 移动我们现有的配置
mv /etc/bind /var/lib/named/etc/bind
- 链接它
ln -s /var/lib/named/etc/bind /etc/bind
- 更改 chroot 的 var 和 etc 的所有权
chown -R bind:bind /var/lib/named/var/* chown -R bind:bind /var/lib/named/etc/bind
- 创建一些设备并设置权限
mknod /var/lib/named/dev/null c 1 3 mknod /var/lib/named/dev/random c 1 8 chown 666 /var/lib/named/dev/random /var/lib/named/dev/null
- 重启 syslogd 并启动 bind
/etc/init.d/sysklogd restart /etc/init.d/bind9 start
如果 bind 没有启动,并且 syslog 中存在错误消息,请记住这些消息是在chroot 域中创建的,因此有关 /var/run/bind/run/named.pid 的权限问题实际上意味着它是关于 /var/lib/named/var/run/bind/run/named.pid 的问题。
关键词、文件和工具:SysV 初始化文件 /etc/named.conf /etc/passwd