我的网站受到恶意机器人流量的攻击,过去一周我一直在努力阻止这种攻击。它出现在我的“other_vhost_access.log”中:
www.mywebsite.com:80 217.96.40.85 - - [01/Sep/2017:12:21:08 +0000] "HEAD http://xxx.xxx.xxx.xxx:80/phpmyadmin/ HTTP/1.1" 302 237 "-" "Mozilla/5.0 Jorgee
“
和:
www.mywebsite.com:80 173.208.148.218 - - [31/Aug/2017:09:32:10 +0000] "POST /FlashChat/upload.php HTTP/1.1" 302 523 "-" "Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Trident/5.0)"
www.mywebsite.com:80 173.208.148.218 - - [31/Aug/2017:09:32:11 +0000] "GET /FlashChat/temp/error.php HTTP/1.1" 302 531 "-" "Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Trident/5.0)"
昨天我收到了大约 4000 个这样的请求,每 30 秒有 100 个。这很麻烦,因为当它发生时,TTFB 每次都会增加 21 秒。
我已启用 Apache 服务器状态,据我所知,资源没有过度占用(CPU 保持在 1% 以下,8 个工作线程中最多有 4 个在运行)。但即使刷新服务器状态页面也需要排队。
我正在运行 EC2 t2 micro具有 tls 证书的实例。我使用两个 VirtualHost 指令(一个到主站点,另一个到子域,都在同一个文件中)将流量从端口 80 转发到端口 443。
我已经在网上尝试了各种建议,但是我不确定它们是否真的有效,因为攻击仍在继续,而且排队时间也随之延长。
例如,Jorgee 要求我在 .conf 中包含以下内容:
IfModule mod_ssl.c>
FileETag None
TraceEnable off
<IfModule mod_headers.c>
Header set X-XSS-Protection "1; mode=block"
</IfModule>
<Location "/">
SetEnvIfNoCase User-Agent "Mozilla/5.0 Jorgee" bad_bot
Deny from env=bad_bot
</Location>
这是我的 .conf 中的前几行。通过https://www.hurl.it/其响应为 403。我以为它会直接拒绝连接,但事实并非如此。
我还尝试使用 iptables 命令来限制每个 IP 的连接数:
sudo iptables -A INPUT -p tcp --syn -m connlimit --connlimit-above 5 --connlimit-mask 32 -j REJECT --reject-with tcp-reset
运行 sudo iptables -L 显示以下内容:
ubuntu@ip-172-31-55-158:~$ sudo iptables -L
Chain INPUT (policy ACCEPT)
target prot opt source destination
LOG all -- anywhere anywhere limit: avg 5/min burst 5 LOG level debug prefix "iptables denied: "
REJECT tcp -- anywhere anywhere tcp flags:FIN,SYN,RST,ACK/SYN #conn src/32 > 5 reject-with tcp-reset
Chain FORWARD (policy ACCEPT)
target prot opt source destination
Chain OUTPUT (policy ACCEPT)
target prot opt source destination
然而,不到一分钟,我仍然会从同一 IP 收到 100 多个请求。
我希望使用 apache 和 iptables 来控制这些请求。谢谢。
答案1
事实证明,我的 A 记录存在冲突(因为 URL 重定向、CName 和 A 记录只能有一个主机)。一旦我删除了冲突的记录,连接便能够快速解决,即使多人同时访问该网站。