Red Hat Enterprise Linux 5.0服务器构建与故障排除
上QQ阅读APP看本书,新人免费读10天
设备和账号都新为新人

第2篇 Linux常用服务器的构建和故障排除

第3章 DNS服务器构建和故障排除

本章要点

● DNS(Domain Name System)服务器的工作原理。

● 域名服务的解析原理和过程。

● DNS服务器面临的安全问题。

● 建立一个完整的DNS。

● 掌握DNS故障排除工具的使用方法。

3.1 DNS服务器的工作原理

计算机在网络上通信时只能识别如“10.111.41.19”之类的数字地址,为什么在浏览器的地址栏中输入如“www.ibm.com”之类的域名后,就能看到所需要的页面呢?这是因为“DNS服务器”的计算机自动把输入的域名“翻译”为相应的IP地址,然后查找其所对应的网页,最后传回给浏览器。DNS是一种组织域层次结构的计算机和网络服务命名系统,用于TCP/IP网络,如Internet,以通过用户友好的名称定位计算机和服务。要使内部网上的域名能成功地被解析(即翻译为IP地址),就需要将装有操作系统的计算机创建为DNS服务器,其中包含域名和IP地址之间的映射表。通常需要建立一种A(Address)记录,意为“主机记录”或“主机地址记录”,是所有DNS记录中最常见的一种。

DNS是一个复杂的概念,在配置之前,一定要了解其解析过程。即不仅知道如何配置,而且要知道为什么这样配置。域名系统DNS类似于一个树状数据结构,其中的每个节点实质上是负责某个特定区域的一台服务器(比如ibm.com)。

DNS是由主机名解析方案发展起来的一种新的名字的解析机制。1984年9月,ARPANET开始使用DNS,从此它成为访问主机名到IP地址映射的标准方法。Internet上最常用的DNS服务器是BIND(Berkeley Internet Name Domain)软件,目前其最新发行版本是9.3.1。

DNS将主机名解析成IP地址使用了一个全局且层次性的分布式数据库系统,该数据库系统包含Internet上所有域名及IP的对应信息。数据库的层次性允许将域名空间划分成独立的管理部分,并称为“域”(Domain)。数据库的分布式特性允许将数据库的各个不同的部分分配到不同网络的域名服务器上,这样各域名服务器可以实现独立管理。

DNS的域是一种分布式的层次结构,它非常类似于UNIX文件系统的层次结构。根的名字以空标签(“”)表示,并称为“根域”(root domain),图3-1所示的结构是典型的例子。根域的下一级是顶级域,它有两种划分方法,即地理域和通用域。地理域是为世界上每个国家或地区设置的,由ISO-3166定义,如中国是cn,美国是us,日本是jp;通用域是指按照机构类别设置的顶级域,主要包括com(商业组织)及edu(教育机构)等。另外,随着Internet的不断发展,新的通用顶级域名也根据实际需要不断被扩充到现有的域名体系中,新增加的通用顶级域名是biz(商业)及info(信息行业)等。在顶级域名下,还可以根据需要定义次一级的域名,如在我国的顶级域名cn下又设立了com、net、org、gov、edu、ac,以及我国各个行政区的字母代表,如bj代表北京,sh代表上海等。

图3-1 域名体系层次结构

域名空间指表示DNS这个分布式数据库的逆向树型层次结构,完整域名由从树叶节点到根节点的一条路径的所有节点以分隔符“.”按顺序连接而成,如http://www.tom.com.cn/。其中“.”代表根域(当“.”出现在域名的最右边时,实际上还表示其右边有代表根的空标签“”。也可以用最右边的“.”来表示根,“cn”为顶级域,“com”为二级域,“tom”为三级域,“www”为主机名。

3.2 域名服务的解析原理和过程

域名解析分为如下步骤。

(1)用户提出域名解析请求,并将该请求发送给本地的域名服务器。

(2)当本地的域名服务器收到请求后,首先查询本地的缓存。如果有该记录项,则本地的域名服务器就直接把查询的结果返回。

(3)如果本地的缓存中没有该记录,则本地域名服务器直接把请求发给根域名服务器,然后根域名服务器返回给本地域名服务器一个所查询域(根的子域,如cn)的主域名服务器的地址。

(4)本地服务器向上一步中返回的域名服务器发送请求,然后收到该请求的域名服务器查询其缓存。返回与此请求所对应的记录或相关的下级的域名服务器的地址,本地域名服务器将返回的结果保存到缓存。

(5)重复上一步,直到找到正确的记录。

(6)本地域名服务器把返回的结果保存到缓存,以备下一次使用,同时将结果返回给客户机。

例如,假设客户机需获得域名“www.tom.com.cn”服务器的IP地址,此客户中心的本地域名服务器是nm.cnnic.cn(159.226.1.8),域名解析的过程如下。

(1)客户机发出请求解析域名www.tom.com.cn的报文。

(2)本地的域名服务器收到请求后,查询本地缓存。假设没有该记录,则向根域名服务器发出请求解析域名www.tom.com.cn。

(3)根域名服务器收到请求后,判断该域名属于.cn域。查询到NS记录及相应的A记录。

(4)域名服务器nm.cnnic.cn收到回应后缓存以上结果,然后向.cn域的域名服务器之一,如NS.CNC.AC.cn发出请求解析域名www.tom.com.cn的报文。

(5)NS.CNC.AC.cn收到请求后,判断该域名属于.com.cn域。开始查询本地的记录,找到6条NS记录及相应的A记录,然后将这个结果返回给域名服务器nm.cnnic.cn。

(6)域名服务器nm.cnnic.cn收到回应后缓存以上结果,然后向.com.cn域的域名服务器之一,如sld-ns1.cnnic.net.cn.发出请求解析域名www.tom.com.cn的报文。

(7)域名服务器sld-ns1.cnnic.net.cn.收到请求后,判断该域名属于.tom.com.cn域,开始查询本地的记录。找到NS记录及对应的A记录,然后将结果返回给域名服务器nm.cnnic.cn。

(8)域名服务器nm.cnnic.cn收到回应后缓存以上结果,然后向.tom.com.cn域的域名服务器之一,如ns1.tom.com.cn.发出请求解析域名www.tom.com.cn的报文。

(9)域名服务器ns1.tom.com.cn.收到请求后开始查询本地的记录,找到CNAME记录及相应的A记录,并将结果返回给域名服务器nm.cnnic.cn。

(10)域名服务器nm.cnnic.cn将得到的结果保存到本地缓存,同时将结果返回给客户机。这样就完成了一次域名解析过程,如图3-2所示。

图3-2 www.tom.com.cn域名解析过程

3.3 DNS服务器运行中的安全问题

DNS是Internet建设的基础,几乎所有的网络应用都必须依赖其完成网址查询的指引操作。如果DNS运行不正常,即使Web服务器、防火墙系统、相关的后端应用服务器,以及数据库系统都运行正常,也会因为无法在期限时间内查到网址而导致电子邮件无法传递。要使用网域名称链接某个网页,也会因查不出网络地址导致失败。

2001年1月24日,微软公司所管理的相关网络系统遭受网络黑客的拒绝服务攻击后导致全球各地的用户接近24小时无法连接其相关的网站,造成相当严重的商业损失。根据以往的经验,网络攻击的对象多数主要集中在控制网络路由的设备(路由器及防火墙等)和各类应用服务器(Web及邮件等)。因此目前多数的网络系统安全保护,通常都集中在路由设备和应用服务器本身。然而这一次的微软公司被攻击事件,与以往其他网站攻击事件的最大不同在于被攻击的对象是DNS服务器。而不是Web服务器,因而宣告了一种新型的网络攻击类别。

Internet上DNS服务器的标准是ISC(http://www.isc.org/)公司的BIND(Berkeley Internert Name Domain),它具有广泛的使用基础,Internet上的绝大多数DNS服务器都是基于这个软件的。Netcraft在域名服务器上的统计(http://www.netcraft.com/)显示了2003年第2季度进行的一个调查报告,发现在Internet上运行的DNS服务器中,ISC公司的BIND占据了95%的市场份额。

Internet由很多不可见的基础构件组成,其中包含DNS。它为用户提供了易于记忆的机器名称(比如“tom.com”),并且将其翻译成数字地址的形式。对于那些用于公共服务的机器,一般还提供“反向查询”的功能,这种功能可以把数字转换成名字。由于历史的原因,这种功能使用的是被隐藏的“in-addr.arpa”域。对in-addr域的调查可以让我们更加了解整个Internet是如何运行的,Bill Manning的调查发现,有95%的域名服务器(2的2000次方台服务器)中使用的是各种版本的BIND。其中包括了所有的DNS根服务器,而这些根服务器对整个服务器的正常运行起着至关重要的作用。如何加强DNS的正常运作,或者当其遭受网络攻击时,能够让管理者及早发现成为日益重要的系统安全的课题。

DNS服务器面临的安全问题主要包括DNS欺骗(DNS Spoofing)、拒绝服务(Denial of Service,DoS)攻击、缓冲区漏洞攻击、分布式拒绝服务攻击、缓冲区溢出漏洞攻击(Buffer Overflow)和不安全的DNS动态更新等。

3.3.1 DNS欺骗

DNS欺骗即域名信息欺骗,是最常见的DNS安全问题。当一个DNS服务器掉入陷阱,使用了来自一个恶意DNS服务器的错误信息,那么该DNS服务器就被欺骗了。DNS欺骗会使那些易受攻击的DNS服务器产生许多安全问题,例如将用户引导到错误的Internet站点,或者发送一个电子邮件到一个未经授权的邮件服务器。网络攻击者通常通过如下4种方法进行DNS欺骗,如图3-3所示为一个典型的DNS欺骗过程的示意。

图3-3 典型的DNS欺骗过程

1.缓存中毒

黑客会熟练地使用DNS请求,将数据放入一个没有设防的DNS服务器的缓存中。这些缓存信息会在客户访问DNS时返回给客户,从而将客户引导到入侵者所设置的运行木马的Web服务器或邮件服务器中。然后黑客从这些服务器上获取用户信息,这种攻击是利用DNS的缓存机制使得某个服务器在缓存中存入错误的数据。造成这种攻击的主要原因是当客户端向服务器A发出查询时,A的数据库中没有相应的资源记录,因而转发给服务器B。B做出应答并放在报文的回答区中,同时又会在附加区中填充一些和应答不相关的数据。A接收这条应答报文,而且对附加区中的数据不做任何检查而直接放在缓存中。这样使得攻击者可以通过B存放一些错误的数据,让A把这些错误的数据存放在缓存中。然后A又会利用它的缓存应答以后客户端或者服务器发来的查询,从而导致更多的服务器中毒。可以看出造成缓存中毒的主要原因是没有对应答报文,尤其是附加区中的数据进行完整性检查。对缓存中毒攻击的防范可以使得DNS服务器进入被动模式,它向外部的DNS发送查询请求时只会回答授权域的查询请求。而不会缓存任何外部的数据,避免遭受缓存中毒,但是这样降低了DNS的域名解析速度和效率。

2.DNS信息劫持

入侵者通过监听客户端和DNS服务器的对话,猜测服务器响应给客户端的DNS查询ID。每个DNS报文包括一个相关联的16位ID号,DNS服务器根据这个ID号获取请求源位置。黑客在DNS服务器之前将虚假的响应交给用户,从而欺骗客户端访问恶意的网站。

3.DNS复位定向

攻击者能够将DNS名称查询复位定向到恶意DNS服务器,这样可以获得DNS服务器的写权限。

4.IP欺骗

通信协议的每一层都有其独特的安全问题,对于许多拒绝服务攻击和信息私有性问题,网络层(OSI模型的第3层)是特别薄弱的环节。在网络层用得最为广泛的协议是IP(Internet Protocal),IP欺骗是入侵者向一台主机发送带有某IP地址的消息(并非自己的IP地址),表明该消息来自于一台受信任的主机,以便获得对该主机或其他主机的非授权访问。进行IP欺骗攻击时,黑客首先必须运用各种技术找到一个受信任主机的IP地址。然后修改数据包的信息头,使得该数据包好像来自于那台主机。网络外部的攻击者假冒受信任主机,要么通过使用网络地址范围内的IP,要么通过使用信任并可提供特殊资源的外部IP地址。

注意:受信任主机指拥有管理控制权的主机或可明确做出“信任”决定允许其访问自己网络的主机。

通常,IP欺骗攻击局限于把数据或命令注入到客户/服务应用之间或对等网络连接传送中已存在的数据流。为了达到双向通信,一种攻击者采取改变指向被欺骗IP地址的所有路由表;另一种攻击者采取的方式是不关心应用传来的任何回复信息。如果攻击者试图以邮寄敏感文件而得到一个系统双向IP欺骗信息,那么应用回复是不重要的。然而,如果攻击者设法改变了指向被欺骗IP地址的路由表,那么可接收到所有发送到被欺骗IP地址的报文,并可以像任何真实受信任的用户一样回复。IP欺骗不受限于攻击者是否来自网络外部。

IP欺骗就是攻击者伪装成目标主机与其他计算机通信,以达到如下目的。

(1)隐藏自己的IP地址,防止被跟踪。

(2)以IP地址作为授权依据。

(3)穿越防火墙。

IP欺骗利用了TCP/IP协议中的一个缺陷,即信任服务的基础仅仅是建立在网络地址的验证上,而IP地址是容易被伪造的。

IP欺骗的形式有以下两种。

(1)单向IP欺骗:不考虑回传的数据包。

IP欺骗的最基本形式是搞清楚一个网络的配置,然后改变自己的IP地址。伪装成他人机器的IP地址,这样会使所有被发送的数据包都带有假冒的源地址。这是非常低等级的技术,因为所有的应答都回到了被盗用了地址的机器上。而不是攻击者的机器,这种攻击叫做“盲目飞行攻击”(flying blind attack),或者“单向攻击”(one-way attack)。它虽有一些限制,但就某一特定类型的拒绝服务攻击而言,只需要一个数据包撞击机器,而且地址欺骗会让人们更难于找到攻击者的根源。对某些特定的攻击,如果系统收到了意想不到的数据包,说明对系统的攻击仍然在进行。而且因为UDP是无连接的,所以单独的UDP数据包会被发送到受害方的系统中。

(2)双向IP欺骗:要求看到回传的数据包。

3.3.2 拒绝服务攻击

黑客主要利用一些DNS软件的漏洞,如BIND 9版本(版本9.2.0以前的9系列)。如果有人向运行BIND的设备发送特定的DNS数据包请求,BIND就会自动关闭。攻击者只能使BIND关闭,而无法在服务器上执行任何命令。如果得不到DNS服务,那么就会产生一个严重的问题。即由于网址不能解析为IP地址,用户将无法访问Internet。这样,DNS产生的问题就好像是Internet本身所产生的问题,这将导致混乱。

3.3.3 缓冲区漏洞攻击

BIND软件的默认设置是允许主机间进行区带传输(Zone Transfer),它主要用于主域名服务器与辅域名服务器之间的数据同步,使辅域名服务器可以从主域名服务器获得新的数据信息。一旦启用区带传输而不做任何限制,很可能会造成信息泄露。黑客将可以获得整个授权区域内的所有主机的信息,判断主机功能及安全性,从中发现目标进行攻击。一旦这些信息泄露,攻击者就可以根据它轻松地推测主域名服务器的网络结构,并从这些信息中判断其功能或发现那些防范措施较弱的机器。

3.3.4 分布式拒绝服务攻击

DDoS攻击通过使用攻击者控制的几十台或几百台计算机攻击一台主机,使得拒绝服务攻击更难以防范。使拒绝服务攻击更难以通过阻塞单一攻击源主机的数据流来防范拒绝服务攻击,SYN Flood是针对DNS服务器最常见的分布式拒绝服务攻击,它利用IPv4中TCP协议的3次握手(Three-Way Handshake)过程进行攻击。我们已经知道协议的规定,如果一端想向另一端发起TCP连接,需要首先发送TCP SYN包到对方。对方收到后发送一个TCP SYN+ACK包回来,发起方再发送TCP ACK包回,这样3次握手就结束了。我们把TCP连接的发起方叫做“TCP客户机”(TCP Client),TCP连接的接收方叫做“TCP服务器”(TCP Server)。

注意:在TCP服务器收到TCP SYN包并发送TCP SYN+ACK包回TCP客户机前,TCP服务器要分配好一个数据区专门服务于这个即将形成的TCP连接。

一般把收到SYN包,而还未收到ACK包时的连接状态称为“半开连接”(Half-open Connection)。在最常见的SYN Flood攻击中,攻击者在短时间内发送大量的TCP SYN包给受害者。这时攻击者是TCP客户机,受害者是TCP服务器。受害者会为每个TCP SYN包分配一个特定的数据区,只要这些SYN包具有不同的源地址(这一点对于攻击者来说是很容易伪造的)。从而给TCP服务器系统造成很大的系统负担,最终导致系统不能正常工作。

3.3.5 缓冲区溢出漏洞攻击

BIND软件的许多版本存在缓冲区溢出漏洞,当攻击者获取了管理员权限时,就可以入侵BIND所在的主机并以管理员的身份执行任意命令。这种攻击的危害性比较严重,攻击者不仅获得了DNS服务器上所有授权区域内的数据信息,甚至可以直接修改授权区域内的任意数据。针对这种攻击,主要是及时发现DNS软件的版本漏洞并进行升级。

黑客利用DNS服务器软件存在的漏洞,比如对特定的输入没有进行严格检查,那么有可能被攻击者利用,攻击者构造特殊的畸形数据包来对DNS服务器进行缓冲区溢出攻击。如果这一攻击成功,就会造成DNS服务停止,或者攻击者能够在DNS服务器上执行其设定的任意代码。例如,针对Linux平台的BIND的攻击程序(Lion worm)就是利用某些版本的BIND漏洞取得root权限。一旦入侵完成之后,入侵者就可以完全控制整个相关的网络系统,影响非常严重。主要包括如下方面。

(1)更改MX记录,造成邮件被截获、修改或删除。

(2)更改A记录,使WWW服务器的域名指向黑客的具有同样WWW内容的主机,诱使访问者登录,获取访问者的密码等相关信息。添加A记录;使黑客的主机拥有被信任的域名,以此来入侵通过启用域名信任机制的系统。

(3)利用这台主机作为攻击其他机器的“跳板”。

3.3.6 不安全的DNS动态更新

最早设计DNS时所有运行TCP/IP的计算机都是手工配置的,用特定的IP地址手工配置一台计算机时,其A和PTR资源记录也要用手工配置。随着DHCP(动态主机配置协议)的出现,DHCP客户机由DHCP服务器动态分配IP地址,使手工更新其A和PTR记录变得很难管理。因此在RFC 2136中提出了DNS动态更新,这使得DNS客户端在IP地址或名称出现更改时,都可利用DNS服务器来注册和动态更新其资源记录。然而尽管DNS动态更新协议规定了怎样的系统才允许动态更新一台主域名服务器,但是DNS仍然可能受到威胁。比如攻击者可以利用IP欺骗,伪装成DNS服务器信任的主机对系统进行更新或者损害,并可以对主域名服务器进行各种动态更新攻击,比如删减、增加或修改资源记录。

3.4 增强DNS安全性的方法

应对DNS服务器面临的安全隐患有两个最有效的原则,即选择安全没有缺陷的DNS版本和保持DNS服务器配置正确且可靠。

3.4.1 选择安全没有缺陷的DNS版本

BIND主要分为3个版本:

(1)v4:1998年多数UNIX捆绑的是BIND4,除了OpenBSD还在使用,现在已经被多数厂商抛弃。OpenBSD核心认为BIND8过于复杂和不安全,所以继续使用BIND4,于是BIND8/9的很多优点v4都没有。

(2)v8:曾经使用最多最广的版本,其详细内容可以参阅“BIND8+域名服务器安全增强”(http://security.nsfocus.com/showQueryL.asp?libID=530)。

(3)v9:最新版本的BIND,全部重新写过且免费(但是由商业公司资助),BIND9在2000年10月份推出,根据调查v9版本的BIND是最安全的,最新安全版本在其官方网站http://www.isc.org/上,下载源代码安装即可。例如,Linux系统针对拒绝服务攻击只要将BIND 9升级为版本9.2.1即可。

3.4.2 保持DNS服务器配置正确且可靠

Linux上的域名服务由named守护进程控制,该进程从主文件/etc/named.conf中获取信息,包括一组将主机名称映射为IP地址的文件。Linux下DNS主要配置文件如表3-1所示,named配置文件族如表3-2所示,named.conf文件的配置如表3-3所示。

表3-1 DNS主要配置文件

表3-2 named配置文件族

表3-3 named.conf文件的配置

可以看到DNS配置文件是一个复杂的系统,伴随DNS建立出现的许多问题都会引起相同的结果,但大多数问题是由于配置文件中的语法错误而导致的。

3.4.3 BIND 9目录结构

BIND 9目录结构如图3-4所示。

图3-4 BIND 9目录结构

说明:如果BIND 9运行的chroot(牢监)模式下,所有配置在目录/var/named/chroot/中;如果BIND 9运行的非chroot(正常)模式下,所有配置在目录/var/named中。

3.4.4 DNS资源纪录格式

DNS域名数据库由资源记录(Resource Records,RR)和区文件指令组成,每个资源纪录都是一个类别的。每个DNS域名数据库由SOA RR开始,同时包括NS RR,正向解析文件包括A RR、MX RR和CNAME RR等;反向解析文件包括PTR RR。RR文件基本格式如下:

[name] [ttl] IN type rdata

各个字段由空格和制表符隔开,其含义如下:

1.name字段

(1)根域(Root Domain)以圆点“.”表示。并且只有一个,没有上级域。在Internet中,根域一般不需要表示出来。

(2)@:默认域,文件使用$ORIGIN domain来说明默认域。

(3)标准域名:以“.”结束的域名,或是一个相对域名。

(4)空:纪录最后一个带有名字的域对象。

(5)ttl:ttl全称“Time To Live”,以秒为单位记录该资源记录中存放在高速缓存这的时间长度。通常此处设定值为空,表示采用SOA中的最小ttl值。

(6)IN:将该纪录标识为一个Internet DNS资源纪录。

2.type字段

(1)A(Address)记录:是用来指定主机名(或域名)对应的IP地址记录,用户可以将该域名下的网站服务器指向到自己的Web服务器上,同时也可以设置域名的二级域名。

(2)MX(Mail eXchanger)记录:邮件交换记录,用户可以将该域名下的邮件服务器指向到自己的邮件服务器,然后即可自行操控所有的邮箱设置。只需在线填写服务器的IP地址,即可将域名下的邮件全部转到设定相应的邮件服务器上。

(3)CNAME(Canonical NAME)记录:别名记录,允许将多个名字映射到同一台计算机,通常用于同时提供Web和邮件服务的计算机。例如,有一台计算机名为“host.mydomain.com”(A记录),同时提供Web和邮件服务。为了便于用户访问服务,可以为该计算机设置两个别名(CNAME),即WWW和MAIL。这两个别名的全称是“www.mydomain.com”和“mail.mydomain.com”,实际上它们都指向“host.mydomain.com”。

(4)SOA(Start Of Authority)记录:一个授权区的开始,其后的所有信息是控制这个域的。每个配置文件都必须包含一个SOA纪录,以标识服务器所管理的起始处。配置文件的第1个纪录必须是SOA纪录。

(5)PTR(domian name PoinTeR)记录:用于地址到主机名的映射。

(6)HINFO(Host INFOrmation)记录:该记录由一组描述主机的信息稳步文件组成,通常包括硬件名称和操作系统名称。

3.rdata字段

(1)A:存放IP地址。

(2)CNAME:设定主机别名。

(3)HINFO:通常分为两行,分别对应Hardware(计算机硬件名称)和Os-type(操作系统名)。

(4)MX:通常分为两行,分别对应。Preference-value:优先级别数字(数字越小,优先级别越高)。

(5)Mail eXchanger:邮件服务器名称。

(6)NS:域名服务器名称。

(7)PTR:主机真实名称。

(8)Hostname:存放本纪录的主机名称。

(9)Contact:管理域的管理员邮件地址,因为@符号在文件中表示默认域,所以邮件地址以.代替,如abc@def.com改为abc.def.com。

(10)Serial:本区信息文件的版本号,文件每次修改后要将其数值增加1。

(11)Refresh:辅助域名服务器多长时间更新一次数据库记录,以秒为单位。

(12)Retry:辅助域名服务器更新数据库失败后多长时间重试,以秒为单位。

(13)Expire:如果辅助域名服务器无法从主服务器上更新数据,原有数据何时失效,以秒为单位。

(14)Minimun:如果资源记录中没有设定ttl,以此处设定的时间为准。

DNS由一组文件构成,所以需要不同工具检查对应的文件。一个配置存在缺陷的DNS服务器存在很大的安全漏洞。这里可以使用一些工具,如nslookup、dig、named-checkzone、host、named- checkconf及dlint等。其中安装BIND软件包时自动安装的工具包括nslookup、dig、named-checkzone、host,named-checkconf。dlint是一个专门检查DNS配置文件的开源代码软件。可以在http://www.domtools.com/dns/dlint.shtml中下载。

3.5 建立一个完整的DNS

3.5.1 DNS分类

Linux下的DNS服务器用来存储主机的域名信息,包括如下3种。

(1)惟高速存域名服务器(Cache-only Server)。

惟高速存域名服务器不包含域名数据库,它从某个远程服务器每次取得域名服务器查询的信息。一旦取得一个回答,就将它放入高速缓存中,下次查询相同的信息就用用回答。

(2)主域名服务器(Primary Name Server)。

主域名服务器是特定域所有信息的权威来源,它从域管理员构造的本地文件中加载域信息,该文件包含服务器具有管理权的部分域结构的最精确信息。主域名服务器需要配置一组完整的文件,即主配置文件(named.conf)、正向域的区文件(named.hosts)、反向域的区文件(named.rev)、高速缓存初始化文件(named.ca)和回送文件(named.local)。

(3)辅助域名服务器(Second Name Server)

辅助域名服务器用来从主域名服务器中转移一整套域信息,它是可选的配置选项。区文件从主域名服务器转移出来,作为磁盘文件保存在辅助域名服务器中。辅助域名服务器不需配置本地区文件,只需配置主配置文件、高速缓存初始化文件和回送文件。

3.5.2 安装BIND域名服务器软件

Red Hat Linux发行版本包含了域名服务器的RPM包,主要包括域名服务器软件bind、DNS查询软件bind-untils,包含惟高速存域名服务器的配置文件caching-nameserver和域名服务器的图形化前端redhat-config-bind。以上软件可以依次安装,不过建议使用手工安装,也可以使用redhat-config-packages工具包。具体方法是在命令行输入命令“redhat-config-packages”,然后弹出“添加/删除应用程序”对话框。选中DNS服务器,单击“细节”按钮选择全部软件包,最后更新即可。

Caching-nameserver安装后会建立以下配置文件。

(1)/etc/named.conf:主配置文件。

(2)/var/named/localhost.zone:正向域的区文件。

(3)/var/named/named.local:反向域的区文件。

(4)/var/named/named.ca:高速缓存初始化文件。

3.5.3 named配置文件族内容

Linux上的域名服务由named守护进程控制,该进程从主文件/etc/named.conf中获取信息,它包括一族将主机名称映射为IP地址的各种文件。DNS主配置文件定义域数据库信息的基本参数和源点,该文件可以存放在本地或远程的服务器中。

3.5.4 配置惟高速存域名服务器

建立具有转发的惟高速存域名服务器。转发指某一台DNS遇到非本机负责的区(zone)查询请求时,将不直接向root Server查询,而把请求转交给指定的另一台DNS(forwarder)代为查询。即将自己扮成一个DNS客户端,向forwarder送出同样的请求,然后等待查询结果。而逐级向下查询的动作,则交由forwarder负责。无论这个结果是直接查询得来的,还是forwarder返回的,DNS都会保存一份数据在高速缓存中。这样,其后的相同的查询就快多了。对于DNS所服务的客户端而言效率更高了。方法非常简单,即在/etc/named.conf中添加如下行:

forwarders {168.95.1.1;};
forward only;

然后named进程重新读取配置文件/etc/named.conf即可:

[root@dns root]# service named reload

3.5.5 配置主域名服务器

1.在主配置文件中添加区声明

用vi编辑器修改/etc/named.conf配置文件,加入以下黑体字符:

vi /etc/named.conf
#添加正向区声明#
zone "cao.net" {
type master;  #注明是主域名服务器#
file "cao.net.hosts";
};
#添加反向区声明#
zone "1.168.192.in-addr.arpa" {
type master;  #注明是主域名服务器#
file "192.168.1.rev";
};

2.配置正向解析数据库文件

配置正向解析数据库文件,即实现域名到IP的对应。用vi编辑器修改/etc/named/cao. net.hosts文件,加入以下黑体字符:

vi /etc/named/cao.net.hosts
$TTL 86400
@ IN SOA linux.cao.net  root. linux.cao.net.(
2001101100 ;     #serial number#
10800 ;          #refresh#
3600 ;          #retry query#
604800 ;        #expire#
0);        # minimum TTL#
IN NS dns.cao.net     #设置域名服务记录#
IN MS  5 linux.cao.net  #设置邮件交换记录#
IN A 192.168.1.1         #设置地址记录#
www IN CNAME  linux.cao.net.  #设置别名记录#

3.配置反向解析数据库文件

配置反向解析数据库文件,即实现IP地址到域名的映射。用vi编辑器修改/etc/named/ 192.168.1rev文件,加入以下黑体字符:

vi /etc/named/192.168.1.rev
$TTL 86400
@ IN SOA linux.cao.net  root. linux.cao.net.(
2001101100 ;         #serial number#
10800 ;           #refresh#
3600 ;           #retry query#
604800 ;         #expire#
0);            #minimum TTL#
IN NS dns.cao.net    #设置域名服务记录#
1  IN PTR  dns.cao.net  #设置反向指针记录#

4.重新启动DNS服务器

# service named reload

5.测试DNS服务器

(1)使用host命令:

#host linux.cao.net             #正向查询主机地址#
linux.cao.net has address 192.168.1.1
#host 192.168.1.1              #正向查询域名#
1.1.168.192.in-addr.arpa domain name pointer linux.cao.net

(2)nslookup。

nslookup命令用来测试正向和反向的解析是否正常,并向服务器直接查询信息。一般情况下均使用交互模式。此时会出现提示符“<”。nslookup提供了6个命令,常用的命令如下。

● help:显示帮助信息,以及一些简单的命令的作用。

● exit:退出nslookup。

● lserver:查找指定的域名服务器并将其设置为默认的域名服务器。

● server:和lserver相似,解析另一台域名服务器并将其设置为默认的域名服务器,不同在于本命令使用当前默认的域名服务器来解析。

● set:修改工作参数。

set命令包含下面几种命令。

◆ set class:设置查询的类型,一般情况下为Internet。

◆ set debug:设置调试模式。

◆ set nodebug:设置为非调试模式。

◆ set d2:设置详细调试模式。

◆ set nod2:设置为非详细调试模式。

◆ set [no]defname:设置为defname,会在所有没有加“o”的名字后自动加上默认的域名。

◆ set domain:设置默认的域名。

◆ set port:DNS的默认端口为53,用本命令可以设置其他端口,一般用于调试。

◆ set q(querytype):改变查询的信息的类型,默认的类型为A记录。

◆ set recurse:设置查询类型为递归(默认)。

◆ set norecurse:设置查询类型为迭代。

◆ set retry:设置重试的次数,默认值为4。

◆ set root:设置默认的根服务器。

◆ set imeout:设置等待应答的限制时间(单位为秒),如果超时,还可以重试。并将超时值加倍,重新查询。默认的超时值为5秒。

3.5.6 配置辅助域名服务器

设定辅助域名服务器的IP地址为“192.168.1.5”,主机名称为“dns2.cao.net”。

辅助域名服务器的作用是为主域名服务器提供备份,也可以进行域名解析。同样也要首先安装域名服务器软件bind、域名服务器软件、Bind-untils、DNS查询软件、包含惟高速存域名服务器的配置文件caching-nameserver和域名服务器的图形化前端redhat-config- bind。不过其配置文件可以从主域名服务器中复制过来,然后修改即可,这样就可以简化操作步骤。

(1)复制文件:

# scp 192.168.1.1:/etc/named.conf /etc
root@192.168.1.1's password:xxxxxxxxxx
named.conf 100% 1060 1.1MB/s 00:00

(2)修改配置文件。

将master改成slave,并且指定主域名服务器的IP地址为“192.168.1.1”:

vi /etc/named.conf
#添加正向区声明#
zone "cao.net" {
type slave;  #注明是辅助域名服务器#
file "cao.net.hosts";
masters {192.168.1.1;};  #指定主DNS服务器的IP地址#
#添加反向区声明#
zone "1.168.192.in-addr.arpa" {
type slave;  #注明是辅助域名服务器#
file "192.168.1.rev";
masters {192.168.1.1;};  #指定主DNS服务器IP地址#
};

说明:辅助域名服务器不需要配置区文件,其测试方法和主域名服务器相同。

3.5.7 配置域名服务器客户端

BIND软件是一个客户端/服务器系统,客户端程序称为“转换程序”(resolver)。它负责产生域名信息查询,将这类信息发送到服务器,服务器的named守护进程负责回答转换程序的查询。作为客户端,首先要在用户的计算机上配置客户端程序,即从DNS服务器获得域名解析/反解析服务。域名服务器客户端包括如下两个文件。

(1)/etc/host.conf。

/etc/host.conf文件用来控制本地转换程序设置的文件,它通知转换程序使用哪些服务,以及依照什么顺序查询。该文件的字段可以用空格或制表符分隔,其配置选项如表3-4所示。

表3-4 /etc/host.conf文件的配置选项

一个典型的/etc/host.conf文件如下:

order bind hosts
multi on
nospoof on
trim cao.net
alert on

在该文件中,解析程序首先使用DNS,然后使用/etc/hosts文件查找主机名。如果由于某种原因不能使用域名服务器,还可以使用主机文件中列出的那些主机名。一台机器上允许使用多个IP地址,主机通过重新解析主机名字(从IP地址逆向查找返回的主机名字)来检查IP欺骗。

(2)/etc/resolv.conf。

/etc/resolv.conf是转换程序配置文件,当配置转换程序使用BIND查询主机时,我们必须通知转换程序使用的域名服务器。用来完成这项任务的工具就是/etc/resolv.conf文件,其配置选项如表3-5所示。

表3-5 /etc/resolv.conf文件的配置选项

一个典型的/etc/resolv.conf文件如下:

domain cao.net
nameserver 192.168.1.1
serach cao.net

3.5.8 DNS常用术语

表3-6所示为常用DNS术语。

表3-6 常用DNS术语

3.6 DNS故障排除工具

第1次配置DNS对于Linux新手是一个挑战,DNS是一个很复杂的系统,一不小心就有可能使系统不能正常运行。伴随DNS建立出现的许多问题都会引起相同的结果,但大多数问题是由于配置文件中的语法错误而导致的。DNS由一组文件构成,所以需要不同的工具检查对应的文件。

3.6.1 dlint

除了系统安装产生的工具(nslookup、dig、host、named-checkzone、named-checkconf和rndc)外,一个开放源代码的工具是dlint。一个配置不完善的DNS服务器存在很大的安全漏洞,dlint可以帮助分析DNS配置文件中的问题。它是一个专门检查DNS配置文件的开放源代码的软件,运行的前提是系统须安装Perl语言和dig命令:

#rpm -qa|grep perl
#dig hostname any
Perl 5.8.0
; <<>> DiG 9.2.1 <<>>
;; global options:  printcmd

下载和安装该软件:

#wget http://www.domtools.com/pub/dlint1.4.0.tar.gz
#gunzip dlint1.4.0.tar.gz
#tar vxf dlint1.4.0.tar;#cd dlint1.4.0
#make install

系统会将dlint安装在/usr/bin/目录下。

(1)dlint首先检查配置文件的拼写错误。

(2)有A(Address)记录的主机名称必须有PTR(也称为“pointer”,中文名称“PTR反向解析”,负责定义逆向的IP地址到主机名的映射)记录;否则配置文件不能通过。dlint可以在用户配置文件中为A记录查找丢失的PTR记录。

(3)dlint记录in-addr.arpa区带的每一条PTR记录是否有对应的A记录存在。

(4)dlint以递归的方式检查子区带,查找其配置问题,dlint软件可以分析任何DNS区带。

dlint软件包的主要脚本是dlint,使用方法如下:

#/usr/bin/dlint domain

3.6.2 DNS服务器的工作状态检查

1.使用dnstop

在维护DNS服务器时网管员希望知道哪些用户在使用DNS服务器,同时也希望能统计DNS的状态,我们可以使用dnstop查询DNS服务器的工作状态。

下载和安装该软件:

#wegt http://www.stearns.org/dnstop/dnstop-20040309-1.i386.rpm
#rpm -ivh dnstop-20040309-1.i386.rpm

运行dnstop软件,如果要查看通过eth0的DNS网络流量,可以使用命令;

#dnstop -s eth0
0 new queries, 6 total queries                     Mon Jul  6 09:54:352004
Sources               count      %
---------------- --------- ------
192.168.0.117            4   66.7
192.168.0.143            1   16.7
192.168.0.42              1   16.7

在运行dnstop的过程中,可以输入命令“s, d, t, 1, 2, 3, ctrl+r, ctrl+x”,以交互方式来显示不同的信息。

(1)1:(TLD)记录查询的顶级域名。

(2)2:(SLD)记录查询的二级域名。

(3)3:(SLD)记录查询的三级域名。

(4)s:(Source)记录发送DNS查询的客户端的IP地址表。

(5)d:(Destinations)记录DNS查询的目的服务器的IP地址表。

(6)t:(Query Type)记录查询的详细类型。

(7)Ctrl+r:重新记录。

(8)Ctrl+x:退出。

更详细的信息可以查看man dnstop。

2.nslookup

nslookup(Name Server Lookup)即域名服务器查找,用来查找DNS服务器上的DNS记录。这个命令可以指定查询的类型、DNS记录的生存时间,以及使用哪台DNS服务器进行解析。运行nslookup需要安装bind-untils,有两种运行模式,即交互式和非交互式运行模式。交互式运行模式允许用户通过域名服务器检索各种主机,并可以打印出主机名称列表;非交互式运行模式用来打印所请求的某台主机或域的特定的信息。下面是一个发生错误的实例:

#nslookup
*** Can't find server name for address 192.168.2.1: Timed out
*** Default servers are not available
Default Server: UnKnown
Address: 192.168.2.1

一般的错误都是因为数据库文件或配置文件错误所致,比如,少个“.”或者文件内容不正确等;另外一个主要的原因是执行nslookup的系统所使用的server(如192.168.2.1)不能查询其反解(1.2.168.192.in-addr.arpa)。如果出现错误,该命令将不能启动。

解决方法为增加服务器IP所在的reverse zone(如1.2.168.192.in-addr.arpa),确定其中有server本身的反解功能。

如果dns没有错误,nslookup会输出相关信息:

# nslookup www.it168.com
Server:        202.106.195.68
Address:       202.106.195.68#53
Non-authoritative answer:
www.it168.com   canonical name = cache.it168.com.
Name:   cache.it168.com
Address: 202.106.124.50
Name:   cache.it168.com
Address: 202.106.124.52

其中包括DNS服务器IP地址和端口。

3.dig

dig工具向DNS服务器发送named查询,它可以查询单一台或多台域名服务器。其功能比nslookup强大很多,而且使用简单,不需要设置set选项。下面是该工具的一些比较常用的命令:

dig @server tom.com.cn.  #dig最基本的用法
dig @server zx.xmgd.com. AXFR  #用dig查看zone数据传输
dig @server zx.xmgd.com. IXFR=N  #用dig查看zone数据的增量传输
dig -x 210.52.83.228 @server  #用dig查看反向解析
 dig xmgd.com. +nssearch  #查找一个域的授权DNS服务器
dig xmgd.com +trace  #从根服务器开始追踪一个域名的解析过程

4.named-checkzone

named-checkzone通过检查句法的正确性来检查区带(zone)文件的正确性,如果没有检查到错误,会返回一个简单的“OK”字符。下面是一个例子:

#named-checkzone -q /var/named/localhost.zone
dns_zone_load: couldnot find NS and/or SOA records or bad datted quad

上面信息说明可能未定义SOA记录或A记录设定了一个错误IP地址,查看/var/named/localhost. zone文件后发现如下行:

1D IN A   127.0.0.l

显然是一个拼写错误,“I”错误拼写为“1”。

5.named-checkconf

named-checkconf通过检查named.conf句法的正确性来检查named文件的正确性,对于配置正确的named.conf文件,它不会显示任何信息。下面是一个检查的例子:

# named-checkconf /etc/named.conf
/etc/named.conf:23: unknown option 'fi1e'

上面信息说明在第23行有一个错误语句,找到错误原因,用vi修改配置文件就可以很快排除故障。

另外,建议不要使用Red Hat Linux提供的一个图形化的配置工具redhat-config-bind,它可能带来许多严重的问题,因此从RHEL4开始就取消了这个工具。Linux网络管理员还是应当使用命令行配置DNS服务器管理,和redhat-config-bind相比,其优点如下。

(1)更加灵活,通常比使用redhat-config-bind具有更多选项。

(2)运行更快,不必等待Linux处理图形。

(3)redhat-config-bind工具不能显示所有错误信息,而命令行提供的错误信息都可以在命令行下看到。

(4)redhat-config-bind工具是一个单独软件,也是一个出错源。

6.whois

whois命令查找并显示指定账号的用户相关信息,因为它在network solutions的whois数据库查找,所以该账号名称必须在其中注册,并且名称没有大小写区别。whois命令的实例如下:

# whois it168.com
[Querying whois.internic.net]
[Redirected to whois.paycenter.com.cn]
[Querying whois.paycenter.com.cn]
[whois.paycenter.com.cn]
The Data in Paycenter's WHOIS database is provided by Paycenter
for information purposes, and to assist persons in obtaining
information about or related to a domain name registration
……
    Beijing Haochen Guangyu Wangluo Information Technology Co.,Ltd.
      Room178 First Floor Yongding Jingji Kaifa Yuan Mentougou District
      beijing Beijing 100086
      China
      tel: 86 1082656921
      fax: 86 1082657075
      lan@it168.com
    Registration Date: 1999-05-25
    Update Date: 2005-06-10
    Expiration Date: 2013-05-25
Primary DNS:  ns1.it168.com        202.106.124.49
Secondary DNS:  ns2.it168.com        211.147.3.78

可以看到whois功能非常强大,除了可以查询DNS服务器的IP地址外,还可以查询到其具体物理位置及电话传真。需要说明的是whois对于TLD(记录查询的顶级域名)的.com和.net,以及.edu域名查询比较可靠。为了精确查询,可以使用下面3台whios服务器:

# whois domain-name@whois.internic.net
# whois domain-name@whois.register.com
# whois domain-name@whois.geektools.com

7.traceroute

traceroute命令用来显示数据包到主机间的路径,允许追踪网络数据包路由的途径。预设数据包大小是38个字节,用户可另行设置。traceroute命令实例如下:

# traceroute www.it168.com -m 8
traceroute: Warning: www.it168.com has multiple addresses; using 202.106.124.50
traceroute to cache.it168.com (202.106.124.50), 8 hops max, 38 byte packets
 1  192.168.149.2 (192.168.149.2)  6.591 ms  1.966 ms  1.144 ms
 2  * * *
 3  * * *
 4  * * *
 5  * * *
 6  * * *
 7  * * *
 8  * * *

traceroute通过发送小的数据包到目的设备,直到其返回来测试需要的时间。它测试一个路径上的每台设备3次。输出结果中包括每次测试的时间(ms)、设备的名称(如有的话)及其IP地址。traceroute最早是由van jacobson在1988写出的小程序,当时主要是解决一些网络的问题。作为一个正确理解IP网络并了解路由原理的重要工具,它对负责网络工程技术与系统管理的webmaster是一个使用方便的程序。对ISP而言,设立traceroute网关将使网络服务提供商帮助用户建立并维持对服务商服务质量的信心。服务质量高的ISP可以通过设立traceroute网关,使用户了解其与网络连接及数据传输的效率。当然基础设施差,服务质量低的ISP是比较害怕提供这种服务。因为这样用户可以使用这个工具了解服务商目前的网络连接情况。有时,路由传播会有一个问题,即无法连接一些网络。或许能帮助找出路由中断位置的最有用的命令就是traceroute。当无法与远程主机连接时,这个命令一样有用(例如此时ping命令会失效)并将以要连接的主机的名字作为参数执行。无论是否到达了目标,还是因为没有连接而终止,它都会显示所经过的所有网关主机。

8.host

host命令能够用来查询域名,并输出更多的信息。host -t mx linux.com命令可以查询linux.com的mx记录,以及处理mail的host的名字;host -l linux.com会返回所有注册在linux.com下的域名;host-a linux.com则会显示这个主机的所有域名信息。如果要测试DNS,可以使用host命令,有以下两种格式:

host standard-address
host IP-address

如果从一个标准地址入手:

host ucsd.edu

DNS将显示IP地址:

host 128.54.16.1

反之如果从一个IP地址入手,DNS将显示标准地址。只有Internet主机才有IP地址(仿真终端没有),因此可以使用host命令检查计算机是否与Internet直接连接。如能测试出IP地址,说明该计算机与Internet连接。如果指定的地址是未与Internet直接连接的计算机的,将显示如下提示:

host not found

9.ping

ping实用程序实际上不是一种DNS工具,而是一种TCP/IP工具。其作用是判断一台主机是否能连接到网络上,在一定程度上也有回答网络请求的功能。ping实用程序使用Internet控制报文协议(简称“ICMP”)向远端主机发送应答请求信息,然后等待回答。如果在超时(其值可由用户设置)到达前收到了回答,则显示从发送请求到收到回答的时间。

10.GUI工具

VisualRoute是一个Liunx集成化且可视的连接分析软件,它集成了ping、tracetoute及WHOIS等功能,能直观地回答:“我为什么不能访问到那里?”这样的问题。它能把IP数据包所经历路径显示在世界地图上,并且分析出网络故障的发生地点及所经历节点采用的Web Server软件,还能报告ICMP和TTL错误。图3-5所示为VisualRoute集成的WHOIS工作界面。

图3-5 VisualRoute集成的WHOIS工作界面

nslookup、dig、named-checkzone、named-checkconf、dlint和dnstop是一些检查工具,如果你希望作为一名合格Unix/Linux的网络管理员,就应该从需求方案出发,以客户的需求为导向配置需要的DNS服务器。这样不但可以满足需要,还能大大减少工作量。以上都是网络管理员应当掌握的工具,但并不是说可以忽略对DNS本身的了解。

3.7 防火墙及SELinux对DNS服务器的影响

本节说明防火墙及SELinux对DNS服务器的影响。

(1)Iptables。

如果使用Iptables防火墙,注意打开53端口:

# iptables -A FORWARD -i eth0-p tcp --dport 53-j ACCEPT
#iptables -A FORWARD -i eth0-p udp --dport 53-j ACCEPT

(2)SELinux。

SELinux(增强安全性的Linux)是美国安全部的一个研发项目,其目的在于增强开发代码的Linux内核,以提供更强的保护措施,防止一些关于安全方面的应用程序走弯路并且减轻恶意软件带来的灾难。SELinux提供一种严格细分程序和文件的访问权限以及防止非法访问的OS安全功能。设定了监视并保护容易受到攻击的功能(服务)的策略,具体而言,主要目标是Web服务器httpd、DNS服务器named,以及dhcpd、nscd、ntpd、portmap、snmpd、squid和syslogd。SElinux把所有的拒绝信息输出到/var/log/messages。如果某台服务器,如bind不能正常启动,应查询messages文件来确认是否是SELinux造成服务不能运行。安装配置Bind DNS服务器时候应先关闭SELinux。

使用命令行方式,编辑配置文件修改/etc/sysconfig/selinux文件:

#SELINUX=enforcing
SELINUX=disabled

重新启动后该配置生效。

使用图形界面,选择使用安全级别来关闭SELinux如图3-6所示。

图3-6 使用安全级别来关闭SELinux

3.8 指定DNS服务器管理端口

由于DNS查询通常由系统自动完成,所以其53端口不方便更改,但可以指定在哪个IP地址进行监听。在配置文件named.conf中有一个全局配置项目options,其中包含了监听特定网络的命令。例如,如果想让named仅在192.168.0.254地址上提供DNS查询,可以使用以下代码:

options{
        ... ...
        listen-on {192.168.0.254, 127.0.0.1;};
        allow-query{192.168.0/24; 127.0.0/8;};
        ... ...
}

由于DNS服务的特殊性,必须允许本机回路127.0.0.1的连接。

3.9 DNS服务器日志信息

对于排除Linux的系统故障来说,日志文件是极其重要的工具。DNS日志可以记录服务器CPU的占用时间、查询的统计信息及配置中存在的问题。经常分析日志可以了解服务器的负载、性能及安全性,从而及时地采取措施纠正错误。BIND软件在默认情况下把DNS日志写到/var/log/messages文件中,由于这个文件中的日志信息由syslog生成,所以并不全部为BIND的日志信息。要详细分类记录DNS服务器的运行状况,应修改配置文件named.conf,使用logging命令:

logging{
channel default_log {
file “/var/adm/dns-default.log” versions 3 size 10m;
severity info;
print-severity yes;
print-time yes;
print-category yes;
};
:
:
channel security_log {
file “/var/adm/dns-security.log” versions 3 size 10m;
severity warning;
print-severity yes;
print-time yes;
print-category yes;
};
category default {default_log;};
:
:
category security {security_log;};
};

其中channel定义了通道的名称,按需要可以定义多个通道。每个通道指定了存放日志的文件名、文件个数及其大小,还定义了要记录消息的等级(如critical、error、warning、notice、info、debug及dynamic),并指定日志内容是否包括时间和消息的类别。Category定义消息的类别(如default、general、client、config、database、dnssec、lame-servers、network、notify、queries、resolver、security、update、xfer-in及xfer-out),并指明这类消息按照哪个通道的定义来记录。上例中的第1个channel default_log是定义的channel名称,/var/adm/dns-default.log是日志文件。可依次产生记录该类消息的4个文件(update_log、update_log0、update_log1及update_log2),每个文件最大为10 MB。该日志记录的是除severity信息以外的告警信息,消息记录格式包括时间、消息等级和种类。

DNS日志的设置应根据需要多设置几个通道,将日志信息分类记录。在多看多分析的原则下及时发现各种问题,以便及时解决。例如,/var/adm/dns-default.log文件发现出现多条告警信息“Nov 02 15:55:45.647 client:warning:client 10.22.21.78#1036:no more recursive clients:quota reached”。通过分析,得知BIND客户端数量默认值是1000,瞬时请求超过这个值就会出现上述告警信息。所以修改named.conf,添加语句“recursive-clients 10000;”解决了这个问题。

3.10 DNS服务器软件BIND的网络资源

Internet上DNS服务器的事实标准就是ISC的BIND,Bill Manning对in-addr域的调查发现,有95%的域名服务器使用的是各种版本的“BIND”。其中包括了所有的DNS根服务器,而这些根服务器对整个服务器的正常运行起着至关重要的作用。下面是关于BIND DNS服务器重要的网络资源。

(1)Paul Albitz和Cricket Liu合著的《DNS and BIND》,4th Ed(O'Reilly and Associates,Inc.,2001,www.oreilly.com/catalog/dns4/index.html)给出了这两个重要的Internet标准的详细背景。

(2)DNS(http://www.mcsr.olemiss.edu/cgi-bin/man-cgi?dns+7)和BIND UNIX在线手册(http://www.mcsr.olemiss.edu/cgi-bin/man-cgi?bind)。

(3)Howto文档:http://www.tldp.org/HOWTO/DNS-HOWTO.html

(4)DNS概述和参考文档:http://www.dns.net/dnsrd/docs/whatis.html

(5)RFC(Request For Comments)组织关于DNS的存档文件,RFC 1034:ftp://ftp.is.co.za/rfc/rfc1034.txt。

(6)Bind 9常见问题回答:http://www.isc.org/products/BIND/FAQ.html

(7)RHEL 4中关于DNS配置文档:http://www.redhat.com/docs/manuals/enterprise/RHEL-4-Manual/en-US/Reference_Guide/ch-bind.html

(8)Bind 9管理员参考手册:http://www.nominum.com/content/documents/bind9arm.pdf

(9)Internet定级域名目录:http://www.iana.org/gtld/gtld/htm

(10)DNS国家代码:http://www.iana.org/cctld/cctld-whois.htm

3.11 本章小结

DNS是网络服务的基础,要长期不断地保持其正常运行,应该定期检测每一台DNS服务器。域名系统的配置和管理是一项比较复杂和烦琐的系统管理任务,它对整个网络的运行影响极大。为了保证DNS服务器的安全运行,不仅要使用可靠的服务器软件版本,而且要对DNS服务器进行安全配置,同时还要跟踪服务器软件和操作系统的各种漏洞。