今天,有个很久以前在公司的同事发邮件给我,他说我们的DNS有安全问题,他可以列出我们公司线上DNS域下的所有域名和IP地址。我感到非常惊讶,因为这是一个很严重的安全问题,对于一个黑客来说,等于他得到了公司所有对外服务域名和机器的外网IP地址。还好,我们没有把交换机的IP及内网IP也加到DNS中去,不然公司线上整个网架构都暴露在别人眼前了。
用nslookup命令试了一下,的确是可以把整个域下的域名和IP全部给list出来:
nslookup
> server 114.xxx.xxx.xx
> set type=any
> ls xxx.com
用上面的命令,就可以把我们公司某个域个的所有域名和IP全部给list出来了。
问题原因:一定是线上的DNS服务器设置出问题了。在网上查了一下,之所以会出现上面的问题,是因为公司线上DNS把区域传输给全开了。全开的原因是在配置DNS的时候,没有设置allow-transfer ,默认情况下,如果没有设置allow-transfer,那么区域传输就会对所有IP开放。
解决方法:在named.conf文件的options选项中增加如下配置: allow-transfer {“none”;};
用rndc重启named
测试是否成功:
> server 114.xxx.xxx.xx
Default Server: xx.xx.xx.com
Address: 114.xxx.xxx.xx
> set type=any
> ls xxx.xxx.com
[xxx.xxx.xxx.xxx]
*** Can't list domain xxx.xxx.com: Query refused
> quit
恩,问题解决了。
痛定思痛,我还是总结一下DNS安全方面的建议:
1、使用比较新版本的bind软件,并在配置中把相关的版本信息给隐藏掉。
配置举例:在named.conf的options中设置 version "[secured]";
2、把DNS服务器放到不同的机房中,以防机房网络出现问题,影响用户访问。建议是至少电信和联通机房各放一个
3、限制可做递归查询的IP范围,如只为公司内部进行解析服务。
配置举例:在named.conf配置 allow-recursion { inner; };
4、限制区域传送的IP范围,这个上面已经说的很清楚了。
5、为了减少DNS投毒攻击的威胁,将权威DNS服务器(这些服务器负责解析某些特定的域名)与缓存 DNS 服务器(这些服务器负责代替其他机器解析域名,并将结果在其本地缓存,以减少权威 DNS 服务器负载和不必要的网络间流量)分开部署。
6、在DNS服务器上,只跑DNS服务,还混放其它对外的网络服务。
7、在DNS服务器上,让bind程序使用普通用户来跑,并使用chroot。
8、也不要轻易透露服务器其他信息。为了让潜在的黑客更难得手,建议不要在DNS配置文件中使用这HINFO 和 TXT两个资源记录。
9、合理的设置SOA值,不要把刷新查询或区域传送时间设置的太小。