对策与传入的DNSreflection攻击

我目前正在经历对我的服务器的DNSreflection攻击。 我从端口53通过UDP获得大量的答案,我的服务器从来没有要求:

02:53:57.626156 IP(tos 0x0,ttl 50,id 0,offset 0,flags [DF],proto UDP(17),length 267)REFLECTING.OPEN.DNS.SERVER.domain> mydomain.com.11803:30781 – 问:RRSIG? 。 0/13/1纳秒:。 NS A.SOMENAMESERVER.NET。,。[| domain]

02:53:57.626382 IP(tos 0x0,ttl 50,id 0,offset 0,flags [DF],proto UDP(17),length 267)REFLECTING.OPEN.DNS.SERVER.domain> mydomain.com.11803:30781 – 问:RRSIG? 。 0/13/1纳秒:。 NS B.SOMENAMESERVER.NET。,。[| domain]

02:53:57.627804 IP(tos 0x0,ttl 50,id 0,offset 0,flags [DF],proto UDP(17),length 267)REFLECTING.OPEN.DNS.SERVER.domain> mydomain.com.24188:30781 – 问:RRSIG? 。 0/13/1纳秒:。 NS C.SOMENAMESERVER.NET。,。[| domain]

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

所以我把这一点与我的小iptables技能:

-A INPUT -s A.TRUSTED.NAMESERVER -j ACCEPT

-A INPUT -s B.TRUSTED.NAMESERVER -j ACCEPT

-A INPUT -s C.TRUSTED.NAMESERVER -j ACCEPT

-Ainput-p udp -m udp -sport 53 -m limit -limit 10 / min -j LOG – 日志前缀“53 DENY FROM:”–log-level 7

-Ainput-p udp -m udp -sport 53 -m限制 – 限制10 / min – 限制突发20 -j ACCEPT

logging攻击并在攻击太多时将其破坏。 那么我不会写在这里,如果它成功了。

有什么一定是错的,我不知道是什么。 它可以正确logging,但是即使数字>突发限制,也不会丢弃任何包。

我非常感谢你的帮助。

问候马塞尔

我的规则中看不到任何DROP。 也许你想追加

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

在你的规则结束?

如果reflection的数据包被发送到一个封闭的UDP端口,那么接收端的内核将产生一个ICMP错误信息。 这个处理非常便宜,所以处理UDP数据包和发送ICMP错误所需的处理时间很可能是您最担心的问题。

在某些情况下,由ICMP错误消耗的上行带宽可能是真正的问题。 在这种情况下,可能需要ICMP错误的速率限制。

然而,静默地丢弃所有UDP数据包而不发送ICMP错误是不可取的。 ICMP错误是所涉及的DNS服务器的所有者唯一的信号,可以告诉他们,他们的DNS服务器参与了reflection攻击。 换句话说,通过悄悄地丢弃数据包,你就隐藏了可以减轻攻击的人们的攻击。

devise一个自动缓解reflection攻击的DNS服务器在技术上是可行的。 但是,这种缓解将不得不依靠ICMP错误消息。 如果这种缓解方法变得普遍,那么通过悄悄地放弃所有的攻击stream量,您将使自己成为一个更容易攻击的DDoS攻击目标。

如果reflection的UDP数据包到达一个开放的UDP端口,那么就CPU时间而言,处理这些reflection的数据包将变得更加昂贵。 在这种情况下,build议使用iptables规则来拒绝源端口号为53的数据包,或其他由reflection攻击中常用的服务所使用的数据包,其目标端口是您正在运行的服务的目标端口。 我仍然不会丢弃它们,而是使用REJECT目标来产生与在封闭端口上看到的相同的ICMP错误。