序言

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连接数,每个企业环境不同,对应的设置数值也不能完全一样,但思路是通用的。

Leave a Reply