Apache 因机器人而崩溃

Apache 因机器人而崩溃

我在 AWS Ubuntu 服务器上运行 LAMP 堆栈。Apache 会时不时地(可能每周一次,每隔一周一次)崩溃,网站会瘫痪。查看 Apache 错误日志,我注意到这些崩溃通常发生在机器人试图暴力破解我们的网站时。例如,今天它试图访问 wp-login.php。我们的网站没有使用 Wordpress。所以我的问题是...

1) 为什么访问 wp-login.php 会导致 Apache 崩溃?机器人不应该只是收到 404 错误吗?

2) 如何防止这些恶意机器人访问/破坏我的网站?我显然希望将对 /admin、/wp-admin.php 等的所有请求列入黑名单。

如果这个问题太模糊或者不好,请原谅我。我是 ServerFault 的新手(并且总体而言,服务器管理和 Web 开发也是新手)。

答案1

寻找漏洞、拒绝服务或凭证填充的机器人并不关心您正在运行什么,也不关心它们的扫描是否对您的系统温和。它们会尽快暴力破解它们拥有的一切。


查看日志以确定崩溃的原因。

也许是因为资源不足而导致失败,比如 Linux OOM killer。进行容量分析。确保分配的资源(内存)大于峰值可能利用率(Apache MPM 调优 + 数据库共享内存)。

您的软件堆栈中可能存在崩溃错误。应用软件更新。启用应用程序中的日志记录。检查是否启用了崩溃转储,并查看任何崩溃转储。确定崩溃的位置:在 Web 应用程序中、语言运行时中或其他库中。

如果这仍然很脆弱,请将其置于一些额外的过滤之后。例如 Web 应用程序防火墙。

答案2

您必须强化您的网络服务器,以应对互联网面临的任何挑战。

我为此使用的三个主要工具是速率限制、CloudFlare 和 fail2ban。

云Flare

CloudFlare 会过滤掉最严重的不良流量,例如 DDOS。它还有一个防火墙,您可以使用 API 进行更改,我稍后会介绍它。

失败禁止

使用 Fail2ban,您可以定义“不好”和“坏”行为的规则。Fail2ban 会根据此规则采取行动 - 例如,立即封禁做坏事的用户,并在用户做了三次“不好”的事情后封禁用户。

Fail2ban 通常会更改本地防火墙(如 iptables)以禁止流量进入 Web 服务器。这种方法很有效,但您仍需为流量付费。另一种方法是让 fail2ban 调用 CloudFlare API 来在流量到达您的服务器之前在边缘上拦截流量。

我有一篇关于如何做到这一点的文章这里

速率限制

Nginx 内置了速率限制,我认为 Apache 也一样。它可以通过多种方式限制速率,但通过 IP 限制速率最简单。请查看 Apache 文档。

相关内容