长话短说,我们最近在其中一个共享主机上发现一个账户被入侵了,问题已经解决,但受影响的账户仍然每天收到超过一百万个针对特定文件的垃圾邮件请求。
由于泄露的文件已丢失,所有请求都以 Apache 的简约 404 页面处理,大小约为 521 字节。问题是 512 字节 * 1M+ 请求不仅影响了我们的服务器性能,而且每天浪费数千兆带宽。
- 攻击来自数百个 IP,因此阻止单个 IP 是不可行的。
- 所有请求都是对同一个文件的 POST 请求,我们称之为“evil.php”。
我们尝试过短暂使用 RewriteRule 并禁止所有对 evil.php 的请求,但这会显示一个被禁止的页面,让我们回到原点。
理想情况下,我们只想放弃对“evil.php”的请求,并且不返回任何内容。本质上阻止 Apache 响应。这可能吗?如何实现?
编辑
为了便于练习,我们假设没有 shell 访问权限,并且所有解决方案都必须通过类似 cPanel 的界面实现。虽然这里的情况并非如此,但除了 LAMP 堆栈、DNS(绑定)和邮件配置之外,我们对服务器配置进行更改的自由度很小。
答案1
mod_security,操作“删除”。
[为 serverfault 填充字符]
答案2
如果您将“evil.php”替换为零长度文件会怎样?至少在我安装的 Apache 2.2 中,它仅占用约 206 字节(HTTP 标头)。404 占用约 500 字节。这至少会将您的流量减少一半。有关更高级的黑名单,请查看:
http://perishablepress.com/press/2009/02/03/eight-ways-to-blacklist-with-apaches-mod_rewrite/
答案3
您可以创建 evil.php 文件并将其托管在 apache 上并返回空内容(类似于 Markus 的建议)。同时,您可以将请求 IP 保存在文本文件中。然后脚本可以读取此文本文件,将所有这些 IP 添加到 iptables 规则中以删除所有未来请求。这样您就可以收集所有请求 IP 并阻止它们。