DNS是互联网的基础服务,同时bind是最流行的开源DNS软件,因为非常流行,所以受到的***性也非常大,因此我们有必要构建一个安全的DNS服务器。
构建一个安全的DNS服务有如下几种措施(基础bind编译安装及配置部分参考: 菜鸟也玩DNS之配置DNS缓存服务器):
第一种,让named以普通用户运行
# useradd -s /bin/false bind   创建一个不允许登录系统的用户bind
# chown bind /usr/local/named/dns/    把存放named.pid的目录的所有权赋予bind用户
# /usr/local/named/sbin/rndc stop     停止已经运行的named
# /usr/local/named/sbin/named -4 -u bind     已bind用户启动named
查看系统进程:
# ps -ef|grep named
01
named已经已bind这个普通用户运行了。
第二种,以chroot牢笼方式运行named
所谓牢笼,就是把程序限定在这个目录中运行,无法访问其它目录,这样也大大提升了安全性。
# useradd -s /bin/false bind   创建一个不允许登录系统的用户bind
# mkdir -p /chroot/named    创建牢笼目录named运行的时候需要访问一些设备文件,读取named配置文件及区域资源文件,它们所在的目录有如下几个:
/usr/local/named/etc   存放named.conf配置文件
/usr/local/named/dns    存放named.pid文件
/usr/local/named/dns/zone    存放区域文件
/dev    存放named需要的几个设备文件
注意:这些目录除了/dev是默认的,其余的存放相关文件的目录都是你安装bind的时候手工指定的。
下面,我们需要在/chroot/named目录下创建对应的几个目录
#mkdir –p /chroot/named/ dev
#mkdir –p /chroot/named/ usr/local/named/etc
#mkdir –p  /chroot/named/ usr/local/named/dns
#mkdir –p /chroot/named/ usr/local/named/dns/zone
# chown bind /chroot/named/usr/local/named/dns/          把存放named.pid的目录的所有权赋予bind用户
# mknod /chroot/named/dev/random c 1 8     创建供named调用的设备文件
# cp /usr/local/named/etc/* /chroot/named/usr/local/named/etc/      复制named.conf等基本配置文件到牢笼对应目录下
# cp /usr/local/named/dns/* /chroot/named/usr/local/named/dns/     复制named.pid到对应牢笼目录下
# cp /usr/local/named/dns/zone/* /chroot/named/usr/local/named/dns/zone/     复制区域文件到对应牢笼目录下
# /usr/local/named/sbin/rndc stop    停止之前运行的named进程
# /usr/local/named/sbin/named -4 -u bind -t /chroot/named/    用普通用户bind以牢笼方式启动
使用命令查看named进程:
# ps -ef|grep named
01
查看系统日志,看看启动是否有问题:
# tail /var/log/messages
Oct 24 22:41:52 localhost named[6932]: zone 0.0.127.in-addr.arpa/IN: loaded serial 1997022700
Oct 24 22:41:52 localhost named[6932]: zone 1.168.192.in-addr.arpa/IN: loaded serial 20031001
Oct 24 22:41:52 localhost named[6932]: zone xiaocui.com/IN: loaded serial 1053891162
Oct 24 22:41:52 localhost named[6932]: zone localhost/IN: loaded serial 42
Oct 24 22:41:52 localhost named[6932]: managed-keys-zone ./IN: loaded serial 0
Oct 24 22:41:52 localhost named[6932]: running
如果你看到类似以上内容,说明启动成功,加载各种区域文件成功。
第三种,通过ACL控制访问用户来源
编辑named.conf配置文件
# vi /usr/local/named/etc/named.conf
02  
在options标签之前建立一个访问控制列表
acl my-network {
192.168.1.0/24;
};
03
定义完之后,在options标签中允许这个ACL所定义的网络内的用户进行查询
options {
directory "/usr/local/named/dns/zone";
pid-file "/usr/local/named/dns/named.pid";
allow-recursion { my-network; };
};
配置完之后重启named进程或重新加载配置文件,这样以后就只有ACL中指定的网段用户才可以通过这个DNS来进行查询,其余的都将被拒绝。
第四种、通过view控制用户的访问范围
 加入我们有一台DNS服务器,我们希望这台DNS服务器只对内网用户开放所有的DNS解析,对外只开放部分DNS查询功能,这个时候我就需要用到view这种功能。view可以针对不同的用户,提供不同的查询范围。
配置如下:
编辑named.conf配置文件
#vi /usr/local/named/etc/named.conf
首先定义一个内网ACL
acl my-network {
192.168.1.0/24;
};
然后定义供内部用户使用的view:A
view “A”{
match-clients { my-network; };    指定本地内网
recursion yes;    允许递归查询
zone “xiaocui.com” {
type master;
file “xiaocui.com.zone.A”
};
};
定义一个供所有用户使用的view:B
view “B”{
match-clients { any; };     所有用户
recursion yes; 允许递归查询
zone “xiaocui.com” {
type master;
file “xiaocui.com.zone.B”
};
};
配置完named.conf文件,我们还需要在区域文件存放目录创建对应的区域文件。
vi /usr/local/named/dns/zone/xiaocui.com.zone.A     针对内网用户的区域文件
$TTL    86400
@            IN SOA   xiaocui.com. root.xiaocui.com. (
                                 1053891162      ; serial (d. adams)
                                 3H                       ; refresh
                                 15M                    ; retry
                                 1W                      ; expiry
                                 1D )                     ; minimum
        IN NS     xiaocui.com.
        IN A      192.168.1.10
www     IN A      192.168.1.100
mail      IN A       192.168.1.101
oa         IN A       192.168.1.102     给内网用户开放OA
ftp        IN A        192.168.1.103     给内网用户开放ftp
vi /usr/local/named/dns/zone/xiaocui.com.zone.B    针对所有用户的区域文件
$TTL 86400
@ IN SOA xiaocui.com. root.xiaocui.com. (
1053891162 ; serial (d. adams)
3H ; refresh
15M ; retry
1W ; expiry
1D ) ; minimum
IN NS xiaocui.com.
IN A 192.168.1.10
www IN A 192.168.1.100   
mail IN A 192.168.1.101
配置完成之后,重启named进程或重新加载配置文件。使用内网用户可以访问到oa.xiaocui.com和ftp.xiaocui.com,外网用是不能访问的。
如果你达到了这个效果,说明配置成功。