(1)限制名字服务器递归查询功能 关闭递归查询可以使名字服务器进入被动模式,它再向外部的DNS发送查询请求时,只会回答自己授权域的查询请求,而不会缓存任何外部的数据,所以不可能遭受缓存中毒攻击,但是这样做也有负面的效果,降低了DNS的域名解析速度和效率。 以下语句仅允许172.168.10网段的主机进行递归查询: allow-recusion {172.168.10.3/24; } (2)限制区传送(zone transfer) 如果没有限制区传送,那么DNS服务器允许对任何人都进行区域传输,因此网络架构中的主机名、主机IP列表、路由器名和路由IP列表,甚至包括各主机所在的位置和硬件配置等情况都很容易被入侵者得到在DNS配置文件中通过设置来限制允许区传送的主机,从一定程度上能减轻信息泄漏。但是,需要提醒用户注意的是:即使封锁整个区传送也不能从根本上解决问题,因为攻击者可以利用DNS工具自动查询域名空间中的每一个IP地址,从而得知哪些IP地址还没有分配出去,利用这些闲置的IP地址,攻击者可以通过IP欺骗伪装成系统信任网络中的一台主机来请求区传送。 以下语句仅允许IP地址为172.168.10.1和172.168.10.2的主机能够同DNS服务器进行区域传输: acl list { 221.3.131.5; 221.3.131.6; zone "test.com" { type master; file "test.com "; allow-transfer { list; }; }; }; (3)限制查询(query) 如果任何人都可以对DNS服务器发出请求,那么这是不能接受的。限制DNS服务器的服务范围很重要,可以把许多入侵者据之门外。修改BIND的配置文件:/etc/named.conf加入以下内容即可限制只有210.10.0.0/8和211.10.0.0/8网段的查询本地服务器的所有区信息,可以在options语句里使用如下的allow-query子句: options { allow-query { 210.10.0.0/8; 211.10.0.0/8;}; }; (4)分离DNS(split DNS) 采用split DNS(分离DNS)技术把DNS系统划分为内部和外部两部分,外部DNS系统位于公共服务区,负责正常对外解析工作;内部DNS系统则专门负责解析内部网络的主机,当内部要查询Internet上的域名时,就把查询任务转发到外部DNS服务器上,然后由外部DNS服务器完成查询任务。把DNS系统分成内外两个部分的好处在于Internet上其它用户只能看到外部DNS系统中的服务器,而看不见内部的服务器,而且只有内外DNS服务器之间才交换DNS查询信息,从而保证了系统的安全性。并且,采用这种技术可以有效地防止信息泄漏。