第一个字节的时间过长

第一个字节的时间过长

我的网站受到恶意机器人流量的攻击,过去一周我一直在努力阻止这种攻击。它出现在我的“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 记录只能有一个主机)。一旦我删除了冲突的记录,连接便能够快速解决,即使多人同时访问该网站。

相关内容