如何阻止针对 phpMyAdmin 的黑客攻击?

amb*_*a88 37 hacking web-server

我的网站每天从尝试访问的不同 IP 获得数千次点击:

/php-myadmin/
/myadmin/
/mysql/
Run Code Online (Sandbox Code Playgroud)

...以及数以千计的其他变体。这些目录都不存在,我的服务器上什至没有 phpmyadmin。

我认为这些尝试都没有成功,但是它们肯定会消耗服务器资源并浪费带宽,因此如果可能,我想阻止它们。我已经屏蔽了一些这样的 IP,但它们不断返回新的 IP,有什么办法可以更永久地防止这种情况发生?

Mar*_*son 42

别担心。为 404 提供服务是 Web 服务器要做的微不足道的工作。使用 486 可能每秒提供 10 个 404。每个 404 的带宽可以忽略不计;一个小小的 GET 请求和一个小小的 404 响应。

严重地; 别担心。这只是在 Internet 上运行服务器的重要组成部分。

  • Hell-Banning:提供带有乱码输出的正常页面 (200 OK)。孩子们使用的工具会报告找到的页面,他们需要手动调查(假的登录页面肯定是一个魔鬼设备):) (14认同)
  • @arul - 一些攻击者可能会将此视为一种挑战,并且会出于恶意而格外注意您的服务器。在这里提供较小或不同的 404 是否有用?例如,如果主机通常提供带有支持链接的 404,它是否应该/可以改为提供没有内容的普通 404 到这些目标网址? (4认同)

Bar*_*cki 38

不幸的是,这就是互联网的工作方式。只是忽略它。数以千计的机器人/木马扫描互联网。源 IP 将始终是随机的。没有治愈方法。

消除该流量的唯一 100% 解决方案如下所示: 在此处输入图片说明

另一种方法是:
- 使用 https/http 从端口 80/443 移动到其他端口。机器人通常不会在所有其他 65k 端口上寻找 http 服务器。
- 使用 VPN 连接到服务器(如果您托管公共网站,我想这是不可能的)。


Gra*_*ant 31

你想要的是Fail2ban(假设这是一台linux机器,你没有说......)

什么是Fail2ban?

Fail2ban 将解析系统日志,寻找要阻止的特定正则表达式。当它找到匹配项(或来自同一 IP 的多个匹配项,具体取决于您的配置方式)时,它会阻止,通常是通过 IPTables。通常,这用于阻止针对 SSH 或 Web 服务器的失败身份验证尝试。

您将其配置为在一定时间内禁止它们(可能是几分钟,也可能是几天……取决于它们的持久性),之后禁止将过期,除非他们再次尝试。

这如何帮助阻止 phpmyadmin 扫描机器人?

它可以很容易地用于匹配攻击的常见迹象,例如尝试访问不存在的 phpmyadmin 文件夹。您必须找出正确的正则表达式来匹配此类尝试,并确保不会阻止合法用户。

此博客文章中给出的配置可能会逐字运行,或者需要对您的设置进行一些调整。

我为什么要阻止他们?404 错误的代价并不高

在 iptables 中阻止它们确实有一些用处 - 如果他们正在检查 phpmyadmin 漏洞,他们可能也会尝试其他服务来寻找漏洞,直到他们找到有效的东西。禁止它们会使大多数机器人/脚本在一段时间后放弃,它们将转向更好的目标。

即使扫描不会花费太多(除非他们确实发现了漏洞),但它们确实会淹没您的日志,从而更难看到成功的攻击和 Web 服务器的问题。

正如下面的评论所说,Fail2ban 确实需要一些系统资源。但并不多。至少我可以说我从来没有遇到过可以归因于 Fail2ban 的性能问题。然而,由于非常激进的脚本试图暴力破解密码或在我的服务器上每秒抛出数千次 SQL 注入尝试和其他漏洞,我遇到了性能问题。在防火墙级别阻止它们比在服务器/应用程序级别阻止它们占用的资源少得多。它还可以扩展为运行自定义脚本来禁止 IP 地址 - 因此,与其在 IPtables 中禁止它们,您可以让它在硬件防火墙中禁止它们,或者如果同一个人一直试图攻击您,则向某人发送电子邮件以便您可以投诉到他们的 ISP 或让您的数据中心在他们的防火墙上阻止他们。

还有其他提示吗?

强烈建议您将一些您控制的 IP 地址列入白名单,以免意外锁定自己。

  • 这将浪费资源:) 我认为你会在 Fail2ban 上使用更多的 CPU 周期,而不是简单地提供 404 :) (6认同)
  • @BartłomiejZarzecki 更好的安全性总是需要更多资源 (4认同)
  • @heinrich5991 它会在 *first* 尝试后阻塞。对于某些扫描没有区别,但对于在服务器上尝试多次尝试的扫描来说却有很大的不同。 (3认同)
  • 如果您执行此类操作,请确保将禁令设置为相对较快(最多几个小时)到期,否则如果攻击来自动态分配的 IP,您可能会锁定合法用户。 (3认同)
  • Fail2ban(或类似的)有望不仅仅适用于 /phpmyadmin。假设他有任何类型的远程访问,F2B 类型的阻止(3 个密码,你......消失了!)不仅仅是 404s。 (2认同)

Aaa*_*Aaa 8

我所做的是将一个小脚本放入适当的目录中,这样它就会在有人访问 /phpmyadmin/ 时运行。该脚本除了调用 iptables(在 Linux 下)之外什么都不做,这会阻止 IP 地址访问脚本 30 分钟(之后,cron 作业刷新 IP 地址被添加到的 iptables 链)。

与fail2ban 相比的优势在于您不使用任何资源来解析系统日志/访问日志。当然,缺点是除了访问这个非常具体的地址之外,您不检查任何其他内容。

我为什么要这样做?当然,为服务器提供 404 会很容易,但我不希望他们四处闲逛,就这么简单。我想浪费他们工具的时间,等待服务器回复,重试直到它最终放弃。此外,如果您不阻止他们,他们会在最终继续之前尝试许多不同的 URL - 有时超过一千个。根据工具的不同,它可能“很好”并且将它们隔开几个小时,或者它可能只是不在乎并在几分钟内用所有这些工具敲打您的服务器。

为什么我不提供有效页面​​?他们的工具可能会停止扫描您并提醒正在运行它的小偷——然后他们必须手动检查。这样做的另一面是,如果他们的扫描没有让你出现在他们的结果中,他们会给你的服务器比他们更仔细的观察。也许他们会再四处看看,也许会进行一些端口扫描,也许你会让他们生气,然后他们会发起 DoS 以查看他们是否可以做任何事情。简单地阻止它们 - 从他们的角度来看,这会使服务器在他们访问 phpmyadmin 脚本时超时 - 有效地浪费了他们的工具时间,同时避免了不必要的关注。

如果您的服务器上确实有 phpMyAdmin,一个有效的解决方案可能是将它放在一个单独的目录中,并使用您的网络服务器的密码控制(Apache 的 .htpasswd)在任何东西到达之前阻止访问。