最近给一个客户搭的网站,受到DDOS攻击,因为源码是在网上找的,代码质量不忍直视,一个首页就有n条sql查询。虽然服务器配置用了8核8G内存,然后也加了阿里云全站加速(过滤了一些流量),但网站还是一打就死。
客户反馈过来,说是网站打不开,于是我马上登服务器查看,mysql的进程直接卡死了,于是重启服务器,然后优化mysql的参数(mysql默认安装的配置不是最优的,可以根据服务器配置优化内存,线程等参数)。
没几分钟网站又卡死了,于是登录阿里云,查看访问情况,乖乖,直接300G流量打过来,尽管回源流量只有十分之一,我知道优化代码已经无济于事了(也是懒得优化)。
客户那边急得不行,于是我查了一下阿里云的防DDOS服务,不看不知道,一看吓一跳。
最便宜的保险版,20200一个月,想都不敢想一个小破站,总共都只花了十分之一的费用,让花这么多钱,那还是关了吧。上高防服务器,看这流量可能也扛不住,能抗住的服务器那费用也是一样的了。
客户还想着要挣扎一下,看有什么办法?我提议换个域名(因为用的是全站加速(类似cdn),服务器ip是隐藏的,ip不用换)。但是我也和客户说明了,如果破坏者知道了新域名,那也是白搞。
就在一筹莫展之际,我看到全站加速,数据面板有一个筛选项(区域选择),于是试着筛选一下中国的流量。
流量少了十分之一(幸运的是当时没注意到回源流量还是一样的【笑哭】,如果发现了还是会放弃这个方案),因为网站用户主要是国内的用户,心想如果能限制访问区域,那这就可以过滤掉大部分的流量,那也是好的。刚好全站加速里的WAF里有一个限制访问区域功能。于是开通WAF,添加好限制访问区域策略。
第一次出于爱国情怀,将香港、澳门、台湾排除在封禁区域(其实是没注意到)。配置好这一切之后,我竟然有点期待破坏者快点再来打一下(哈哈,受虐狂)。
第二天,果然又来搞事情了,上午的拦截效果不错,网站只有一小会儿波动,但是晚上一波拦截效果就不太理想了,网站停了10多分钟,于是再次查看拦截策略,原来台湾,香港,澳门是算在中国境内的(阿里云这些小细节还是到位的)。尽管有民族大义,但是破坏分子就是利用了这点,没办法只能把他们三也加到封禁区域。
在更新了拦截策略后,第二天,他们又攻击了一波,几乎全部拦截。
攻击者见流量都被拦截就放弃了,过了几天还试探性地测试了一下,也是几乎100%拦截。至此本次“攻防战”以守方巧妙利用攻击方弱点(攻击者一般也是中国公民,不太敢用内地ip攻击,又或者内地ip攻击费用较高)防御获胜。
总结
通过本次防御经历,面对DDOS攻击是有很多办法的。
1.优化代码逻辑(像本次的网站,很多效率不高的sql请求),节约服务器资源,增强抗打击能力。
2.优化服务器相关软件的配置,榨干服务器性能。
3.借用三方防护服务,例如流量清洗,高防服务器(简单粗暴,成本较高)。
4.巧妙分析具体情况,例如依据本例中的服务对象所在地,限制访问区域。
5.限制访问频率(可能误杀),本次没有实际使用,但也在使用计划中,阿里云的WAF好像也有这个功能。
6.其实本次还试用了通过访问日志来统计请求ip,将访问量大的ip封禁(因为攻击者一般是通过购买攻击流量来攻击,所以攻击IP会有很多重复请求,这要就可以把这些ip封禁在黑名单里)。
7.同6,不过拦截的是请求头,可以将请求次数较多的浏览器Agent添到黑名单。又或者根据本次案例站点的特征,提供的服务主要是手机端的客户,那么就可以将不是手机端的请求拦截。
参考资料
哈哈,这是好像是本站第一篇没有参考文献的技术文章,都是根据自身经历水的一篇技术文章。本站没有加上述防护,也没什么商业价值,配置也很差,一打就死,求大佬放过,不要进行攻击测试。
原创文章,作者:Zeyu,如若转载,请注明出处:https://jinzhijun.cn/develop/1229