距离上次被DDOS攻 击已经有10天左右的时间,距离上上次已经记不起具体那一天了,每一次都这么不了了只。然而近期一次相对持久的攻 击,我觉得有必要静下心来,分享一下被黑的那段经历。
在叙述经历之前,先简单的介绍一下服务器配置情况:
ECS 1核2G内存1MB带宽,Linux系统
RDS 2核240MB内存,最大连接数60
Redis 256MB共享实例,搬家之后没用到
CDN 按量付费,缓存小文件
以上配置,对于一个日访问量几千的网站来说应该绰绰有余了,并发撑死十几个左右,以下是简单的网站部署情况:
经历
前段时间听说过互联网大佬阮一峰博客被DDOS的经历,可谓是持久啊,最终被迫转移服务器,据说还被勒索。然不知道为啥是哪个仙人板板居然盯上了我的小站?难道我比阮大神长得帅?
好吧,故事开始,2018年6月14日,凌晨两点三十收到了阿里云系统告警通知,告知网站无法访问,然而那会我还在睡梦中。
跟往常一样,差不多六点左右醒来,习惯性的翻看手机,恰好此时又发来了短信告警。要在平时的话是可以再睡两个小时的,然而此时一个激灵,瞬间困意全无,怎么说我也是有几千访问量的博主了。
于是,赶紧爬起来打开电脑,尝试访问下博客和论坛,果不其然浏览器在一直打转转。
问题排查
尝试远程登录服务器:
查看Nginx 和 PHP-FPM,ps -ef|grep xxxx
查看系统剩余内存 free -m
查看CPU使用情况 top
查看Nginx错误日志 tail -f error.log
查看日志容量 ll -h
查看并发连接数 netstat -nat|grep ESTABLISHED|wc -l
一顿骚操作之后,并没有什么异常,内存和CPU平稳,Nginx和PHP 进程没问题。然后分别重启了一下 PHP 和 Nginx,开始网站还可以访问,进入社区首页就被卡死。
查看错误日志,后台使劲的刷日志,随便查看了几个IP,有印度的,美国的,菲律宾的等等,当然大多数还是国内的IP。一晚上的时间居然刷了上百兆日志(上次被D我清理过一次),反正我觉得是不少了,对比网站平时的访问量来说。
之前有过几次攻 击,但都是三三俩俩的过来,使用Nginx禁掉IP就是了。然而此次,显然不是禁掉IP可以解决问题的了,这么多IP收集是个问题(当然可以通过正则匹配获取),还有可能造成误伤。
上班途中
然而上班才是正事,心思着一时半会解决不了问题,瞄了一眼错误日志,还在使劲的刷着,然后顺手发了个朋友圈然后去洗漱:
路上一路嘟念,心想是不是到了9点,他们准时下夜班然后就可以正常访问了,自我开解一下。
上班中
到了公司,第一件事当然是远程登录下服务器,看了一下,错误日志还在使劲刷。正常来说这个是时间点是不会有用户来访问的。
重启了服务多次,访问一下首页就被卡死,然后瞬间瘫痪,整个网站(社区+博客)都不能访问了。既然这样,还是老实上班,坐等攻 击停止吧。
期间群里的小伙伴们问网站怎么了,打不开了椰?将近中午的时候,查看了一下错误日志,还有那么几个IP再尝试请求不同的地址,一瞅就不是什么好东西,果断deny了一下。话说,现在请求没那么多了,重启了一些Nginx 和 PHP 进程,访问首页还是卡死?真是怪了个蛋。
心想是不是RDS数据库的问题,查看了监控报警面板,CPU和内存利用率和当前总连接数都正常,没有什么异常,凌晨两点-六点左右的确有波动,但是不至于被D死。既然都登录了,要不顺便把 ECS 和 RDS 都重启了吧。
果然,重启一下居然神奇的好了,吃午饭的时候还用手机访问了一下,正常,可以安心吃饭了。
问题解决
其实,最终问题怎么解决的,我并不清楚,说几个比较疑惑的点:
ECS 服务器 CPU 和内存也在正常阈值
Nginx 和 PHP-FPM 进程都分别重启过
RDS 数据库连接数尽管有所波动,但是并没有占满未释放
看错误日志请求都是来自上百个不同的IP,并且大多都是访问的社区URL
还有这些肉鸡为什么都是晚上?晚上便宜?还是说在西半球组织×××
此次是有针对性的,还是随机的?但愿是随机的
中间停止过一次社区,博客是可以一直正常访问的,怀疑是首页数据库查询的问题,基于连接数应该不是这个问题,难道是Discuz的Bug?但是后来重启数据库后的确可以正常访问了。
其实阿里云有基础的DDOS防护,清洗触发值:
每秒请求流量:300M
每秒报文数量:70000
对于一般小站来说,是万万不可能达到300M的流量阈值的,博客的CDN峰值才3M而已。
所以说,这些小波流的攻 击只能自身去默默承受,而机器配置不高,买不起带宽只能任杭州网站建设自由的撒欢,还不如直接关站,扔给他一个Nginx + 静态页面让它D去吧。