当前位置:首页 > 网络安全 > 正文

Linux环境下的DNS安全保障技巧

2010-09-12 安全在线

 (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查询信息,从而保证了系统的安全性。并且,采用这种技术可以有效地防止信息泄漏。

  在BIND 9中可以使用view语句进行配置分离DNS。view语句的语法为:

  view view_name {

  match-clients { address_match_list };

  [ view_option; ...]

  zone_statement; ...

  };

  其中:

  ◆match-clients:该子句非常重要,它用于指定谁能看到本view。可以在view语句中使用一些选项;

  ◆zone_statement:该子句指定在当前view中可见的区声明。如果在配置文件中使用了view语句,则所有的zone语句都必须在view中出现。对同一个zone而言,配置内网的view应该置于外网的view之前。

  下面是一个使用view语句的例子,它来自于BIND9的标准说明文档:

  view "internal" { match-clients { our-nets; };

  // 匹配内网客户的访问

  recursion yes;

  // 对内网客户允许执行递归查询 zone "example.com" {

  // 定义内网客户可见的区声明

  type master; file "example.com.hosts.internal";

  };

  };

  view "external" { match-clients { any; };

  // 匹配 Internet 客户的访问

  recursion no;

  // 对 Internet 客户不允许执行递归查询 zone "example.com" {

  // 定义 Internet 客户可见的区声明 type master;

  file "example.com.hosts.external"; };

  };

  接下来,需要在example.com.hosts.internal中创建内网客户可见的区文件,并在 example.com.hosts.external中创建Internet客户可见的区文件。该区文件的编写可以根据用户的实际情况,可以参看上面介绍的内容,此处不再赘述。

大家都爱看
查看更多热点新闻