关于BIND

/ns/wz/sys/data/20010521041723.htm

什么是BIND

BIND最早起源于美国DARPA资助研究的一个伯克利大学研究生课题。目前它由因特网软件联合会(Internet Software Consortium)负责进行维护和开发。它属于免费软件,能够运行在当前大多数系统平台之上。人们可以在网络上自由下载其源代码,进行安装、运行或研究。目前的安装版主要包括两个系列,其一是4.9.x,其二是8.2.x。它们之间的简要对比见表1。

从比较中可以发现,版本8.x.x代表着发展趋势,其当前最新的版本是在1999年11月12日发表的8.2.2P5(其中的P5表示补丁等级),而4.9.x已经开始退出舞台。遗憾的是,国内运行的许多域名服务使用的都是厂商操作系统中的域名服务器,版本较为老化。例如SUN公司的Solaris2.6、2.5等,在缺省安装时装载的是4.9.3,并且不能通过简单地打补丁包来升级。

表1 版本8.x.x与4.9.x之间的比较  
配置文件
最新版本
特点及未来发展

8.x.x
Named.conf
8.2.2 P5
功能先进,并准备升级至9.x

4.9.x
Named.boot
4.9.7
不再开发新的版本,功能少、漏洞多

一般来说,软件版本升级除了提供更新的功能之外,就是弥补网络安全方面的漏洞,BIND也不例外。由于BIND通常以超级用户身份运行,所以其安全漏洞导致的攻击或入侵对系统的威胁也非常严重。参照CERT站点的安全忠告CA-98.05以及CA-99.14,除了最新版本的BIND 8.2.2P5以外,其它所有的版本都存在各种各样的安全漏洞。例如对于低于4.9.7和8.1.2的版本,攻击者可以使其产生大量垃圾数据而宕机,造成拒绝服务攻击,甚至在某种配置(“fake-query yes”)下可以执行任意指令;对于版本8.2、8.2P1和8.2.1,它们存在“nxt bug”等一系列漏洞,一旦其配置出现问题,可以导致远程攻击者以超级用户身份运行任意命令或者造成拒绝服务攻击。

当前,许多域名服务器都允许任意用户运行“ls”命令来获得整个域的数据。这在大多数情况下可能会给网络系统带来潜在的威胁,为攻击者收集网络拓扑信息提供方便,并且增加了域名服务器的负担和网络负载。但是,老式的域名服务器在配置关闭“ls”命令时不方便,因此提高域名服务控制粒度也是升级域名服务器版本的重要原因。

安全设置BIND

BIND软件包可以从其主页http://www.isc.org/products/BIND/bind8.html处下载。该软件包通常包含三个部分,分别是源代码、程序文档和开发库:

● BIND 8.2.2 patchlevel 5 source package (1.3M,源代码)

● BIND 8.2.2 patchlevel 5 documentation (1.3M,程序文档)

● BIND 8.2.2 patchlevel 5 contrib packages (875K,开发库)。

对于一般的用户来说只需要下载源代码包。该软件包中包含了域名解析服务器(named)以及查询和调试所需的几个重要工具,例如nslookup、named-xfer等。它还提供了一个能够自动将版本4.9.x中的配置文件转换为新版本配置文件的工具named-bootconf。后面我们会讲到该工具的使用方法。

下面逐步介绍安装或升级需要的操作:

1. 确认机器有足够的空间

使用命令

#df -k

确保工作目录所在的分区有大约10M以上的自由空间。确保安装目标分区(缺省为/usr/local/sbin)有大约30M字节以上的自由空间。

2. 解压缩

在工作目录下,解压缩下载软件包bind-src.tar.gz。

命令格式:

#gzip -dc bind-src.tar.gz | tar xvf -

解压后会在当前目录下产生目录src,且所有源文件都在其中。

3. 编译

在缺省安装时,解压后进入src目录,运行

#cd src; make depend

当然,此时要保证主机上面安装有编译器,例如gcc,并且gcc 和make在超级用户的执行文件搜索路径中。

然后,运行命令

#make

#make install

4. 检查安装情况,并在需要时转换配置文件格式

缺省安装的执行文件目标目录在/usr/local/sbin,配置文件目录在/usr/local/etc。在需要的情况下,可以将原来4.9.x版本的配置文件转换成当前8.2.x的格式。命令格式为:

#/usr/local/sbin/named-bootconf < /etc/named.boot > /usr/local/etc/named.conf

5. 运行

为了使新安装的BIND起作用,需要将原来运行的in.named进程杀掉,然后运行新的named。命令格式为:

#kill -9 ′cat /etc/named.pid′

#/usr/local/sbin/named

6. 开机自动启动设置

为了保证在主机每次启动时能够自动运行新的域名服务器,需要编辑启动配置文件/etc/rc2.d/S72inetsvc,方法是将其中的/usr/sbin/in.named内容相应地改为/usr/local/sbin/named、而配置文件内容/etc/named.boot改为/usr/local/etc/named.conf。

提高篇

调试域名服务的方法有多种,最简单的是使用nslookup来检查域名服务器是否正常地工作。还有一些更为高级的方法,例如给服务进程发送中断信号、使用域名进程控制(ndc)等,下面做一个简要介绍。

调试的主要操作是:将域名服务器当前运行中保存在缓冲区(cache)的数据存入一个磁盘文件中,然后清空缓冲区。方法是给域名服务进程发送一个“INT”信号:

#kill -INT ′cat /usr/local/sbin/named.pid′

这时,缓冲区中的内容被保存进文件named-dump.db中(文件所在的目录位置可能会随主机平台的不同而不同)。管理员可以通过检查该文件来了解当前的域名服务器中的数据和指向,以便确定问题的所在。