您的位置:首页 > 其它

菜鸟也玩DNS之构建一个安全的DNS服务器

2011-10-27 14:55 344 查看
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



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



查看系统日志,看看启动是否有问题:
# 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



在options标签之前建立一个访问控制列表
acl my-network {
192.168.1.0/24;
};



定义完之后,在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,外网用是不能访问的。
如果你达到了这个效果,说明配置成功。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  dns acl bind9 view chroot
相关文章推荐