Linux:防止传出 TCP 泛洪

Wil*_*lem 9 networking linux debian denial-of-service

我在负载均衡器后面运行数百个网络服务器,托管许多不同的站点,其中包含大量应用程序(我无法控制其中的应用程序)。大约每月一次,其中一个网站被黑客入侵,并上传洪水脚本以攻击某些银行或政治机构。过去,这些都是 UDP 泛洪,通过阻止单个 Web 服务器上的传出 UDP 流量可以有效解决。昨天,他们开始使用许多 TCP 连接到端口 80 来从我们的服务器淹没一家大型美国银行。由于这些类型的连接对我们的应用程序完全有效,仅仅阻止它们是不可接受的解决方案。

我正在考虑以下替代方案。你会推荐哪一个?您是否实施了这些,以及如何实施?

  • 限制带有源端口的网络服务器(iptables)传出 TCP 数据包!= 80
  • 相同但有排队 (tc)
  • 每台服务器每个用户的速率限制传出流量。相当大的管理负担,因为每个应用程序服务器可能有 1000 个不同的用户。也许是这样:我如何限制每个用户的带宽?
  • 还要别的吗?

当然,我也在寻找方法来最大限度地减少黑客进入我们托管站点的机会,但由于该机制永远不会 100% 防水,我想严格限制入侵的影响。

更新:我目前正在使用这些规则进行测试,这可以防止这种特定的攻击。你会如何建议让它们更通用?当我只对 SYN 数据包进行速率限制时,我是否错过了已知的 TCP DoS 攻击?

iptables -A OUTPUT -p tcp --syn -m limit --limit 100/min -j ACCEPT
iptables -A OUTPUT -p tcp --syn -m limit --limit 1000/min -j LOG --log-prefix "IPTables-Dropped: " --log-level 4
iptables -A OUTPUT -p tcp --syn -j REJECT --reject-with tcp-reset
Run Code Online (Sandbox Code Playgroud)

干杯!

Hex*_*Hex 3

我认为最好的解决方案以及对我来说效果很好的解决方案是限制目标 IP 的连接/数据包数量。将限制设置为合理的速率将防止攻击者向目标发送大量连接。设置端口和协议不是一个好主意,因为如果攻击者今天发送 http 洪水,明天他将使用不同类型的攻击。因此,限制每个 ip 的连接通常可以解决您的问题。

我希望它有帮助:)