强制Apache2.2放弃请求

长话短说我们最近有一个共享主机被盗用的帐户,问题已经解决,但受影响的帐户仍然被垃圾邮件,每天有超过一百万的请求到一个特定的文件。

由于泄密文件不存在,所有的请求都通过Apache的minimalistic 404页面实现,重约521字节。 问题是512bytes * 1M +的请求不仅对我们的服务器性能造成影响,而且是每天浪费带宽。

  • 来自数百个IP因此阻止个人IP的攻击是不可行的。
  • 所有的请求都是对同一个文件的POST请求,我们称之为“evil.php”。

我们试着简单地使用一个RewriteRule,并禁止所有对evil.php的请求,但是这显示了一个被禁止的页面,使我们离开了我们开始的地方。

理想情况下,我们只需要将请求放到“evil.php”,不返回任何内容。 基本上停止响应Apache。 这是可能的和如何?

编辑

为了这个练习,假设没有shell访问,所有的解决scheme都必须通过类似cPanel的接口来实现。 虽然这不是这种情况,但是我们对服务器进行configuration更改的自由度比LAMP堆栈,DNS(绑定)和邮件configuration要小。

mod_security,操作“drop”。

[用于serverfault的填充字符]

如果你用一个零长度的文件replace“evil.php”怎么办? 至less在我安装的Apache 2.2中,只需要大约206个字节(HTTP标头)。 一个404占用大约500个字节。 那至less会把你的stream量减半。 对于更高级的黑名单,请查看:

http://perishablepress.com/press/2009/02/03/eight-ways-to-blacklist-with-apaches-mod_rewrite/

您可以创buildevil.php文件并将其托pipe在apache上,并返回空的内容(类似于Markus的build议)。 同时,您可以将请求的IP保存在文本文件中。 然后,这个文本文件可以通过脚本读取,将所有这些IP添加到iptables规则中,以放弃所有未来的请求。 这样你可以收集所有请求的IP并停止它们。