网络安全方向:10分钟2700w请求的攻击我是如何处理的

昨天2023年7月16日,本站遇到了搭建博客以来最大的攻击,10分钟2700w的请求🙏,峰值达到了令人震惊的1400w!

从时间上来看,18:4018:50,短短10分钟,几乎是一瞬间就被请求了https数2000万次,多吉云在20:00给我发送了请求数激增到2000w的短信

我立马反应过来,登录控制台一看,哦豁,由于之前换了域名,还没来的及设置QPS 限制,于是就被钻空子了

什么是QPS 限制?

超出 QPS 限制的请求会直接返回错误,设置较低频次限制可能会影响正常用户的使用,请根据业务情况合理设置阈值。
被 QPS 限制拦截的请求不会产生 HTTPS 请求数计费。但需要特别注意的是,当请求被“域名防盗链”规则优先拦截后,无论是否超过 QPS 限制,都将进行 HTTPS 请求数计费。

比如我设置为120次/s,那么一个ip在1s内只能请求当前域名120次,将QPS设置在一个合理的范围内将能够很大程度上的保护你的站点,设置过低将降低正常用户的访问。

日志查看

设置好QPS以后,我痛定思痛,将多吉云提供的将近3G的日志下载了下来

下载下来vscode打开一看,好家伙,上百万行数据,随便搜索了一下,无一例外,全是国外ip

痛定思痛

首先一定要设置好QPS和每日上限,我目前每日上限设置为5G,QPS为20/s

经过仔细观察可以发现,几乎所有的攻击都来自海外,所以我们需要屏蔽海外的流量,首先Nginx防火墙,从Nginx下手其实并不是最优解,因为即便是在Nginx将所有的海外ip都封禁了,但是由于我有使用CDN,也就是说,流量还是会先经过CDN再来到Nginx防火墙,依然被刷掉了CDN的https次数,所以我们应该另外寻找办法

首先我们可以想到在机房层面屏蔽海外ip和udp,这是最优解,但是总是调整或者经常联系机房对我这个社恐来说是不现实的,于是我看上了第二种办法。

那就是从解析层面处理,使用DNSPod解析是支持境内与境内分开解析的,将境内解析到国内CDN以后,再将境外解析到127.0.0.1即可解决问题。

但是解析到127.0.0.1以后使用境外ip是完全打不开了,所以我做了一个单页面用来提示境外访问使用境内网络环境访问。

项目地址: https://github.com/anzhiyu-c/OverseasProhibition

然后使用cname这个单页网站解析到vercel

直接在vercl导入github项目后绑定自定义域名

至此算是做了我能想到的所有努力,欢迎大家补充。