我的业务需要提供开放和递归 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 捕获时间之间仍然允许一些滥用。但考虑到替代方案,这只是一个小小的代价。