操作系统  办公  实用知识  设计  开发  WEB开发  移动开发  数据库  软件工程  网管  安全  管理  信息化  答疑  渠道 

BIND8+ 域名服务器安全增强

2003-10-19 网友评论 0 条 点击进入论坛

B、如果需要对区域记录传输(自动或手工)进行TSIG签名,则:

 

1、用dnskeygen生成TSIG密钥,方法同上。

 

2、主域名服务器配置文件的内容(节选)如下:

 

// 定义认证的方法和共享密钥

key master-slave {

        algorithm hmac-md5;

        secret "mZiMNOUYQPMNwsDzrX2ENw==";

};

// 定义辅助域名服务器的一些特性

server 192.168.8.18 {

        transfer-format many-answers;

        keys { master-slave; };

};

// 区域记录定义

zone "nsfocus.com" {

        type master;

        file db.nsfocus.com;

        allow-transfer { 192.168.8.18; };

};

 

3、辅助域名服务器配置文件的内容(节选)如下:

 

// 定义认证的方法和共享密钥

key master-slave {

        algorithm hmac-md5;

        secret "mZiMNOUYQPMNwsDzrX2ENw==";

};

// 定义与主域名服务器通讯时的一些特性

server 192.168.8.19 {

        transfer-format many-answers;

        keys { master-slave; };

};

// 区域记录定义

zone "nsfocus.com" {

        type slave;

        file "bak.db.nsfocus.com";

        masters { 192.168.8.19; };

        allow-transfer { none; };

};

 

 

五.     实施DNSSec功能

说实在的,我一直在考虑需不需要在目前的版本中实施DNSSec功能。因为虽然ISC早已在BIND 8.1.x版本后增加了DNSSec的实现,但实际的应用却不常见,而且去年公布的NXT远程安全漏洞和DNSSec有关(实际上NXT就属于DNSSec实现的功能之一)。

最后我决定在本文不讨论如何实施DNSSec安全功能。 但不可否认,DNSSec确实是一项很好的安全技术,它通过加密DNS数据来提高了DNS 服务的安全性。主加密密钥用于对第一级域名的加密密钥进行加密签字,第一级域名(.com, .cn等)密钥用于对自身数据及其子域名密钥进行加密签名,以此类推。例如,nsfocus.com的域名服务器由.com域密钥签名,nsfocus.com域密钥则用于对www.nsfocus.com域名进行加密签名。

 

六.    实现BIND的chroot

(以FreeBSD系统平台为例)

 

步骤一:BIND-8的最新源代码版本获取和安装

 

    请到ISC FTP站点下载BIND的最新版本。

    BIND 8:http://www.isc.org/products/BIND/bind8.html

    BIND 9:http://www.isc.org/products/BIND/bind9.html

 

步骤二:构造静态(static)的named和named-xfer二进制文件 在编译和安装后,你需要构造可执行文件的静态链接版本。只要对%BIND%/src /port/freebsd目录下的Makefile.set文件稍加修改后即可。


修改文件内容:

 

''CDEBUG= -O2 -g''

 

替换为:

 

''CDEBUG= -O2 -static''

 

切换到BIND的源代码路径,执行"make clean"和"make"命令。在下面的步骤中将会把这些文件复制到chroot()目录下。

 

# cd /tmp/bind/src

# make clean ; make

 

本步骤构造的静态链接执行文件在运行时无需装载动态链接库。在chroot()环境中,这种“独立”可执行文件可避免出现缺少链接库文件问题。它在chroot()环境中无需任何静态链接库,可使服务配置简单化。其它所有的网络守护进程也可以编译和使用这种静态链接版本。

 

步骤三:构造BIND目录

 

为chroot()环境构造BIND目录。这个目录将在chroot()环境中被BIND当作系统根目录。在这里我使用/chroot/bind作为chroot后的根目录。

 

# cd /chroot/bind

# mkdir /chroot

# mkdir /chroot/dev

# mkdir /chroot/etc

# mkdir /chroot/etc/namedb

# mkdir /chroot/usr

# mkdir /chroot/usr/sbin

# mkdir /chroot/var

# mkdir /chroot/var/run

 

需要复制以下文件到其下的相应子目录中,和进行一些必要的处理:

 

# cp /etc/namedb/named.conf /chroot/bind/etc/

# cp /etc/localtime /chroot/bind/etc/

# grep bind /etc/group > /chroot/bind/etc/group

# cp -R /etc/namedb/ /chroot/bind/etc/namedb/

# mknod /chroot/bind/dev/null c 2 2

# chmod 666 /chroot/bin/dev/null

# cp /tmp/bind/src/bin/named/named /chroot/bind/usr/sbin/

# cp /tmp/bind/src/bin/named-xfer/named-xfer /chroot/bind/

 

另外还可根据需要指定日志记录目录(如/var/log),请参考下面的章节或named.conf的手册页。

步骤四:添加bind用户和组(如果没有的话。如果已经有bind或named之类的用户 和组,请跳过本步骤。)

 

在/etc/passwd和/etc/group文件中添加bind用户和组。它们是DNS服务器运行时的UID/GID。

此时,你可以到chroot环境中执行"chown -R bind.bind /chroot/bind/etc/namedb"命令。这样当你向系统发送中断信号(kill -INT )时,named进程能够保存服务器缓存和统计信息。如果该目录为root所有则named进程无法将输出写到目录中,但不会影响named服务器功能。另一个选择是仅改变目录权限(使named用户具有写权限),而属主仍然是root。这种方法也是可行的,但必须小心设置,确保其它用户不会修改named记录!

 

*** 重要警告***

不要用一个已存在的UID/GID(如"nobody")运行named。记住,以chroot环境中使用任何已存在的UID/GID都可能会影响到服务的安全性。必须养成在chroot环境中为每一个守护进程提供独立的UID/GID的习惯。

 

步骤五:其它必要调整

 

如果在named.conf中还指定了另外的目录和文件,也要相应地在chroot()环境中(在本例中即/chroot/bind/目录)进行设置。

 

步骤六:调试

 

1、终止系统中原有的syslogd和named守护进程。

 

# killall syslogd named

 

2、用适当的参数重新启动syslogd守护进程。

 

# syslogd -s -p /chroot/bind/var/run/log

 

3、用适当参数重新启动named守护进程。

 

# /chroot/bind/named -u bind -g bind -t /chroot/bind

4、检查syslogd/named守护进程、监听端口是否正常,和/var/log/messages文件 中named进程启动时是否正常。

 # ps auwx|grep syslogd

root     5896  0.0  1.7   896  508  ??  Ss    9:44PM   0:00.10 syslogd -s -p

/chroot/bind/var/run/log

# ps auwx|grep named

bind     5941  0.0  4.9  1652 1444  ??  Is    9:52PM   0:00.01

/chroot/bind/usr/sbin/named -u bind -g bind -t /chroot/bind

# netstat -an|grep 53

tcp4       0      0  127.0.0.1.53           *.*                    LISTEN

tcp4       0      0  192.168.8.19.53        *.*                    LISTEN

udp4       0      0  127.0.0.1.53           *.*

udp4       0      0  192.168.8.19.53        *.*

 

步骤七:修改系统启动脚本

 

对于FreeBSD系统,在/etc/rc.conf文件中增加如下内容即可:

 

syslogd_enable="YES"

# 如果希望禁止向外发送日志,将-s换成-ss。

syslogd_flags="-s -p /chroot/bind/var/run/log"

 

named_enable="YES"

named_program="/chroot/bind/usr/sbin/named"

named_flags="-u bind -g bind -t /chroot/bind"

 

注:如果在其它系统平台,如OpenBSD、Linux、Solaris,则可能会稍有不同。主要是不同平台上的syslog实现不尽相同。例如对于OpenBSD和Linux系统,打开日志别名socket的命令是"syslogd -a /chroot/bind/var/run/log",而Solaris的syslogd守护进程则不支持别名。因此Solaris系统平台上的chroot需要通过另外的方法实现,关于具体的实现过程我会在另外的文章中说明。

七.    结束语

安全增强配置的文章写完了,但并不是说只要你按本文提到的方法和技术实施就能万无一失,高枕无忧了。其实以上设置对NXT和TSIG远程漏洞攻击并不没太多的防御作用,充其量只不过是要编写更多的shellcode代码来突破chroot环境的限制。即使用allow-query等极其严格地限制查询客户端(实际上在互联网上并不现实),基于UDP协议的TSIG攻击技术也只需构造伪造IP地址的数据包即可绕过其限制。

所以,在对BIND(还有其它应用服务)进行安全增强配置的基础上,安全管理员仍然需要密切关注最新的安全公告、安全补丁和安全技术,经常与专业的计算机安全专家交流知识和经验,再辅以必要的安全产品和安全服务,才能更充分地保护好自己的网络和计算机用户,抵御各种恶意攻击。

已有 0 位对此文章感兴趣的网友发布了看法    
我来评两句 登录邮箱: 密码:
  匿名发表
今日推荐
技术文库(共有 46430 篇文章)
操作系统
办公软件
实用知识
网络管理
软件开发
WEB开发
软件工程
数据库
设计在线
信息安全
行业信息化
管理信息化
重点推荐
电子杂志订阅
点击电子杂志名称查看样刊
输入E-mail地址即可订阅
E-mail