一段时间以来,我一直收到大量 DNS 请求,但这些请求只是偶尔出现。现在,它已经发展成为 DDOS,多个 IP 同时发送流量。它使我的互联网连接在上传速度上饱和。我关闭了递归(默认情况下它处于开启状态),这可能是问题的根源。但是,现在,在暗网上的某个地方,有人发布消息说我的服务器已开启递归。因此,我开启了响应速率限制,限制为 10 秒。现在,我每天收到(只有,哈哈!)大约 600 万个请求!这已经卸载了网络连接,但我的日志文件每天达到几百 MB。消息如下所示:
Jul 22 11:03:05 jelinux named[26058]: client 54.36.104.65#10683 (access-board.gov): query (cache) 'access-board.gov/ANY/IN' denied
Jul 22 11:03:05 jelinux named[26058]: client 54.36.104.65#10683 (access-board.gov): rate limit drop REFUSED error response to 54.36.104.0/24
有没有办法减少消息流量?我想保留一份被拒绝的 IP 报告,但也许每分钟左右每个 IP 一行的报告就能告诉我有关攻击 IP 数量和请求数量的信息。
答案1
关闭递归后,攻击者的资源可能已经浪费了(你发送的REFUSED
响应很小,而不是ANY
他们尝试的查询的大响应,因此不再有放大),他们只是还没有注意到,使用其他完全开放的递归器可能会获得更多收益。查询洪流可能很快就会自行结束。
正如您所指出的,BIND 中的内置机制是响应率限制,可以通过不同的方式进行调整,包括发送截断的响应以触发真实客户端切换到 TCP(对于正常响应很有用,但您已经发送了REFUSED
)或直接丢弃响应。然而,它的设计仍是为了尽可能保持服务的可用性,这意味着不会完全拒绝任何人。
BIND 手册的 RRL 部分 (也适用于任何其他涉及丢弃响应的解决方案) 中一个很好的观点是,在权威服务器上丢弃响应会让您更容易成为缓存中毒攻击的目标:
注意:删除权威服务器的响应可能会降低第三方成功伪造对递归解析器的响应的难度。防止伪造响应的最佳安全措施是让权威运营商使用 DNSSEC 签署其区域,并让解析器运营商验证响应。当这不是一个选项时,更关心响应完整性而不是洪水缓解的运营商可能会考虑将 slip 设置为 1,导致所有速率限制的响应被截断而不是被删除。这会降低速率限制对反射攻击的有效性。
还有其他选择,例如域名系统你可以把它作为反向代理放在前面,并让它动态拒绝或丢弃超出可接受查询率的客户端。这里的一个优点是,顾名思义,dnsdist 是 DNS 感知的,而且非常灵活。因此,您可以选择例如ANY
单独严格限制查询和/或 rcodeREFUSED
,同时不影响其他查询(不影响其他查询可能基于常规规则反而)。
正如迈克尔所说失败2ban它可以动态添加防火墙规则,根据过多的日志条目来阻止 IP。相比之下,这有点生硬,但从限制流量和日志垃圾邮件的角度来看肯定是有效的,但一旦触发,就会完全丢弃流量。
再次强调,对于任何涉及删除查询的选项,请牢记上述有关缓存中毒的说明。