我们都知道开放解析器,这个问题有点相反。我有一个 DNS 服务器,它被锁定到某些 CIDRacl trusted {[..]
options {
[..]
allow-query {
// Accept queries from our "trusted" ACL. We will
// allow anyone to query our master zones below.
// This prevents us from becoming a free DNS server
// to the masses.
trusted;
};
这有效。
但是,它无法阻止允许范围内的受感染主机发送欺骗性请求(最常见的类型是 ANY)。这些请求已解决,响应仍会发送到“请求”它的欺骗性 IP(通常是攻击者的目标)。
如何防止 DNS 服务器解析受信任范围之外的请求域?这难道不是 bind 应该做的事情吗?
答案1
这不是您应该在服务层尝试解决的问题。
- 不允许网外流量向您的 DNS 侦听器发出入站请求。
- 对客户生成的数据包执行源地址验证(如果适用)。这可以防止源自网络内部的放大攻击。
这些问题的根源在于您面前的网络拓扑设计。试图从服务器本身解决这些问题是注定要失败的。
答案2
问题中的配置摘录中的注释指的是您的服务器对某些区域做出权威响应。对于攻击者滥用权威服务器的情况,配置响应率限制以减轻这种情况。
但是,在滥用启用了递归的服务器进行攻击的情况下,锁定对自己网络的递归访问并结合入口过滤是阻止这种情况的最佳方法。(正如@Andrew-B 所建议的)
关于 BIND,有必要了解不同的配置指令如何allow-*
交互当您覆盖其中一个或多个时(如果不了解这一点,就不会那么明显,例如,覆盖会如何allow-query
影响其他指令,如allow-recursion
)。
答案3
有多种方法可供您选择。您可能希望将它们结合起来。
- 使用拆分 DNS 配置外部区域以拒绝递归。拆分 DNS 将允许您在外部提供非递归权威 DNS 服务器,在内部提供功能齐全的递归 DNS 服务器。考虑记录失败的请求。
- 阻止不需要的网络向您的服务器发送请求。(端口 53 UDP 和 TCP。)这可以在外部防火墙上完成,或者在某些系统(包括 Debian)上,在服务器的防火墙上完成。考虑将可以查询您的服务器的 CIDR 限制为其应支持的 CIDR。
- 用于
fail2ban
动态阻止请求网络。
从您的问题来看,您有许多计算机感染了僵尸网络软件。识别和清理这些系统非常重要。这超出了这个问题的范围。如果您的路由器支持此功能,请考虑限制可以发出请求的 IP 地址。