Apache / Linux Web服务器dynamic阻止传入的POST请求

Backstory :最近有人以某种方式破坏了与我的服务器连接的Xenforo安装,并注入了一个无限循环的PHP邮件()脚本。 它从域内向外界发送了数以千计的电子邮件,最终让我的域名从所有主要的电子邮件服务提供商列入黑名单,甚至没有注意到它发生了。 我发现这个文件被注入到论坛的caching和skin_cache目录中,并将其删除,并build立一个永久的redirect(使用php头redirect)到一个反垃圾邮件收集站点。

目前的问题 :我现在看到一个稳定的,无休止的POST请求stream向上述的垃圾邮件脚本。 知识产权每次都不一样,似乎永远不会停止。 这已经发生了两个星期了。 所以我的apache正在最大化MaxClients设置,并且遇到内存问题,并开始closures其他进程来弥补。

这是日志中显示的内容

190.40.7.126 - - [28/Mar/2013:18:58:30 -0500] "POST /forum/cache/sslFDoB.php HTTP/1.1" 200 3889 "-" "Mozilla/5.0" 190.104.19.189 - - [28/Mar/2013:18:58:39 -0500] "POST /forum/cache/sslFDoB.php HTTP/1.1" 200 3889 "-" "Mozilla/5.0" 78.251.159.173 - - [28/Mar/2013:18:58:57 -0500] "POST /forum/cache/sslFDoB.php HTTP/1.1" 200 3889 "-" "Mozilla/5.0" 219.78.213.10 - - [28/Mar/2013:18:59:09 -0500] "POST /forum/cache/sslFDoB.php HTTP/1.1" 200 3889 "-" "Mozilla/5.0" 69.123.20.137 - - [28/Mar/2013:18:59:09 -0500] "POST /forum/cache/sslFDoB.php HTTP/1.1" 200 3889 "-" "Mozilla/5.0" 2.234.181.7 - - [28/Mar/2013:18:59:37 -0500] "POST /forum/cache/sslFDoB.php HTTP/1.1" 200 3889 "-" "Mozilla/5.0" 187.207.223.67 - - [28/Mar/2013:18:59:44 -0500] "POST /forum/cache/sslFDoB.php HTTP/1.1" 200 3889 "-" "Mozilla/5.0" 24.242.122.42 - - [28/Mar/2013:19:01:56 -0500] "POST /forum/cache/sslFDoB.php HTTP/1.1" 200 3889 "-" "Mozilla/5.0" 213.49.254.102 - - [28/Mar/2013:19:02:32 -0500] "POST /forum/cache/sslFDoB.php HTTP/1.1" 200 3889 "-" "Mozilla/5.0" 82.247.48.152 - - [28/Mar/2013:19:02:38 -0500] "POST /forum/cache/sslFDoB.php HTTP/1.1" 200 3889 "-" "Mozilla/5.0" 41.135.146.136 - - [28/Mar/2013:19:02:43 -0500] "POST /forum/cache/sslFDoB.php HTTP/1.1" 200 3889 "-" "Mozilla/5.0" 91.187.93.36 - - [28/Mar/2013:19:03:04 -0500] "POST /forum/cache/sslFDoB.php HTTP/1.1" 200 3889 "-" "Mozilla/5.0" 194.90.37.132 - - [28/Mar/2013:19:03:40 -0500] "POST /forum/cache/sslFDoB.php HTTP/1.1" 200 3889 "-" "Mozilla/5.0" 

我需要关于处理这个问题的最佳方法的build议。 只是redirect或404'他们不会停止服务器上的资源使用情况。 也有这么多不同的IP在这样一个恒定的速度,很难看到是否有任何重复的IP。 他们都似乎是随机的范围和不同的起源。 我真的不知道这些是假的请求,还是真的让客户受到垃圾邮件xss或某种病毒的侵害。

想出一个办法来禁止任何dynamic请求这个文件的IP,这样他们就不能重试了吗? 我需要build议和帮助。

恶意脚本的URL可能被分发到僵尸网络,僵尸网络正在尝试使用您的网络服务器作为滩头。 这些请求最终会消失,因为僵尸网络继续请求不起作用的脚本是不利的。

快速和简单的修复:添加一个<Location>块到你的Apache配置或一个重写规则,它将忽略这些请求。

粗鲁的,随意的方法:使用基于iptables的速率限制。 iptables -A INPUT -p tcp --dport 80 -m limit --limit 60/min -j ACCEPT以下拒绝规则可能会有帮助,虽然它也可能阻止合法的流量,包括搜索引擎索引器和合法的机器人。

更好的解决方案:实现像Apache的mod_security这样的Web应用程序防火墙。 您可以添加一个额外的规则来匹配传入的请求并将其列入黑名单,或者其他任何合适的副作用。

无论您选择哪个选项,我都非常怀疑404错误会损害服务器上的资源使用情况。 你需要考虑其他因素:

  • 您的PHP脚本可能会导致一些显着的性能/效率问题。
  • 您的Apache配置可能不会被优化来处理大量的流量。
  • 你的服务器被攻破,你现在有一个更大的问题来处理。

你也可以考虑将Apache放在Nginx之后作为反向代理的后端。 根据原因,在Apache服务器前使用HTTP缓存(如Varnish)可以将服务器上的负载减少为一个相对稳定的因素,而不是一个变化的因素。

TL; DR :这取决于。 您的服务器可能被错误配置或妥协。