5. 使用非root权限运行BIND
在Linux内核2.3.99以后的版本中,可以以-u选项以非root权限运行BIND。命令如下:
|
上面的命令表示以nobody用户身份运行BIND。使用nobody身份运行能够降低缓冲区溢出攻击所带来的危险。
6. 控制区域(zone)传输
默认情况下BIND的区域(zone)传输是全部开放的,如果没有限制那么DNS服务器允许对任何人都进行区域传输的话,那么网络架构中的主机名、主机IP列表、路由器名和路由IP列表,甚至包括各主机所在的位置和硬件配置等情况都很容易被入侵者得到。因此,要对区域传输进行必要的限制。可以通过在/etc/named.conf文件当中添加以下语句来限制区域传输:
![]() |
这样只有IP地址为:从192.168.0.52到192.168.0.109的主机能够同DNS服务器进行区域传输。
7. 请求限制
如果任何人都可以对DNS服务器发出请求,那么这是不能接受的。限制DNS服务器的服务范围很重要,可以把许多入侵者据之门外。修改BIND的配置文件:/etc/named.conf加入以下内容:
![]() |
这样所有的用户都可以访问yourdomain.com的DNS服务器,但是只有168.192.1.0网段的主机用户可以请求DNS服务器的任意服务。
另外也不要允许其他网段的主机进行递归询问,在上面文件最后加入一行即可:
![]() |
8. 其他強化措施:
(1)使用存取控制清单 (Access Control Lists),主要目的在于产生地址配对清单。
语法:acl “name” { address_match_list };
address_match_list:地址匹对清单。
例子:acl “mis”{192.168.200.15,192.168.143.192/26};
(2)使用Forwarders代询服务器机制,它将自己无法解析的查询转送到某特定的服务器。
语法:forwarders ip_address_liest
例子:以下是建议的 forwarders 设定(在/etc/named.conf中)
orwarders { // 指定提供查询的上层 DNS。
www.twnic.net.tw ; // 到上层 (twnic) 的 DNS 查询。
};
需注意的是通常我们指定的是到本身上一层 dns,但也可能因 dns 缓存有误而转送到错误的服务器上。
(3)使用allow-transfer:目的在于只允许授权的网域主机能更新、读取 DNS 辖区内的记录。
语法:allow-transfer { <address_match_list> };
例子:address_match_list:允许进行 DNS 辖区数据传输主机的 IP 列表。
(4)allow-update:目的在于指定能向本 dns 服务器提交动态 dns 更新的主机
语法:allow-update { <address_match_list> };
例子:address_match_list:允许能向本 DNS 服务器提交动态 DNS 更新的主机 IP 列表
9. 使用DNSSEC
DNS欺骗spoofing 对目前网络应用, 最大的冲击在于 冒名者借着提供假的网域名称与网址的对照信息, 可以将不知情用户的网页联机, 导引到错误的网站, 原本属于用户的电子邮件也可能因而遗失, 甚而进一步空开成为阻断服务的攻击。所幸, 目前较新的 BIND 版本, 针对这一类问题, 已经有加入许多改进的方法, 不过真正的解决方案, 则有赖封包认证机制的建立与推动。DNSSEC就是试图解决这一类问题的全新机制, BIND9 已经完整加以设计并完成。DNSSEC引入两个全新的资源记录类型:KEY和SIG,允许客户端和域名服务器对任何DNS数据的来源进行密码验证。
DNSSEC主要依靠公钥技术对于包含在DNS中的信息创建密码签名。密码签名通过计算出一个密码hash数来提供DNS中数据的完整性,并将该hash 数封装进行保护。私/公钥对中的私钥用来封装hash数,然后可以用公钥把hash数译出来。如果这个译出的hash值匹配接收者刚刚计算出来的hash树,那么表明数据是完整的。不管译出来的hash数和计算出来的hash数是否匹配,对于密码签名这种认证方式都是绝对正确的,因为公钥仅仅用于解密合法的hash数,所以只有拥有私钥的拥有者可以加密这些信息。
10. 为DNS服务器配置DNS Flood Detector
DNS Flood Detector是针对DNS服务器的Syn Flood攻击检测工具,用于侦测恶意的使用DNS查询功能。它利用libpcap 的网络数据包捕获函数功能检测网络流量来判断是否受到Syn Flood攻击, DNS Flood Detctor运行方式分成:守护进程(daemon)模式 和后台( bindsnap) 模式。以守护进程模式运行时它 会通过syslog 发出警示(/var/log/messages),以后台模式运行时可以得到实时的查询状态。
下载安装:
![]() |
命令格式:
dns_flood_detector [选项]
主要选项:
-i IFNAME 监听某一特定接口。
-t N 当每秒查询数量超过N值时发出警示.
-a N 经过 N 秒后重置警示。
-w N 每隔 N 秒显示状态。
-x N 创建 N个 buckets。
-m N 每隔N秒显示所有状态。
-b 以后台模式执行(bindsnap)。
-d 以守护进程模式执行(daemon)。
-v 显示较多的输出信息。
-h 显示使用方式。
应用实例:
dns_flood_detector -b -v -v –t3 见下图。
![]() |
dns_flood_detector工作界面 |
messages的纪录:以守护进程模式执行,纪录每秒超过3次查询的纪录,显示最多信息,包含A PTR MX 纪录等。
.
分页: [1] [2] [3] [4]
TAG: 服务器 DNS BIND