防范 DDoS 攻击?

防范 DDoS 攻击?

可能重复:
DDoS攻击,该如何阻止?

我正在运行一个私人 http 服务器来为私人网站提供支持。服务器的 IP 已公开,这很好。反正也没什么可隐瞒的。

问题是服务器每天会受到 3 到 8 次攻击,每次有超过 4000 个连接。服务器和设备设置为同时最多处理 600 个连接。因此,服务器堵塞了。我当时有两个选择:

  1. 抓取攻击者的 IP,并将其添加到服务器上安装的基于软件的防火墙的阻止列表中,以直接终止攻击。但攻击来自不同的 IP,因此逐个阻止既费力又无效。

  2. 重新启动主路由器以暂时停止攻击,但攻击可能随时再次开始。

我的 ISP 对此无能为力。我有什么选择?

在服务器前放置具有 DDoS 保护功能的交换机/路由器是否会产生任何影响并有助于解决问题?

答案1

您在此处讨论的数字完全在单个行为不当的机器人的范围内。您达到 ApacheMaxChildren限制(而不是内存、带宽或 CPU 限制)的事实以及它们发出有效的 HTTP 请求也倾向于认为是恶意机器人造成的,而不是蓄意 DDoS。

如果是机器人程序,则可能由一小段甚至单个 IP 地址负责。当这种情况发生时,通过 grep 浏览日志文件可以识别相关的 IP 地址:

tail -5000 access.log | cut -d' ' -f1 | sort | uniq -c | sort -n

调整尾部的数字来匹配您的网站的繁忙程度。

对于同时连接,您还可以查看netstat

netstat -tan | grep ESTABLISHED | awk '$4 ~ /:80/ {print $5}' | cut -d: -f1 | sort | uniq -c | sort -n

通过您的访问日志查找任何被识别的 IP 地址netstat,并确保它不仅仅是一个热心的用户,甚至也不是您自己的办公室 IP 地址。


一旦您可以分辨出是有人故意试图关闭您的网站还是有人只是想尽快抓取您的网站,您就可以采取措施阻止它。

一个例子是“Dig; Ext”机器人。这个机器人用于从 HTML 页面抓取电子邮件地址。它在页面请求之间没有暂停,并且一次运行多个线程(根据我的访问日志,我猜是 10 个)。当它出现时,它可以在我的访问日志中每分钟额外添加 1000 个请求。它方便地将字符串“Dig; Ext”添加到其 User-Agent,使我们能够轻松阻止它。如果 Apache 根据403User-Agent 返回一个,则使用 PHP 的 3 秒页面加载时间可以缩短到几百微秒。

由于这些是完整的 TCP 连接,因此 IP 无法被伪造。因此,阻止 IP 地址应该是有效的。如果 IP 范围是动态的、ADSL 或类似的,那么在防火墙处丢弃数据包是合适的。如果它们是服务器托管范围,这可能是由于无能而不是恶意造成的,最好发回 403 响应,以暗示他们可能想让他们的机器人表现得更好一些。

mod_security OWASP 核心规则集有针对我上面提到的机器人和许多其他机器人的规则,以及与许多其他机器人的特征相匹配但没有真正的浏览器的启发式方法,例如没有Accept:标题。

答案2

防范分布式 DOS 非常具有挑战性。而且理论上不可能阻止。我建议您运行数据包分析器(如 tcpdump)并尝试了解数据包。90% 的情况下,攻击者主机会共享一些类似的数据包标志,您可以使用这些标志来阻止攻击。

相关内容