今早起来准备修一个 Blessing Skin Server 的 BUG 的时候,打开演示站发现慢到没朋友,最起码要 60s+ 才会有响应。当时我也没多想,觉着大概是 DO 线路又抽风了,然后挂上代理访问演示站,但依然是无响应。这时候我开始觉得不对劲了,SSH 连上 VPS,top 一看,诶哟,90% 的 CPU 占用,清一色的 php-fpm 进程。

当时我就有点方了,去 DO 的控制台看了下图表,CPU 从上午十点左右开始就一直是爆满状态。再去看了一下 netstat,有几个 SYN_RECV 和一大票 ESTABLISHED,我就觉得有可能是被 cc 了。

随后去看了一下 Nginx 的访问日志,发现从早上开始就一直有人不断地 HEAD / 请求,排查了一下最后发现请求的是 skin.prinzeugen.net 这个域名,也就是 Blessing Skin Server 的演示站点。

当时我就惊了,我 tm 和你什么仇什么怨你就来打我,真的是搞不懂。不过当时我有其他事要忙,看了一下就几个 SYN_RECV 的连接,怕被 DO 空路由,就把 skin 子域名的解析改到 Andy 给我的 NyaVM 的一台带 DDoS Protect 的机子上,然后把那个 UA 给 ban 掉,就先放置了。

后来两点左右 NyaVM 的 CoCo 过来跟我说那台机子被 DDoS 封 IP 了,虽然先帮我解了,但是再打的话就要封 12h 了。诶哟没想到这攻击者还挺能,DDoS CC 一起来。

我又去看了 NyaVM 机子上的 Nginx 日志,发现现在不是 HEAD / 而全变成 GET /csl/xxx.json 了。怕不是被发现我没上缓存,每次生成 JSON 都要去查询数据库所以改请求这个了。差不多每秒有 30+ 个请求,直接把我打得没响应了。

总这样下去也不是个办法,所以我只好先把 skin 子域名的 nginx deny all; 了,这下虽然好一点(因为没经过 PHP 处理所以不再是 php-fpm 进程占资源了),不过光是 Nginx 回个 403 CPU 就飚到了 50%+。

总这样下去也不是个办法,于是我把两台机子上的 Nginx 日志拉了下来准备写个脚本分析,如果 IP 没多少的话就全部用 iptables ban 掉。

然后。。

HEAD: Total 28 ips.
GET:  Total 7662 ips.
[Finished in 3.2s]

对不起,我服了。

早些时候的 HEAD 也就是 20 几个 ip 不断地发请求:

13.75.95.181: 2
139.129.14.230: 1
167.160.166.145: 2
58.216.99.73: 3
119.57.158.170: 2
43.224.212.9: 1
45.32.16.90: 2
113.250.222.52: 2
85.93.89.232: 1
107.178.194.90: 11
182.108.246.191: 31
119.97.137.157: 11200
122.228.199.114: 11190
157.122.99.90: 11213
107.178.194.92: 9
115.28.28.62: 1
107.178.194.88: 13
114.232.230.225: 1
104.131.148.189: 1
119.81.1.69: 4
115.63.103.29: 11209
60.210.10.50: 11208
158.69.134.29: 1
168.235.84.233: 2
113.31.27.206: 11215
95.188.89.153: 4
220.176.115.122: 25
50.205.89.186: 2

后来的 GET /csl/xxx.json 就是 7k+ 个 IP 在请求了,我是真没辙了,我认怂,您是大哥。

iptables -I INPUT -i eth0 -p tcp --dport 443 -j DROP

我他妈的高考改革十月份就得考试,哪有闲心和你们玩。你们都是大爷,要是还是打不停的话,演示站爱谁谁搞去。

除另有声明外,本博客文章均采用 知识共享(Creative Commons) 署名-非商业性使用-相同方式共享 3.0 中国大陆许可协议 进行许可。