Apache / Linux Webserver动态阻止传入的POST请求

时间:2013-03-29 00:29:07

标签: php linux apache webserver centos

Backstory :最近有人以某种方式破坏了与我的服务器链接的Xenforo安装,并注入了无休止的循环php mail()脚本。它从域内向外界发送了数千封电子邮件,最终让我的域名被所有主要的电子邮件ISP列入黑名单,直到我发现它发生了。我发现该文件以某种方式注入到论坛的缓存和skin_cache目录中,并将其删除并设置永久重定向(使用php头重定向)到反垃圾邮件收集站点。

当前问题:我现在看到一个稳定且永无止境的POST请求流向上述垃圾邮件脚本。 IP每次都不同,似乎永远不会停止。这已经发生了两个多星期。这么多,以至于我的apache最大化其MaxClients设置并遇到内存问题,并开始关闭其他进程以进行补偿。

这是日志中显示的内容

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"

我需要有关处理此问题的最佳方法的建议。简单地重定向或404'它们不会停止服务器上的资源使用。还有这么多不同的IP以如此恒定的速率存在,很难看出是否存在任何重复的IP。他们似乎都是随机范围和不同的起源。老实说,我不确定这些是虚假请求,还是真正受到侵害的客户受到垃圾邮件xss或某种病毒的攻击。

提出一种方法来禁止任何动态请求该文件的IP以便它们无法重试是否合理?我需要建议和帮助。

1 个答案:

答案 0 :(得分:3)

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

快速简便的修复:向您的Apache配置添加<Location>块或忽略这些请求的重写规则。

厚颜无耻,随意的方法:使用基于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 :这取决于。您的服务器可能配置错误或受到了损害。