我的网站每天通过不同的IP尝试访问数千个点击:
/php-myadmin/
/myadmin/
/mysql/
...以及数千种其他变体。这些目录都不存在,我的服务器上甚至没有phpmyadmin。
我认为这些尝试都没有成功,但是它们肯定会浪费服务器资源并浪费带宽,因此,我想尽可能地阻止它们。我已经阻止了其中一些IP,但它们会不断使用新的IP,有什么办法可以更永久地防止这种情况发生?
我的网站每天通过不同的IP尝试访问数千个点击:
/php-myadmin/
/myadmin/
/mysql/
...以及数千种其他变体。这些目录都不存在,我的服务器上甚至没有phpmyadmin。
我认为这些尝试都没有成功,但是它们肯定会浪费服务器资源并浪费带宽,因此,我想尽可能地阻止它们。我已经阻止了其中一些IP,但它们会不断使用新的IP,有什么办法可以更永久地防止这种情况发生?
Answers:
不用担心 为404服务是Web服务器要做的非常少的工作。您可能会使用486来每秒为十个404服务。每个404的带宽可以忽略不计;一个小的GET请求和一个小的404响应。
认真地 不用担心 这只是在互联网上运行服务器的一部分。
不幸的是,这就是互联网的运作方式。只是忽略它。成千上万的僵尸程序/特洛伊木马程序扫描了Internet。源IP将始终是随机的。没有治愈方法。
消除流量的唯一100%解决方案如下所示:
一种替代方法是:
-使用https / http从端口80/443移动到其他端口。漫游器通常不会在所有其他65k端口上寻找http服务器。
-使用VPN连接到服务器(如果您托管公共网站,我想这是不可能的)。
您想要的是Fail2ban(假设这是一台Linux计算机,您没有说...)
什么是Fail2ban?
Fail2ban将解析系统日志,以查找要阻止的特定正则表达式。当找到匹配项(或来自同一IP的多个匹配项,具体取决于您如何配置)时,它将阻止,通常通过IPTables。通常,这用于阻止针对SSH或Web服务器的身份验证尝试失败。
您将其配置为在一定时间段内禁止使用它们(可能是几分钟,可能是几天...取决于它们的持久性),在此之后该禁止将失效,除非他们再次尝试。
如何帮助阻止phpmyadmin扫描机器人?
它可以很容易地用于匹配攻击的常见征兆,例如尝试访问不存在的phpmyadmin文件夹。您将必须找出正确的正则表达式以匹配此类尝试,并确保您不会阻止合法用户。
这篇博客文章中给出的配置可以逐字工作或需要对设置进行一些调整。
我为什么要阻止他们?404错误的代价不高
在iptables中阻止它们确实有一些用处-很有可能是如果他们正在检查phpmyadmin漏洞,那么他们也可能会尝试其他服务的漏洞,直到发现有用的东西为止。禁止使用它们会使大多数bot /脚本在一段时间后放弃,并且它们将继续朝着更好的目标发展。
即使通过扫描不会花费很多(除非他们实际上发现了一个漏洞),但它们的确淹没了您的日志,使您很难看到成功的攻击和Web服务器问题。
如下面的评论所述,Fail2ban确实需要一些系统资源。但并不多。至少我可以说我从未遇到过可以归因于Fail2ban的性能问题。但是,由于非常激进的脚本试图暴力破解密码或每秒在服务器上抛出数千次SQL注入尝试和其他攻击,我遇到了性能问题。与在服务器/应用程序级别上进行阻止相比,在防火墙级别上进行阻止所需的资源少得多。它也可以扩展为运行自定义脚本以禁止IP地址-因此,与其在IPtables中禁止它们,不如将其禁止在硬件防火墙中,或者如果同一个人不断尝试攻击您,则可以向某人发送电子邮件,以便您可以投诉到他们的ISP或让您的数据中心将它们阻止在其防火墙上。
还有其他提示吗?
强烈建议您将一些自己控制的IP地址列入白名单,以免被误锁定。
我要做的是将一个小脚本放入相应的目录中,以便在有人访问/ phpmyadmin /时运行该脚本。该脚本除了调用iptables(在Linux下)外,什么都不做,这会阻止IP地址访问脚本30分钟(此后,cron-job刷新将IP地址添加到的iptables链)。
与fail2ban相比,优点是您不使用任何资源来解析syslog / access-log。缺点当然是,除了访问此非常特定的地址之外,您不检查其他任何内容。
我为什么要这样做?当然,为服务器提供404服务很容易,但是我不希望他们四处乱逛,就这么简单。我想浪费他们的工具时间,等待服务器回复,然后重试直到最终放弃。另外,如果您不阻止它们,它们将尝试许多不同的URL,然后再继续使用-有时超过一千。根据工具的不同,它可能会很“不错”,并在几个小时内将它们间隔开,或者可能不在乎,并在几分钟之内将所有服务器与服务器连接起来。
我为什么不提供有效的页面?他们的工具可能会停止扫描您,并警告正在运行它的滑橇-然后,后者必须手动检出。不利的一面是,如果它们的扫描不能使您获得满意的结果,它们将使您的服务器比它们看上去更近。也许他们会戳更多一点,也许会扫描一些端口,也许会让他们发疯,然后他们会发起DoS来查看它们是否可以执行任何操作。简单地阻止它们-从他们的角度来看,这使服务器在访问phpmyadmin脚本时就超时了-有效地浪费了他们的工具时间,同时避免了不必要的注意。
如果确实在服务器上安装了phpMyAdmin,则有效的解决方案可能是将其放在单独的目录中,并使用网络服务器的密码控件(对于Apache为.htpasswd)来阻止访问,然后再进行访问。
我们发现的最佳方法是用密码保护phpmyadmin所在的文件夹。此外,请勿将与phpmyadmin相关的任何内容用作文件夹名称:pma,phpmy等。
None of these directories exist, I don't even have phpmyadmin on my server.
-他不是在问如何加强现有安装...他是在问如何处理不存在的内容。您无法重命名,PMA
或者如果不存在,您将拥有什么。