13.2 安装Bind服务程序
BIND(Berkeley Internet Name Domain,伯克利因特网名称域)服务是全球范围内使用最广泛、最安全可靠且高效的域名解析服务程序。DNS域名解析服务作为互联网基础设施服务,其责任之重可想而知,因此建议大家在生产环境中安装部署bind服务程序时加上chroot(俗称牢笼机制)扩展包,以便有效地限制bind服务程序仅能对自身的配置文件进行操作,以确保整个服务器的安全。
- [root@linuxprobe ~]# yum install bind-chroot
- Loaded plugins: langpacks, product-id, subscription-manager
- ………………省略部分输出信息………………
- Installing:
- bind-chroot x86_64 32:9.9.4-14.el7 rhel 81 k
- Installing for dependencies:
- bind x86_64 32:9.9.4-14.el7 rhel 1.8 M
- Transaction Summary
- ================================================================================
- Install 1 Package (+1 Dependent package)
- Total download size: 1.8 M
- Installed size: 4.3 M
- Is this ok [y/d/N]: y
- Downloading packages:
- --------------------------------------------------------------------------------
- Total 28 MB/s | 1.8 MB 00:00
- Running transaction check
- Running transaction test
- Transaction test succeeded
- Running transaction
- Installing : 32:bind-9.9.4-14.el7.x86_64 1/2
- Installing : 32:bind-chroot-9.9.4-14.el7.x86_64 2/2
- Verifying : 32:bind-9.9.4-14.el7.x86_64 1/2
- Verifying : 32:bind-chroot-9.9.4-14.el7.x86_64 2/2
- Installed:
- bind-chroot.x86_64 32:9.9.4-14.el7
- Dependency Installed:
- bind.x86_64 32:9.9.4-14.el7
- Complete!
bind服务程序的配置并不简单,因为要想为用户提供健全的DNS查询服务,要在本地保存相关的域名数据库,而如果把所有域名和IP地址的对应关系都写入到某个配置文件中,估计要有上千万条的参数,这样既不利于程序的执行效率,也不方便日后的修改和维护。因此在bind服务程序中有下面这三个比较关键的文件。
主配置文件(/etc/named.conf):只有58行,而且在去除注释信息和空行之后,实际有效的参数仅有30行左右,这些参数用来定义bind服务程序的运行。
区域配置文件(/etc/named.rfc1912.zones):用来保存域名和IP地址对应关系的所在位置。类似于图书的目录,对应着每个域和相应IP地址所在的具体位置,当需要查看或修改时,可根据这个位置找到相关文件。
数据配置文件目录(/var/named):该目录用来保存域名和IP地址真实对应关系的数据配置文件。
在Linux系统中,bind服务程序的名称为named。首先需要在/etc目录中找到该服务程序的主配置文件,然后把第11行和第17行的地址均修改为any,分别表示服务器上的所有IP地址均可提供DNS域名解析服务,以及允许所有人对本服务器发送DNS查询请求。这两个地方一定要修改准确。
- [root@linuxprobe ~]# vim /etc/named.conf
- 1 //
- 2 // named.conf
- 3 //
- 4 // Provided by Red Hat bind package to configure the ISC BIND named(8) DNS
- 5 // server as a caching only nameserver (as a localhost DNS resolver only).
- 6 //
- 7 // See /usr/share/doc/bind*/sample/ for example named configuration files.
- 8 //
- 9
- 10 options {
- 11 listen-on port 53 { any; };
- 12 listen-on-v6 port 53 { ::1; };
- 13 directory "/var/named";
- 14 dump-file "/var/named/data/cache_dump.db";
- 15 statistics-file "/var/named/data/named_stats.txt";
- 16 memstatistics-file "/var/named/data/named_mem_stats.txt";
- 17 allow-query { any; };
- 18
- 19 /*
- 20 - If you are building an AUTHORITATIVE DNS server, do NOT enable re cursion.
- 1,1 Top
- 21 - If you are building a RECURSIVE (caching) DNS server, you need to enable
- 22 recursion.
- 23 - If your recursive DNS server has a public IP address, you MUST en able access
- 24 control to limit queries to your legitimate users. Failing to do so will
- 25 cause your server to become part of large scale DNS amplification
- 26 attacks. Implementing BCP38 within your network would greatly
- 27 reduce such attack surface
- 28 */
- 29 recursion yes;
- 30
- 31 dnssec-enable yes;
- 32 dnssec-validation yes;
- 33 dnssec-lookaside auto;
- 34
- 35 /* Path to ISC DLV key */
- 36 bindkeys-file "/etc/named.iscdlv.key";
- 37
- 38 managed-keys-directory "/var/named/dynamic";
- 39
- 40 pid-file "/run/named/named.pid";
- 41 session-keyfile "/run/named/session.key";
- 42 };
- 43
- 44 logging {
- 45 channel default_debug {
- 46 file "data/named.run";
- 47 severity dynamic;
- 48 };
- 49 };
- 50
- 51 zone "." IN {
- 52 type hint;
- 53 file "named.ca";
- 54 };
- 55
- 56 include "/etc/named.rfc1912.zones";
- 57 include "/etc/named.root.key";
- 58
如前所述,bind服务程序的区域配置文件(/etc/named.rfc1912.zones)用来保存域名和IP地址对应关系的所在位置。在这个文件中,定义了域名与IP地址解析规则保存的文件位置以及服务类型等内容,而没有包含具体的域名、IP地址对应关系等信息。服务类型有三种,分别为hint(根区域)、master(主区域)、slave(辅助区域),其中常用的master和slave指的就是主服务器和从服务器。将域名解析为IP地址的正向解析参数和将IP地址解析为域名的反向解析参数分别如图13-3和图13-4所示。
图13-3 正向解析参数
图13-4 反向解析参数
下面的实验中会分别修改bind服务程序的主配置文件、区域配置文件与数据配置文件。如果在实验中遇到了bind服务程序启动失败的情况,而您认为这是由于参数写错而导致的,则可以执行named-checkconf命令和named-checkzone命令,分别检查主配置文件与数据配置文件中语法或参数的错误。
出现问题?大胆提问!
因读者们硬件不同或操作错误都可能导致实验配置出错,请耐心再仔细看看操作步骤吧,不要气馁~
Linux技术交流请加A群:560843(满),B群:340829(推荐),C群:463590(推荐),点此查看全国群。
*本群特色:通过口令验证确保每一个群员都是《Linux就该这么学》的读者,答疑更有针对性,不定期免费领取定制礼品。
13.2.1 正向解析实验
在DNS域名解析服务中,正向解析是指根据域名(主机名)查找到对应的IP地址。也就是说,当用户输入了一个域名后,bind服务程序会自动进行查找,并将匹配到的IP地址返给用户。这也是最常用的DNS工作模式。
第1步:编辑区域配置文件。该文件中默认已经有了一些无关紧要的解析参数,旨在让用户有一个参考。我们可以将下面的参数添加到区域配置文件的最下面,当然,也可以将该文件中的原有信息全部清空,而只保留自己的域名解析信息:
- [root@linuxprobe ~]# vim /etc/named.rfc1912.zones
- zone "linuxprobe.com" IN {
- type master;
- file "linuxprobe.com.zone";
- allow-update {none;};
- };
第2步:编辑数据配置文件。我们可以从/var/named目录中复制一份正向解析的模板文件(named.localhost),然后把域名和IP地址的对应数据填写数据配置文件中并保存。在复制时记得加上-a参数,这可以保留原始文件的所有者、所属组、权限属性等信息,以便让bind服务程序顺利读取文件内容:
- [root@linuxprobe ~]# cd /var/named/
- [root@linuxprobe named]# ls -al named.localhost
- -rw-r-----. 1 root named 152 Jun 21 2007 named.localhost
- [root@linuxprobe named]# cp -a named.localhost linuxprobe.com.zone
编辑数据配置文件。在保存并退出后文件后记得重启named服务程序,让新的解析数据生效。考虑到正向解析文件中的参数较多,而且相对都比较重要,刘遄老师在每个参数后面都作了简要的说明。
- [root@linuxprobe named]# vim linuxprobe.com.zone
- [root@linuxprobe named]# systemctl restart named
$TTL 1D | #生存周期为1天 | ||||
@ | IN SOA | linuxprobe.com. | root.linuxprobe.com. | ( | |
#授权信息开始: | #DNS区域的地址 | #域名管理员的邮箱(不要用@符号) | |||
0;serial | #更新序列号 | ||||
1D;refresh | #更新时间 | ||||
1H;retry | #重试延时 | ||||
1W;expire | #失效时间 | ||||
3H;)minimum | #无效解析记录的缓存时间 | ||||
NS | ns.linuxprobe.com. | #域名服务器记录 | |||
ns | IN A | 192.168.10.10 | #地址记录(ns.linuxprobe.com.) | ||
IN MX 10 | mail.linuxprobe.com. | #邮箱交换记录 | |||
IN A | 192.168.10.10 | #地址记录(mail.linuxprobe.com.) | |||
www | IN A | 192.168.10.10 | #地址记录(www.linuxprobe.com.) | ||
bbs | IN A | 192.168.10.20 | #地址记录(bbs.linuxprobe.com.) |
第3步:检验解析结果。为了检验解析结果,一定要先把Linux系统网卡中的DNS地址参数修改成本机IP地址,这样就可以使用由本机提供的DNS查询服务了。nslookup命令用于检测能否从DNS服务器中查询到域名与IP地址的解析记录,进而更准确地检验DNS服务器是否已经能够为用户提供服务。
- [root@linuxprobe ~]# systemctl restart network
- [root@linuxprobe ~]# nslookup
- > www.linuxprobe.com
- Server: 127.0.0.1
- Address: 127.0.0.1#53
- Name: www.linuxprobe.com
- Address: 192.168.10.10
- > bbs.linuxprobe.com
- Server: 127.0.0.1
- Address: 127.0.0.1#53
- Name: bbs.linuxprobe.com
- Address: 192.168.10.20
13.2.2 反向解析实验
在DNS域名解析服务中,反向解析的作用是将用户提交的IP地址解析为对应的域名信息,它一般用于对某个IP地址上绑定的所有域名进行整体屏蔽,屏蔽由某些域名发送的垃圾邮件。它也可以针对某个IP地址进行反向解析,大致判断出有多少个网站运行在上面。当购买虚拟主机时,可以使用这一功能验证虚拟主机提供商是否有严重的超售问题。
第1步:编辑区域配置文件。在编辑该文件时,除了不要写错格式之外,还需要记住此处定义的数据配置文件名称,因为一会儿还需要在/var/named目录中建立与其对应的同名文件。反向解析是把IP地址解析成域名格式,因此在定义zone(区域)时应该要把IP地址反写,比如原来是192.168.10.0,反写后应该就是10.168.192,而且只需写出IP地址的网络位即可。把下列参数添加至正向解析参数的后面。
- [root@linuxprobe ~]# vim /etc/named.rfc1912.zones
- zone "linuxprobe.com" IN {
- type master;
- file "linuxprobe.com.zone";
- allow-update {none;};
- };
- zone "10.168.192.in-addr.arpa" IN {
- type master;
- file "192.168.10.arpa";
- };
第2步:编辑数据配置文件。首先从/var/named目录中复制一份反向解析的模板文件(named.loopback),然后把下面的参数填写到文件中。其中,IP地址仅需要写主机位,如图13-5所示。
图13-5 反向解析文件中IP地址参数规范
- [root@linuxprobe named]# cp -a named.loopback 192.168.10.arpa
- [root@linuxprobe named]# vim 192.168.10.arpa
- [root@linuxprobe named]# systemctl restart named
$TTL 1D | ||||
@ | IN SOA | linuxprobe.com. | root.linuxprobe.com. | ( |
0;serial | ||||
1D;refresh | ||||
1H;retry | ||||
1W;expire | ||||
3H);minimum | ||||
NS | ns.linuxprobe.com. | |||
ns | A | 192.168.10.10 | ||
10 | PTR | ns.linuxprobe.com. | #PTR为指针记录,仅用于反向解析中。 | |
10 | PTR | mail.linuxprobe.com. | ||
10 | PTR | www.linuxprobe.com. | ||
20 | PTR | bbs.linuxprobe.com. |
第3步:检验解析结果。在前面的正向解析实验中,已经把系统网卡中的DNS地址参数修改成了本机IP地址,因此可以直接使用nslookup命令来检验解析结果,仅需输入IP地址即可查询到对应的域名信息。
- [root@linuxprobe ~]# nslookup
- > 192.168.10.10
- Server: 127.0.0.1
- Address: 127.0.0.1#53
- 10.10.168.192.in-addr.arpa name = ns.linuxprobe.com.
- 10.10.168.192.in-addr.arpa name = www.linuxprobe.com.
- 10.10.168.192.in-addr.arpa name = mail.linuxprobe.com.
- > 192.168.10.20
- Server: 127.0.0.1
- Address: 127.0.0.1#53
- 20.10.168.192.in-addr.arpa name = bbs.linuxprobe.com.