这是一个悲伤的故事,大一快结束了,有一门课期末考察从无到有建设一个属于自己的网站,作为阿水头号妹妹粉,我打算开辟电竞古川雄辉的博客历程。小红书真是世界上最好用的app,从wamp到lamp再到docker搭建网站都有很棒的教程,不过最后还是要感谢小红书那个答疑的大叔帮我用一句docker的话实现了网站,只是他的服务器有点差,每次登录都很慢,但这妨碍不了电竞少女的热情。做了几个海报后让大叔帮我放了上去总算有点像是正常网站了,距离交作业还有2个月我已经感觉要满分了哇哇哇哇。
就这样正常了一周后,某天和隔壁4A风景区宿舍炫耀时发现访问不了了,一开始还以为是大叔乱搞,后来才知道我的小网站被人攻击了,一直感觉网站被攻击那是新闻里的事情,况且本身建站也才不到一个月,网站访问量也不是特别多,居然也会被人盯上。
事情大概是这样的,大叔这几天连续收到五六天服务器负载过高的警告邮件,一开始没有在意,突然有一天收到某云厂商的短信轰炸,说服务器被恶意ip不断攻击。大叔说这个就不会了,我刚好是学信息安全的可以多搜索看看,我尝试搜索了一波,网上说可以看一下进程记录,虽然不知道是什么东西但总算可以找学长问问了。学长指导后发现有个进程占据了90%以上的内存并且系统负载都是100%,又看了一下访问日志,发现连续几天在同一时间几乎都有大量的ip疯狂地请求网站,虽然比不上那些新闻中的攻击量,但也足以让我的小服务器挂掉了。这时候我就有点着急了,因为我本身对于网站架设和安全防护这块也不太了解,就只是一个新人站长提供一些学习服务。于是乎,我便开始到处寻找防御的方法,这里就记录一下整个过程,希望能帮助到那些和我一样有着同样需求的人。
分析
我只是搭建了一个idol的小博客,怎么会被人盯上了呢?当然想这些也没有用,还不如好好想想怎么防住攻击。在Google上搜索了一些相关的资料,才知道这种情况属于DDOS攻击的一种,但不是DDos而是CC攻击。CC攻击的特点是每个请求都是合法的,而且请求ip都是分散的,就像是正常用户访问网站,攻击者会在短时间内通过代理服务器发出大量的请求,由于短时间内每一个IP请求次数都可能没达到屏蔽的量,所以单纯用防火墙没有办法有效防止的。
尝试一
查到CC攻击请求的都是动态资源,比如PHP,于是我跟着网上的方法限制PHP并发,减少PHP的并发数目,还限制了单个服务器的并发数目。
隔了一晚上我去查看服务器的日志,发现攻击并没有停止,而且攻击的请求的状态码都是499。查阅得知499 是 nginx 引入的非标准状态代码,用于在 nginx 服务器在处理请求时客户端关闭连接的情况。关闭的一般原因都是服务器处理请求得太慢,客户端等不及了就直接关闭了请求。就像我们平常访问一个卡断的网站,因为一直加载不出来就关闭了网页,这样就会出现这个状态码,既然出现了这个状态码说明服务器还是会接收攻击者的请求并交给php处理,由于php处理过慢所以攻击者为了继续攻击关闭了这个请求,并不能通过限制并发来防御CC攻击。
尝试二
请教了相关领域的朋友,建议我从防火墙屏蔽IP入手,并给我发了一个CCKiller脚本,让我尝试直接将IP用iptables屏蔽掉。为了更好的统计ip的访问次数,朋友还帮我修改了脚本,让它只监听指定的端口和指定状态的ip访问,同时将IP屏蔽频率限制到了每3秒超过5次就屏蔽。
第二天看了一下服务器的日志,发现并不起作用,可恶,难道这样还不可以吗。带着脑袋疼分析了一下是由于攻击者用了一整个段的ip来发送请求,同一个ip出现5次的间隔甚至超过5秒。我提出将频率限制到每10秒超过2次就屏蔽,但朋友说这样会导致正常用户被误封,遂放弃这种极端的手段。
尝试三
在我查看服务器日志时,无意间发现服务器管理处有一个功能模块,叫做waf。其中就有一个防御CC攻击的功能,我看着教程试着启用了防CC攻击功能,并设置CC攻击触发频率为5次,触发周期为3秒。
满心期待地等到了第二天,发现waf日志中并没有任何防住cc攻击的记录,看了一下服务器访问地址,还是有大量的攻击请求。因为我怀疑是自己配置的问题,于是我又去各种论坛上问师傅们是什么情况,有师傅和我解释说这个waf在防CC攻击这一块的原理还是根据IP+请求的URL作为依据来统计频率,和之前的脚本异曲同工,并不能防住大量ip+随机urk请求。
尝试四
终于发现靠自己瞎鼓捣不能有什么效果,于是我又去查阅了更多相似的事例,总结下来,一是需要购买高防服务器,但是这个太贵了,我没有那么多充裕的资金,二是配置CDN,但是需要很多麻烦的操作,而且免费的cloudflare对于国外访问还行,国内IP登录不上,于是也放弃了这个方案。
就在我一筹莫展的时候,我发现天翼云安全加速平台Accessone最近有一个福利活动,首次接入可以享用连续三个月500GB免费流量,不仅提供抗D服务还自带waf功能,而且还提供了一个内容分发网络,可以缩短网站加载时间并减少服务器负载。带着不用白不用的想法,我申请了接入,没想到配置过程非常简单,我就将我的域名放到设置里,然后打开了功能后我就去休息了。
第二天半信半疑地看了服务器日志,竟然真的没有相关的攻击信息了,我惊喜地看了Accessone平台上的日志,上面清晰地记载着每个攻击者的ip和行为,还有一个安全报表能一目了然地看到攻击者在cc攻击时还尝试用其他漏洞来进行攻击。
总结
经历了这次攻击事件,我学到了很多网站运维的知识,但是也发现需要消耗大量的精力去查阅资料有时候还得不断地重新搭建服务器。所以我觉得专业的事就要交给专业的人去做,将网站托付给安全加速平台,让专家帮我们保护网站安全,这样我们就有更多精力去做好网站内容,服务我们的访问者,比如目前天翼云的安全加速平台Accessone的免费体验效果很棒,大家都可以去试试。