使用HAProxy缓解DDoS攻击[重复]

Modified on: Mon, 15 Apr 2019 20:00:02 +0800
    

这个问题已经有了答案:

    

            
  •             我在DDoS下。我该怎么办?
                                        4个答案
                    跨度>
            
  •     

    

我们今天早些时候遭到DDoS攻击。我们的负载均衡器(HAProxy)上的连接数量是正常情况的20倍,并且在此次攻击期间所有后端节点都继续关闭。

System structure: HAProxy > Squid > Apache (for ModSecurity) > IIS app layer.

在攻击期间,我注意到Apache中存在 MaxClients Reached 错误,因此我将设置从150提升到250,这似乎在某种程度上有所帮助。但是,似乎我必须手动重启Apache才能使后端恢复。袭击持续了大约50分钟。

攻击开始消退后,每个节点上的最终Apache重启都会让我们陷入绿色,但现在我正在调查它为什么会出现在第一位。在Apache的错误日志中,我看到了很多这些:

[Wed Jun 22 11:46:12 2011] [error] [client 10.x.x.x] proxy: Error reading from remote server returned by /favicon.ico
[Wed Jun 22 11:46:13 2011] [error] [client 10.x.x.x] (70007)The timeout specified has expired: proxy: error reading status line from remote server www.example.com

Apache正在使用默认的保持活动设置(启用了保持活动并且超时设置为15秒)。在对HAProxy + keep-alives进行一些额外的阅读之后,认为DDoS因启用保持活动而恶化是一个合理的结论吗?

虽然HAProxy max连接低于Apache中设置的最大值,但是可能使用20x连接以OL'DOS方式打开了太多连接,但Apache却保持打开状态。

最佳答案

在最初的“攻击”之后的几周内问题再次出现几次之后,我不得不深入挖掘,因为我认为我可能已经将DDoS用作警察了。

虽然访问日志和netstat快照(按照附加到日志文件的连接数排序的前N个IP)肯定显示了非常分散的IP地址数量,但我能够在访问日志中识别特定页面似乎很可疑。

显然,开发团队已经构建了一个“代理”页面,以便通过AJAX提供第三方API请求。问题似乎是这个代理页面在HAProxy上耗尽了宝贵的连接插槽,当第三方服务在服务API请求时出现问题时,它会等待很长时间才能超时。最终,长卷绕的代理请求使我们的HAProxy后端达到了最大限制(因此所有新请求都排队)。从那时起,连接数开始在我们的网络上建立,我们面向公众的网站开始计时正常的非AJAX请求。

在我们的例子中,解决方案是在HAProxy中专门为这些AJAX调用创建一个额外的后端。下次第三方服务出现问题时,它只会超时AJAX代理页面调用,并且网站的其余部分将继续嗡嗡作响。

感谢您的回答。我认为你们中的大多数人都可以减轻“真正的”DDoS攻击,但我认为对于其他读者来说,知道内部看起来是值得的,以确保你不会在脚下射击。


相关问答

添加新评论