我会尽力解释这一点,因为这对我来说很奇怪也很困惑。不久前,我发布了一篇关于我最近设置的 VPS 上 mysql 查询持续激增的帖子。结果发现这是我正在开发的网站上的一篇帖子。该帖子有超过 30,000 条垃圾评论!由于该网站是我正在慢慢建立的,所以我还没有配置反垃圾评论软件。
我已经删除了那个让服务器崩溃的帖子,但帖子的 URL 仍然被访问。令人沮丧的是,每次访问都来自不同的 IP。我该如何开始阻止/预防这种情况?这难道还需要我担心吗?
以下是有关我的设置的一些更具体的细节,仅提供一些背景信息:
- 安装了 ufw 的 Ubuntu 8.10 服务器
- 我正在构建的网站是在 Drupal 中,现在已设置 Mollom 以控制垃圾邮件。之前没有配置过。
- 请求的发生并不连贯。有时每隔几秒就会发生一次,有时每隔一两个小时就会发生一次。然而,这种情况已经持续了一周多。
下面是过去 15 分钟内我的 Apache 访问日志的示例,仅针对相关页面:
dev.domain-name.com:80 97.87.97.169 - - [28/Mar/2010:06:47:40 +0000] "POST http://dev.domain-name.com/comment/reply/3 HTTP/1.1" 404 5895 "http://dev.domain-name.com/blog/2009/11/23/another" "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1)"
dev.domain-name.com:80 202.149.24.193 - - [28/Mar/2010:06:50:37 +0000] "POST /comment/reply/3 HTTP/1.1" 404 5895 "http://dev.domain-name.com/blog/2009/11/23/another" "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1)"
dev.domain-name.com:80 193.106.92.77 - - [28/Mar/2010:06:50:39 +0000] "POST /comment/reply/3 HTTP/1.1" 404 5895 "http://dev.domain-name.com/blog/2009/11/23/another" "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1)"
dev.domain-name.com:80 194.85.136.187 - - [28/Mar/2010:06:52:03 +0000] "POST /comment/reply/3 HTTP/1.1" 404 5895 "http://dev.domain-name.com/blog/2009/11/23/another" "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1)"
dev.domain-name.com:80 220.255.7.13 - - [28/Mar/2010:06:52:14 +0000] "POST /comment/reply/3 HTTP/1.1" 404 5895 "http://dev.domain-name.com/blog/2009/11/23/another" "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1)"
dev.domain-name.com:80 195.70.55.151 - - [28/Mar/2010:06:53:41 +0000] "POST /comment/reply/3 HTTP/1.1" 404 5895 "http://dev.domain-name.com/blog/2009/11/23/another" "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1)"
dev.domain-name.com:80 71.91.4.31 - - [28/Mar/2010:06:56:07 +0000] "POST http://dev.domain-name.com/comment/reply/3 HTTP/1.1" 404 5895 "http://dev.domain-name.com/blog/2009/11/23/another" "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1)"
dev.domain-name.com:80 98.209.203.170 - - [28/Mar/2010:06:56:10 +0000] "POST http://dev.domain-name.com/comment/reply/3 HTTP/1.1" 404 5895 "http://dev.domain-name.com/blog/2009/11/23/another" "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1)"
dev.domain-name.com:80 24.255.137.159 - - [28/Mar/2010:06:56:19 +0000] "POST http://dev.domain-name.com/comment/reply/3 HTTP/1.1" 404 5895 "http://dev.domain-name.com/blog/2009/11/23/another" "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1)"
dev.domain-name.com:80 77.242.20.18 - - [28/Mar/2010:07:00:15 +0000] "POST /comment/reply/3 HTTP/1.1" 404 5895 "http://dev.domain-name.com/blog/2009/11/23/another" "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1)"
dev.domain-name.com:80 94.75.215.42 - - [28/Mar/2010:07:01:34 +0000] "POST /comment/reply/3 HTTP/1.0" 404 5895 "http://dev.domain-name.com/blog/2009/11/23/another" "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1)"
dev.domain-name.com:80 89.115.2.128 - - [28/Mar/2010:07:03:20 +0000] "POST /comment/reply/3 HTTP/1.1" 404 5895 "http://dev.domain-name.com/blog/2009/11/23/another" "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1)"
dev.domain-name.com:80 75.65.230.252 - - [28/Mar/2010:07:05:05 +0000] "POST http://dev.domain-name.com/comment/reply/3 HTTP/1.1" 404 5895 "http://dev.domain-name.com/blog/2009/11/23/another" "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1)"
dev.domain-name.com:80 206.251.255.61 - - [28/Mar/2010:07:06:46 +0000] "POST /comment/reply/3 HTTP/1.0" 404 5895 "http://dev.domain-name.com/blog/2009/11/23/another" "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1)"
dev.domain-name.com:80 213.194.120.14 - - [28/Mar/2010:07:07:22 +0000] "POST /comment/reply/3 HTTP/1.1" 404 5895 "http://dev.domain-name.com/blog/2009/11/23/another" "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1)"
我知道这是一个开放式的问题,但如果您能提供任何帮助或见解,我们将非常感激。
答案1
这是个棘手的问题。在大多数情况下,我的首要任务是保持生产可用。根据涉及的不同源 IP 数量,您可能需要照看它或使用脚本和手动解决方案的组合。
我的第一步是尽可能多地阻止,以争取一些时间来控制局势。
了解 IP 地址..
grep 'blog/2009/11/23/another' log | awk '{print $2}' > iplist
生成 iptables 规则..
sed 's/^/iptables -A INPUT -s /g' iplist | sed 's/$/ -j DROP/g' > drop.sh
然后放下它们,使用你刚刚制作的东西。
sh drop.sh
答案2
整合类似验证码在您的评论表单上将阻止您的数据库受到攻击,因为机器人将无法通过验证码。
使用 javascript 显示“提交”按钮也会阻止一些机器人提交评论表单。
答案3
这似乎是试图发布垃圾邮件。请求似乎来自僵尸网络,因为地址无法像服务器那样解析。尝试使用各种 IP 地址的 host 命令。第一个地址似乎是 charter.com 的 dhcp 地址。现在地址已经存在,可能还需要很长时间才能消失。
如果这是开发服务器,请将对端口 80 的访问锁定到需要访问端口 80 的那些地址块。我使用 Shorewall 而不是 ufw,因为它为我提供了一个简单的界面来锁定我的服务器,但允许根据需要进行访问。
您可以使用 allow 命令锁定 Apache Web 服务器中的访问。您可以允许任意组合的地址块、地址或受密码保护的访问。
我自己会同时使用这两种方式。正如您所发现的,允许公开发布是对垃圾邮件发送者的邀请。这是您确实需要担心的问题。您似乎已经解决了这个问题。但是,帖子的状态没有显示。我建议您更改日志格式以包含帖子状态。组合日志格式将为日志分析提供更好的信息。