序言
DDOS大家都不陌生了,不管是在正常行业,还是灰色行业,各公司都在明争暗斗,此类攻击一直没停过,涉及到的勒索事件也很多。
遇到DDoS?
当遇到DDOS攻击时,先不要慌,喝杯82年的雪碧冷静一下,沉着查看预警系统和各信息(你慌也没用,越慌幕后攻击者越开心)
状况?
网站无法访问
初步处理?
查看内存情况,查看是否有内存溢出:
free -m
total=used+free,对于这几项,“shared / buffers / cached”是包含在used里面的。
查看cpu使用情况:
top -c
查看nginx使用情况:
ps -ef | grep nginx
强制关闭nginx:
kill -9 [pid]
这时候查看云平台,各项指标逐步恢复正常
再次启动nginx:
./nginx -c /usr/local/nginx/conf/nginx.conf
启动成功之后:
各项指标又开始飙升!
马上看看nginx日志:
tail -f access.log
通过日志,可以看到会有大量异常访问记录

可以看到有几个地址被大量get请求,发现请求的地址是个图片链接,因为网站没设防盗链,从而被攻击。
来,我们去配置一下nginx:
vi /usr/local/nginx/conf/nginx.conf
找到了以下代码:
location /sw_db_pics/ {
……
}
增加防盗链:
location /sw_db_pics/ {
valid_referers xxx.com;
if ($invalid_referer) {
return 403;
}
……
}
意思就是非指定网站对图片的访问,统一返回403
此时去看一下访问日志:
tail -f access.log

这时候非正常访问的都返回403了,应急处理工作告一段落。
微信公众号抽风
微信有个坑爹的问题,如果从微信端进入网站,日志里的UA就没有带域名,referer也是空的,这么说来,还得找其他方式解决这个问题。
找到另一个拦截点
还是分析nginx日志,看到攻击源浏览器内核都是Dalvik/2.1.0(谷歌的Android虚拟机) 或者 WeChat/6.7.2.34,那我是不是可以通过过滤这两种内核来达到拦截攻击的作用?
把访问的内核过滤出来:
tail -n 10000 /usr/local/nginx/logs/access.log | awk -F\" '{A[$(NF-1)]++}END{for(k in A)print A[k],k}' | sort -n | tail
修改nginx配置,拦截特定浏览器内核访问:
location /sw_db_pics/ {
valid_referers none blocked xxx.com;
if ($invalid_referer) {
return 403;
}
if ($http_user_agent ~* (Dalvik/*|\-|WeChat/*|Alexa\ Toolbar|Sogou\ web|Semrushbot|Scrapy|Curl|HttpClient)) {
return 403;
}
……
}
保存配置后重启nginx,再次观察服务器指标,一段时间后依旧正常。
总结
通过把此次攻击转危为安,又加深了自己对网络安全的理解,要做的工作一定要提早做好,比如云平台设置下告警提醒,nginx或者tomcat的相关安全设置,IP白名单、缓存、并发量、IP连接数,每个企业环境不同,对应的设置数值也不能完全一样,但思路是通用的。