如何防止公开递归 DNS 服务器被滥用于 DNS 放大

如何防止公开递归 DNS 服务器被滥用于 DNS 放大

我的业务需要提供开放和递归 DNS。当然,这个 DNS 已被 DNS 放大攻击严重滥用,导致仅由欺骗的 ANY 请求就造成 5-10 Mbps 的持续出站负载。因此,我必须找到一个解决方案来应对这个问题,至少要将滥用降到最低。我假设还有其他人遇到同样的问题,所以我想分享我的方法,因为它似乎是唯一公开分享的方法,超越了通常的建议“不要操作开放递归 DNS”……这根本没有帮助。

因此,我正在寻找允许我维护开放递归 DNS 运行的方法,同时尽量减少任何尝试攻击可能造成的影响。

有人知道其他解决方案吗?

我的方法很简单,就是当我发现放大攻击时,自动执行我手动执行的操作:

  • 运行 tcpdump 来确定传出流量的特征。一旦您确信它确实是 DNS ANY 请求,请使用以下命令捕获它们:tcpdump -n udp dst port 53 | grep ANY

  • 然后使用 iptables 删除具有上述特征的传出流量。

我发现绝大多数脚本小子使用的只是一些现成的 DNS amp 模板脚本,我只能猜测这些脚本可能包含“在此处插入目标端口”行...从而将输出限制到一个特定的目标端口。在这种情况下,只需识别该端口,并阻止任何从端口 53 (DNS) 发往该目标端口的 UDP 流量即可。如果做不到这一点,您可以丢弃所有发往目标 IP 地址的流量,因为您的 tcpdump 已显示这些流量正在“请求”重复的任何 DNS 查询 - 无论如何,这样做没有太多合法用途。

有可能你用这个来阻止合法流量,也有可能在 tcpdump 捕获时间之间仍然允许一些滥用。但考虑到替代方案,这只是一个小小的代价。

答案1

你没有提到你运行的是哪个名称服务器软件,但如果它有一些响应率限制计划,这可能是改善局势的一个良好开端。

另一个选择是引入一些额外的层来进行速率限制/阻止,但我建议使用一些深度 DNS 感知工具,而不是自己动手。
看看域名系统,一个非常灵活的 DNS 代理/负载均衡器(文档/配置示例)。

当然,如果可能的话,简单地锁定已知客户端的递归访问会容易得多。

相关内容