我的网站每天都会收到数千次来自不同 IP 的点击,这些 IP 试图访问:
/php-myadmin/
/myadmin/
/mysql/
...以及成千上万的其他变体。这些目录都不存在,我的服务器上甚至没有 phpmyadmin。
我认为这些尝试都没有成功,但它们肯定会消耗服务器资源并浪费带宽,因此如果可能的话,我希望阻止它们。我已经阻止了其中几个 IP,但它们不断用新 IP 回来,有什么方法可以更永久地阻止这种情况吗?
答案1
别担心。处理 404 错误对于 Web 服务器来说只是很小很小的工作量。使用 486 每秒可能可以处理 10 个 404 错误。每个 404 错误所需的带宽可以忽略不计;一个很小的 GET 请求和一个很小的 404 响应。
说实话,别担心。这只是在互联网上运行服务器的一部分。
答案2
不幸的是,互联网就是这样运作的。忽略它就好。成千上万的机器人/木马扫描互联网。源 IP 总是随机的。没有解决办法。
消除该流量的唯一 100% 解决方案如下所示:
另一种方法是:
- 将 https/http 从端口 80/443 移至其他端口。机器人通常不会在所有其他 65k 端口上查找 http 服务器。
- 使用 VPN 连接到服务器(我猜如果您托管公共网站,这是不可能的)。
答案3
你想要的是Fail2ban(假设这是一台 Linux 机器,你没有说……)
什么是Fail2ban?
Fail2ban 将解析系统日志,查找要阻止的特定正则表达式。当它找到一个匹配项(或来自同一 IP 的多个匹配项,具体取决于您的配置方式)时,它将阻止,通常通过 IPTables。通常,这用于阻止针对 SSH 或 Web 服务器的失败身份验证尝试。
您可以将其配置为禁止他们一段时间(可能是几分钟,也可能是几天......取决于他们的坚持程度),之后禁令将过期,除非他们再次尝试。
这如何帮助阻止 phpmyadmin 扫描机器人?
它同样可以很容易地用于匹配常见的攻击迹象,例如尝试访问不存在的 phpmyadmin 文件夹。您必须找出正确的正则表达式来匹配此类尝试,并确保不会阻止合法用户。
配置如下这篇博文可能会按原样工作或需要对您的设置进行一些调整。
我为什么要屏蔽它们?404 错误不会带来太多损失
在 iptables 中阻止它们确实有用 - 如果他们正在检查 phpmyadmin 漏洞,他们可能会尝试其他服务以查找漏洞,直到找到有效的方法。禁止它们会让大多数机器人/脚本在一段时间后放弃,然后转向更好的目标。
即使扫描成本不高(除非他们真的发现了漏洞),他们也会淹没你的日志,让你更难发现成功的攻击和你的网络服务器的问题。
正如下面的评论所说,Fail2ban 确实需要一些系统资源。但不是很多。至少我可以说我从未遇到过可以归咎于 Fail2ban 的性能问题。然而,我曾遇到过性能问题,因为非常激进的脚本试图暴力破解密码或每秒向我的服务器发起数千次 SQL 注入尝试和其他漏洞攻击。在防火墙级别阻止它们比在服务器/应用程序级别阻止它们需要的资源少得多。它还可以扩展为运行自定义脚本来禁止 IP 地址 - 因此,您不必在 IPtables 中禁止它们,而是可以在硬件防火墙中禁止它们,或者如果同一个人一直试图攻击您,请向某人发送电子邮件,以便您可以向他们的 ISP 投诉或让您的数据中心在他们的防火墙上阻止它们。
还有其他建议吗?
强烈建议您将几个您控制的 IP 地址列入白名单,以免意外将自己锁定。
答案4
仅供白名单 IP 地址访问 /phpmyadmin/。
我们还使用 mod_evasive(在 apache2 上)来阻止 DOS / 行为不当的脚本攻击。