当机器人请求不存在的页面时减少服务器负载

当机器人请求不存在的页面时减少服务器负载

目标:减少恶意请求带来的服务器负载

有时服务器会收到大量对不存在的页面的请求。通常这些请求是恶意的,因为攻击者正在使用暴力手段寻找管理面板或其他文件。

这些请求会严重降低服务器性能,因为 Apache 会启动太多连接。当诸如Fail2ban无法阻止它们(即使用多个子网而不是单个 IP 进行攻击)有哪些选择?

有没有办法配置 Apache 或其他附加工具来覆盖 Web 应用程序并返回非负载密集型 404 页面(静态 .html 等)?

答案1

有没有办法配置 Apache 或其他附加工具来覆盖 Web 应用程序并返回非负载密集型 404 页面(静态 .html 等)?

它特定于您的 Web 应用程序。

如果它使用前端控制器模式,即单个index.php处理几乎无限数量的不同 SEO URL,例如/foo/bar配置中要列出的不同“类别”(第一级)页面太多,那么就没有运气了。

但是,假设您的网站仅处理/(主页),然后是一些/shop/<product name>/blog/<name-of-the-article>

您可以在 NGINX 中构建一个简单的规则(抱歉,这里不是 Apache man),如下所示:

location ~ ^/(?!($|shop/|blog/)) { 
    return 404; 
} 

对于已知不属于应用程序 URL“方案”一部分的请求,这将使 Web 服务器直接传递“未找到”错误,而不调用 PHP。

在这方面另一种有效的技术是蜜罐

通常,机器人会尝试检查是否存在漏洞的软件/插件,但一开始甚至没有出现在你的网站上

你可以利用你知道自己没有这些事实。然后即刻禁止任何试图加载这些端点的人。(例如,参见此NGINX 蜜罐技术)。

您可以使用 Apache 实现相同的功能。本质上,您需要列出不属于您的网站且常被尝试攻击的位置。

例如,您知道自己有一个 Magento 网站,但许多机器人会尝试以 Wordpress 的身份查看/登录。这也是/wp-login.php您的一个蜜罐位置。

一旦在配置中定义,你需要将这些请求传递给与防火墙交互的 FastCGI 脚本,以立即地禁止。

它不仅不会造成任何 PHP 负载,而且还会触发防火墙的即时禁止。

因此,与 Fail2ban(监控日志,例如重复登录失败)相比,这会触发得更快,因为请求到达后就会立即禁止。不过,这可以作为 Fail2ban 的补充措施。

答案2

将页面移出到交换空间对性能来说是致命的。调整 Apache MPM,以便最大可能数量的并发连接能够轻松装入内存。值得注意的是,MaxRequestWorkers 指示。

像这样进行容量规划有助于应对流量的正常高峰以及恶意流量。

监控响应时间。如果虚假请求不会破坏您的安全,并且性能仍然可以接受,那么虚假请求的数量其实并不重要。

禁止 IP 有助于对付屡犯者。但是,不太可能有很多人重复犯错,这会降低 fail2ban 的有效性。对攻击者来说,在整个互联网上搜索本月的 Web 应用程序漏洞通常比详细扫描您更有用。此外,一个攻击者可能来自多个源地址。

如果 Web 服务器仍然崩溃,请考虑将其置于安全导向的代理之后。

答案3

将评估移至防火墙。您要查找的是按 IP 划分的顶级 URL 上的 404 频率。检查您当前的日志以了解这些生物的到达率,然后根据它们的行为调整您的规则。

此时您有几个选择 * 将它们发送到慢速蜜罐,然后发送到免费云层,其中页面随机 503。 * 在防火墙处,503 IP 持续 5 到 30 分钟。您要做的就是控制机器人并防止他们更改机器人代码。对于开发人员来说,最难检查的是有时有效的代码......而 503 是合法的返回代码。

相关内容