Linux:防止传出TCP泛滥

我在负载均衡器后面运行了数百个networking服务器,它们拥有许多不同的应用程序(我无法控制)。 每月大约一次,其中一个网站被黑客攻击,上传一个洪水脚本来攻击一些银行或政治机构。 在过去,这些都是UDP洪水,这是通过阻止在个人networking服务器上传出的UDPstream量有效解决。 昨天他们开始从我们的服务器上淹没一个大型的美国银行,使用许多TCP连接到端口80.由于这些连接types对我们的应用来说是完全有效的,所以阻止它们不是一个可以接受的解决scheme。

我正在考虑以下替代scheme。 你会推荐哪一个? 你有没有实现这些,以及如何?

  • 限制networking服务器(iptables)传出TCP数据包的源端口!= 80
  • 相同,但排队(tc)
  • 限制每台服务器每个用户的传出stream量。 相当的pipe理负担,因为每个应用程序服务器可能有1000个不同的用户。 也许这个: 我怎么能限制每个用户的带宽?
  • 还要别的吗?

当然,我也在研究如何最大限度地减less黑客进入我们的托pipe网站的机会,但由于这种机制永远不会100%防水,我想严格限制入侵的影响。

更新:我目前正在testing这些规则,这将阻止这种特定的攻击。 你如何build议使它们更通用? 当我只对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 

干杯!

我认为最好的解决scheme和对我来说工作得很好的解决scheme是限制目标ip的连接数/数据包数。 将限制设置为合理的速率将防止攻击者向目标发送大量连接。 设置端口和协议不是一个好主意,因为如果攻击者今天发送http洪stream,明天他将使用不同types的攻击。 所以限制每个ip连接作为一般将是你的问题的解决scheme。

我希望它有助于:)

我一直采取的立场是,networking服务器不应该进行出站TCP连接 – 只发送stream量作为响应入站请求的服务器。 (我也只允许入站TCP为Web服务器和SSH。)(与此相关我也相信一个Web服务器从来不是正确的主机发送邮件。)这不仅仅是防止出站攻击 – 它也增加了一些难度到对你的系统进行的攻击(黑客无法获得一个xterm窗口或wget他们的工具包到你的主机)。