针对传入 DNS 反射攻击的对策

针对传入 DNS 反射攻击的对策

我的服务器目前正在遭受 DNS 反射攻击。我从端口 53 通过 UDP 收到大量我的服务器从未请求过的答案:

02:53:57.626156 IP(tos 0x0、ttl 50、id 0、偏移量 0、标志 [DF]、proto UDP(17)、长度 267)REFLECTING.OPEN.DNS.SERVER.domain > mydomain.com.11803: 30781- q: RRSIG?. 0/13/1 ns:. NS A.SOMENAMESERVER.NET.,.[|domain]

02:53:57.626382 IP(tos 0x0、ttl 50、id 0、偏移量 0、标志 [DF]、proto UDP(17)、长度 267)REFLECTING.OPEN.DNS.SERVER.domain > mydomain.com.11803: 30781- q: RRSIG?. 0/13/1 ns:. NS B.SOMENAMESERVER.NET.,.[|domain]

02:53:57.627804 IP(tos 0x0、ttl 50、id 0、偏移量 0、标志 [DF]、proto UDP(17)、长度 267)REFLECTING.OPEN.DNS.SERVER.domain > mydomain.com.24188: 30781- q: RRSIG?. 0/13/1 ns:. NS C.SOMENAMESERVER.NET.,.[|domain]

所以我想到对策就是限制源端口为 53 的入站数据包数量。iptables 应该没问题吧?

因此我将其与我的一些 iptables 技能结合起来:

-A 输入 -s A.TRUSTED.NAMESERVER -j 接受

-A 输入 -s B.TRUSTED.NAMESERVER -j 接受

-A 输入 -s C.TRUSTED.NAMESERVER -j 接受

-A 输入-p udp -m udp --sport 53 -m limit --limit 10/min -j LOG --log-prefix "53 DENY FROM: " --log-level 7

-A 输入-p udp -m udp --sport 53 -m limit --limit 10/min --limit-burst 20 -j 接受

记录攻击,并在攻击过多时将其爆发。如果成功的话,我不会在这里写。

肯定有什么地方出错了,我搞不清楚到底是什么。它记录正确,但即使数量大于突发限制,它也不会丢弃任何包。

我非常感谢你的帮助。

问候马塞尔

答案1

我看不到你的规则中有 DROP 选项。也许你想添加

-A INPUT -p udp -m udp --sport 53 -j DROP

在你的规则的末尾?

答案2

如果反射数据包被发送到已关闭的 UDP 端口,则接收端的内核将生成 ICMP 错误消息。此处理非常便宜,因此处理 UDP 数据包和发送 ICMP 错误所需的处理时间可能是您最不需要担心的事情。

在某些情况下,ICMP 错误占用的上行带宽可能是一个真正令人担忧的问题。在这种情况下,可能需要限制 ICMP 错误的速率。

但是,不建议默默丢弃所有 UDP 数据包而不发送 ICMP 错误。ICMP 错误是相关 DNS 服务器所有者拥有的唯一信号,可以告诉他们他们的 DNS 服务器正在遭受反射攻击。换句话说,通过默默丢弃数据包,您可以向可以缓解攻击的人隐藏攻击。

从技术上讲,设计一个可以自动缓解反射攻击的 DNS 服务器是可能的。但是,这种缓解必须依赖于 ICMP 错误消息。如果这种缓解方法得到广泛传播,那么通过悄悄丢弃所有攻击流量,您将更容易成为 DDoS 攻击的目标。

如果反射的 UDP 数据包到达开放的 UDP 端口,则处理这些反射的数据包在 CPU 时间方面会变得更加昂贵。在这种情况下,建议使用 iptables 规则来拒绝源端口为 53 或任何其他通常被滥用于反射攻击的服务所使用的端口,并且目标端口为您正在运行的服务的端口的数据包。我仍然不会丢弃它们,而是使用目标来REJECT生成与在关闭端口上看到的相同的 ICMP 错误。

相关内容