我的网站每天从不同的IP地址获得数千次访问:
/php-myadmin/ /myadmin/ /mysql/
…和成千上万的其他变化。 这些目录都不存在,我甚至没有我的服务器上的phpmyadmin。
我不认为这些尝试都是成功的,但是他们一定会对服务器的资源付出代价,浪费带宽,所以我想尽可能地阻止它们。 我已经阻止了一些这样的IP,但他们不断用新的IP回来,有什么办法可以防止这个更永久?
别担心。 为一台networking服务器提供404服务是一项微小的微小工作。 你可能可以用486秒来服务10个404。每404的带宽可以忽略不计; 一个小小的GET请求和一个小小的404响应。
认真; 不要担心。 这只是在互联网上运行服务器的一部分。
不幸的是,这是互联网的工作原理。 只要忽略它。 数以千计的僵尸/木马扫描互联网。 源IP将始终是随机的。 没有治疗。
下面举例说明了消除该stream量的唯一100%解决scheme:
另一种方法是:
– 使用https / http从端口80/443移动到其他位置。 机器人通常不会在所有其他65k端口上查找http服务器。
– 使用VPN连接到服务器(我想这是不可能的,如果您主持一个公共网站)。
你想要的是Fail2ban (假设这是一台linux机器,你没有说…)
什么是Fail2ban?
Fail2ban将parsing系统日志,寻找特定的正则expression式来阻止。 当它find一个匹配(或来自同一个IP的几个匹配,取决于你如何configuration它),它将通常通过IPTables阻塞。 通常,这用于阻止对SSH或Web服务器的身份validation尝试失败。
你configuration它禁止他们一段时间(可能是几分钟,可能是几天…取决于他们如何持续),之后禁令将过期,除非他们再试一次。
这是如何帮助阻止phpmyadmin扫描机器人?
它可以很容易地用来匹配常见的攻击迹象,比如试图访问不存在的phpmyadmin文件夹。 你将不得不找出正确的正则expression式来匹配这样的尝试,并确保你不会阻止合法的用户。
在这篇博客文章中给出的configuration可能工作verbatium或需要调整您的设置。
为什么我应该阻止他们? 404错误不会花费太多
阻止他们在iptables有一些使用 – 如果他们正在检查phpmyadmin的漏洞,他们可能会尝试其他服务的漏洞,直到他们碰到的东西,工作。 禁止他们将使大多数机器人/脚本在一段时间后放弃,他们将继续向更好的目标迈进。
即使通过扫描也不会花费太多(除非他们实际上find了漏洞),它们确实使您的日志泛滥,使得难以看到成功的攻击和Web服务器的问题。
正如下面的评论所说,Fail2ban确实需要一些系统资源。 但并不多。 至less我可以说我从来没有一个性能问题,我可以归因于Fail2ban。 然而,我有非常积极的脚本的性能问题,试图暴力密码或每秒在我的服务器上投掷数以千计的SQL注入尝试和其他漏洞。 在防火墙级别阻止它们比在服务器/应用程序级别阻止它们需要更less的资源。 它也可以扩展到运行自定义脚本来禁止IP地址 – 所以不要在IPtables中禁止它们,你可能会禁止它们在硬件防火墙中,或者如果同一个人不断尝试攻击你,你可以抱怨到他们的ISP或让您的数据中心阻止他们的防火墙。
任何其他提示?
强烈build议您将您控制的几个IP地址列入白名单,以免意外locking。
我所做的就是把一个小脚本放到适当的目录中,这样如果有人访问/ phpmyadmin /就会运行它。 该脚本除了调用iptables(在Linux下)之外什么也不做,它阻塞了访问脚本30分钟的IP地址(在此之后,cron-job刷新iptables链,IP地址被添加到)。
与fail2ban相比,它的优点是不用任何资源来parsingsyslog / access-log。 当然,缺点是除了访问这个非常具体的地址之外,你不检查其他的东西。
为什么要这样做? 当然,服务404对于服务器来说很容易,但是我不想让他们四处闲逛,就这么简单。 我想浪费他们的工具时间,等待服务器回复,重试直到最后放弃。 此外,如果你不阻止他们,他们会尝试很多不同的url,然后才能继续前进 – 有时会超过一千个。 根据不同的工具,它可能是“好的”,并在几个小时内将它们分隔开来,或者在几分钟之内就可能不关心和摧毁你的服务器。
为什么我不提供有效的页面? 他们的工具可能会停止扫描,并提醒正在运行它的滑行者 – 然后必须手动检查。 这样做的另一个好处是,如果他们的扫描不会让你的结果出现的话,他们会给你的服务器一个比他们更近的样子。 也许他们会多捅一捅,也许是一些端口扫描,也许你会让他们生气,然后他们启动一个DoS,看他们是否可以做任何事情。 简单地阻止他们 – 从他们的angular度来看,服务器在访问phpmyadmin脚本时超时 – 有效地浪费了他们的工具时间,同时避免了不必要的注意。
如果你在服务器上有phpMyAdmin,一个有效的解决scheme可能会把它放在一个单独的目录中,并且使用你的Web服务器的密码控制(Apache的.htpasswd)在任何事情到达之前阻止访问。
FWIW我们只限制对/ phpmyadmin /白名单IP地址的访问。
我们也使用mod_evasive(在apache2上)来阻止DOS /performance不佳的脚本攻击。
将mysqlpipe理工具绑定到您的机器回送地址127.0.0.1
然后使用端口转发ssh来访问您的pipe理后端。
添加一个额外的安全层,可以非常透明。
我们发现的最好方法是密码保护phpmyadmin所在的文件夹。另外,不要使用与phpmyadmin相关的任何文件作为文件夹名称:pma,phpmy等…