有时我的服务器会遭受 DDoS 攻击。我试图防止这种情况发生。我使用 Nginx 提供静态内容并作为反向代理,使用 Apache 提供 php 应用程序。
当攻击开始时,有很多 (例如 3000 个 IP 地址) 想要同时访问我的页面,但每 4-5 秒只有一个 IP 地址。但是如果攻击者很多,我每秒仍然有 400 个请求,但来自不同的 IP。因此我无法阻止它,因为 Nginx 中的 IP 连接速率限制在这种情况下不起作用。我的该服务器上有大约 100 个网站。在攻击期间,Nginx 工作正常,但 Apache 完全死机,Nginx 不仅无法连接到被攻击站点的上游,而且无法连接到服务器上所有站点的上游。在攻击期间,被攻击的网站不工作,但我希望其他网站可以不受影响地工作,这种情况我没有问题。
我需要的解决方案不是转移攻击,而是希望有一个可以在一个站点受到攻击时为其他站点提供服务的服务器。
你能帮我吗?我正在考虑在 Nginx 前面使用 haproxy。我会为每个站点添加一个后端,并发连接限制为大约 40 个连接。你认为这是个好主意吗?或者你有其他关于如何防止此类攻击的想法?
答案1
DDOS 从来都不是一个容易解决的问题,但听起来你所经历的低级攻击类型肯定会得到 HAProxy 中的排队功能的支持,即不要用太多请求(maxconns)淹没 Apache 服务器。
您还可以尝试使用 cookie 功能优先考虑现有客户,就像一些繁忙的网站所做的那样黑色星期五保护。
答案2
在 Apache 中,考虑降低最大请求工作者数(或MaxClients
取决于您的 Apache 版本)。一旦该值足够低,Apache 就不会崩溃,因为它只能响应其可以处理的请求数。额外的请求将被排队(最多不超过限制,链接文档中描述了该限制)。
对于总体问题,请参阅我遭受了 DDoS 攻击。我该怎么办?。