1

背景故事:最近有人以某种方式破坏了连接到我的服务器的 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 以使他们无法重试是否合理?我需要建议和帮助。

4

1 回答 1

3

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

快速简单的解决方法:<Location>在您的 Apache 配置中添加一个块或一个重写规则,它将忽略这些请求。

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

更好的解决方案:实现一个 Web 应用防火墙,如 Apache 的mod_security. 您可以添加附加规则以匹配传入请求并将它们列入黑名单,或任何其他合适的副作用。

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

  • 您的 PHP 脚本可能会导致一些重大的性能/效率问题。
  • 您的 Apache 配置可能未经过优化以处理大量流量。
  • 您的服务器受到威胁,您现在有更大的问题需要处理。

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

TL; DR:这取决于。您的服务器可能配置错误或受到威胁。

于 2013-03-29T02:30:53.343 回答