![在 Linux 中,使用路由将 IP 置于黑洞是否会比丢弃 iptables 产生更好的性能?](https://linux22.com/image/597533/%E5%9C%A8%20Linux%20%E4%B8%AD%EF%BC%8C%E4%BD%BF%E7%94%A8%E8%B7%AF%E7%94%B1%E5%B0%86%20IP%20%E7%BD%AE%E4%BA%8E%E9%BB%91%E6%B4%9E%E6%98%AF%E5%90%A6%E4%BC%9A%E6%AF%94%E4%B8%A2%E5%BC%83%20iptables%20%E4%BA%A7%E7%94%9F%E6%9B%B4%E5%A5%BD%E7%9A%84%E6%80%A7%E8%83%BD%EF%BC%9F.png)
在 DDOS 攻击期间,如果我们发现想要阻止的 IP,使用空路由是否比 iptables 具有更好的性能?
空路由我们会做类似的事情:
ip route add blackhole <ip or range>
在 iptables 中:
/sbin/iptables -A INPUT -s <ip or range> -j DR
没有区别吗?我怀疑route
效果会更好,但不确定。
答案1
假设你基于以下原因进行屏蔽来源地址而不是目的地,那么在 raw/PREROUTING 中执行 DROP 就会很有效,因为您基本上可以在做出任何路由决策之前丢弃数据包。
但请记住,iptables 规则本质上是一个链接列表,为了在阻止多个地址时获得最佳性能,您应该使用 ipset。
另一方面,如果按目的地进行阻止,则路由表和 iptables 中的阻止可能没有什么区别,除非源 IP 被欺骗,在这种情况下黑洞条目可能会消耗路由缓存资源;在这种情况下,raw/PREROUTING 仍然是更好的选择。
答案2
在您尝试将数据包发回攻击者之前,您的传出路由不会有任何意义。到那时,您已经承担了套接字设置的大部分成本,甚至可能有一个线程被阻塞,等待内核得出您没有到主机的路由的结论,以及您的服务器进程在得出存在网络问题时所做的任何错误处理。
iptables 或其他防火墙将允许您阻止传入流量并在其到达服务器上的守护进程之前将其丢弃。它在这个用例中似乎明显更胜一筹。
答案3
iptables 是阻止 DDoS 攻击的标准工具。我碰巧在非常严重的 DDoS 攻击下拥有一个巨大的 iptables 列表,它工作得很好。我更喜欢 iptables。