Mat*_*man 5 squid haproxy ddos apache-2.2
我们今天早些时候成为 DDoS 攻击的目标。我们的负载均衡器 (HAProxy) 上的连接数是正常情况的 20 倍,并且在这次攻击期间,所有后端节点都继续宕机。
System structure: HAProxy > Squid > Apache (for ModSecurity) > IIS app layer.
Run Code Online (Sandbox Code Playgroud)
在攻击过程中,我注意到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
Run Code Online (Sandbox Code Playgroud)
Apache 使用默认的 keep-alive 设置(keep-alives 已启用,超时设置为 15 秒)。在对 HAProxy + keep-alives 进行了一些额外的阅读之后,相信 DDoS 因启用 keep-alives 而恶化的结论是否合理?
虽然 HAProxy 的最大连接数远低于 Apache 中设置的最大值,但可能是 20x 连接数以 ol' DOS 方式打开了太多连接,但随后 Apache 将它们保持打开状态。
我认为您正在针对这种情况进行错误的潜在修复。如果您被 DDoS 攻击,那么您唯一真正的缓解途径是与您的上游提供商交谈,并让他们在流量到达您的网络之前对其进行空路由/黑洞处理。否则,无论您做什么,它仍会到达您的网络边缘,并可能(可能)使您的终端连接饱和。
唯一要做的就是在它到达您的网络边缘之前将其阻止。任何类型的 DDoS 缓解方案都不太可能有用,因为流量必须先进入您的网络,然后才能被忽略/阻止/丢弃。因此,它仍然会占用您的带宽。
在最初的“攻击”后的几周内,这个问题又出现了几次,我不得不更深入地挖掘,因为我认为我可能一直在使用 DDoS 作为逃避。
虽然访问日志和 netstat 快照(按附加到日志文件的连接数排序的前 N 个 IP)确实显示了非常分散的 IP 地址数量,但我能够在访问日志中识别出似乎可疑的特定页面。
显然,开发团队构建了一个“代理”页面,以便通过 AJAX 提供第 3 方 API 请求。问题似乎是该代理页面耗尽了 HAProxy 上宝贵的连接槽,并且当第 3 方服务在服务 API 请求时出现问题时,它将等待很长时间才能超时。最终,冗长的代理请求使我们的 HAProxy 后端达到了最大限制(因此所有新请求都已排队)。从那时起,我们的网络上的连接计数开始增加,并且我们面向公众的网站开始对正常的非 AJAX 请求进行超时处理。
在我们的例子中,解决方案是在 HAProxy 中专门为这些 AJAX 调用创建一个额外的后端。下次第 3 方服务出现问题时,它只会使 AJAX 代理页面调用超时,而网站的其余部分将继续正常运行。
感谢您的回答。我认为你们中的大多数人都正确地缓解了“真正的”DDoS 攻击,但我认为这对于其他读者来说是有帮助的,因为他们知道值得进行内部审查,以确保自己不会搬起石头砸自己的脚。
| 归档时间: |
|
| 查看次数: |
3845 次 |
| 最近记录: |