![如何阻止 PHPMyAdmin 攻击?](https://linux22.com/image/530463/%E5%A6%82%E4%BD%95%E9%98%BB%E6%AD%A2%20PHPMyAdmin%20%E6%94%BB%E5%87%BB%EF%BC%9F.png)
我们在访问日志中看到很多对不存在setup.php
文件的请求(见下文)。对于我们一些使用重写规则的客户来说,这些请求中的每一个都会导致执行 PHP 脚本,从而导致服务器速度大幅下降并产生不必要的流量。
是否可以快速拒绝此类请求?我原本想指定一条拒绝所有setup.php
相关查询的通用拒绝规则,但这可能不是正确的方法。有什么建议吗?
217.115.202.30 - - [17/Nov/2010:09:13:35 +0100] "GET /PHPMYADMIN/scripts/setup.php HTTP/1.1" 404 2452 "-" "ZmEu"
217.115.202.30 - - [17/Nov/2010:09:13:35 +0100] "GET /PMA/scripts/setup.php HTTP/1.1" 404 2444 "-" "ZmEu"
217.115.202.30 - - [17/Nov/2010:09:13:39 +0100] "GET /PMA2005/scripts/setup.php HTTP/1.1" 404 2449 "-" "ZmEu"
217.115.202.30 - - [17/Nov/2010:09:13:47 +0100] "GET /SSLMySQLAdmin/scripts/setup.php HTTP/1.1" 404 2452 "-" "ZmEu"
217.115.202.30 - - [17/Nov/2010:09:13:42 +0100] "GET /SQL/scripts/setup.php HTTP/1.1" 404 2446 "-" "ZmEu"
217.115.202.30 - - [17/Nov/2010:09:13:49 +0100] "GET /admin/phpmyadmin/scripts/setup.php HTTP/1.1" 404 2448 "-" "ZmEu"
217.115.202.30 - - [17/Nov/2010:09:13:58 +0100] "GET /admin/scripts/setup.php HTTP/1.1" 404 2442 "-" "ZmEu"
217.115.202.30 - - [17/Nov/2010:09:14:00 +0100] "GET /bbs/data/scripts/setup.php HTTP/1.1" 404 2448 "-" "ZmEu"
217.115.202.30 - - [17/Nov/2010:09:14:01 +0100] "GET /cpadmin/scripts/setup.php HTTP/1.1" 404 2447 "-" "ZmEu"
217.115.202.30 - - [17/Nov/2010:09:14:03 +0100] "GET /cpadmindb/scripts/setup.php HTTP/1.1" 404 2447 "-" "ZmEu"
217.115.202.30 - - [17/Nov/2010:09:13:53 +0100] "GET /admin/pma/scripts/setup.php HTTP/1.1" 404 2447 "-" "ZmEu"
217.115.202.30 - - [17/Nov/2010:09:14:05 +0100] "GET /cpanelmysql/scripts/setup.php HTTP/1.1" 404 2450 "-" "ZmEu"
217.115.202.30 - - [17/Nov/2010:09:14:11 +0100] "GET /cpanelphpmyadmin/scripts/setup.php HTTP/1.1" 404 2452 "-" "ZmEu"
217.115.202.30 - - [17/Nov/2010:09:14:13 +0100] "GET /cpanelsql/scripts/setup.php HTTP/1.1" 404 2448 "-" "ZmEu"
217.115.202.30 - - [17/Nov/2010:09:14:23 +0100] "GET /cpphpmyadmin/scripts/setup.php HTTP/1.1" 404 2449 "-" "ZmEu"
217.115.202.30 - - [17/Nov/2010:09:14:25 +0100] "GET /db/scripts/setup.php HTTP/1.1" 404 2441 "-" "ZmEu"
217.115.202.30 - - [17/Nov/2010:09:14:26 +0100] "GET /dbadmin/scripts/setup.php HTTP/1.1" 404 2445 "-" "ZmEu"
217.115.202.30 - - [17/Nov/2010:09:14:28 +0100] "GET /myadmin/scripts/setup.php HTTP/1.1" 404 2445 "-" "ZmEu"
217.115.202.30 - - [17/Nov/2010:09:14:29 +0100] "GET /mysql-admin/scripts/setup.php HTTP/1.1" 404 2449 "-" "ZmEu"
217.115.202.30 - - [17/Nov/2010:09:14:32 +0100] "GET /mysql/scripts/setup.php HTTP/1.1" 404 2448 "-" "ZmEu"
217.115.202.30 - - [17/Nov/2010:09:14:33 +0100] "GET /mysqladmin/scripts/setup.php HTTP/1.1" 404 2447 "-" "ZmEu"
217.115.202.30 - - [17/Nov/2010:09:14:35 +0100] "GET /mysqladminconfig/scripts/setup.php HTTP/1.1" 404 2453 "-" "ZmEu"
217.115.202.30 - - [17/Nov/2010:09:14:36 +0100] "GET /mysqlmanager/scripts/setup.php HTTP/1.1" 404 2449 "-" "ZmEu"
答案1
近四年后仍然具有现实意义。
由于 mod_rewrite 可能正在处理真正的流量,因此这些脚本不会增加太多负载。但是,它们可能会暂时导致延迟。一般来说,您无法完全阻止这些。
用于缓解此问题的 mods 和插件往往侧重于在本地防火墙 (iptables) 上阻止 IP 之前的频率和速率。更好的方法应该包括签名,例如目录名称(正常使用时是假的)的片段。然后必须考虑这需要有多大的反应能力。可以调整“denyhosts”包(一种用于防止 SSH 密码登录出现类似问题的产品)的部分内容,以读取日志并识别“签名”,以将 IP 地址添加到 /etc/hosts.deny。
通常这些人不会从同一主机回来,所以我们可能需要更快的方法。开源的美妙之处在于我们可以对其进行调整。mod_evasive 似乎没问题,但如果您的服务器被脚本合法查询(curl、wget 等),该怎么办?因此没有 CAPTCHA,并且需要白名单或通过 POST 或 GET 参数进行重置。
对于那些担心攻击风险的人(OP 并不担心,OP 担心的是资源消耗),如果你确实有 phpmyadmin,那么:
使用每个目录指令。
ORDER DENY, ALLOW
DENY FROM ALL
ALLOW FROM *safe places*
说真的,很少有人应该有访问权限。除非他们是 DBA,否则有什么理由冒这个险呢?在发生事故时,Apache 可以根据需要重新配置,以便从单个地址打开门。如果您不在,则可以通过 VPN 进入同一网络上的 VNC/RDP 桌面或使用代理。
他们的脚本仍然会给你 404 错误(至少有一个 403 错误)。留下虚拟文件夹和配置代码让他们找到只会鼓励他们。我只是使用 grep -v 来过滤目录名称。
答案2
首先不从默认 vhost 提供任何内容,这样仅基于 IP 地址盲目攻击您的机器人就不太可能发出会触发您这边任何“重量级”操作的请求。
然后你可以使用失败2ban并检查日志内容 + 阻止盲扫描的 IP。
答案3
我现在正在使用@mod_evasive@,事实证明这是一个很好的解决方案。
答案4
确保 PHPMyAdmin 是最新的。隐藏它,将其放在他们不会扫描的目录中,例如/padmin32
。