上个月我就说了我网站CDN被PCDN刷流量了,这快一个月了,还在继续,当然我已经没搭理了,本来今天准备录制视频教程,说下我是怎么应对的,但是外面的蝉一直叫唤,还好多,哎,服了,那就还是写文字来说明吧。
应对方案是一直就有的,我使用CDN之后,本来就一直是这样做的,只不过是这两天因为测试了腾讯云的EdgeOne服务,所以整理了一下发出来。
使用CDN之前,你先想一下,你真的需要CDN服务吗?
如果要使用CDN服务,那么在对接CDN的时候,一定要先了解清楚你使用CDN服务运营商的各种规定文档,看清楚说明,避免一夜回到解放前。
比如我使用的腾讯云CDN,他家的HTPS请求数,每个月有300万的免费额度,我的网站流量很少很少,正常来说300万的请求是完全够用的,但是如果遇到被刷流量,那这个可能就不够用了。
然后就是CDN流量,是没有免费额度的,所以在对接CDN之前,一定要先购买流量包,这个非常重要!
所以在使用CDN的前提:
1、购买CDN流量包
2、购买HTTPS请求包(除非你不用https)
我以这个博客网站所用的腾讯云CDN为例来讲下我的CDN配置。
一、访问控制
1、流量防盗刷配置(仅限中国大陆) – 启用
防护文件,看你自己的需求,我的设置:jpg.png.js.css
2、防盗链配置 – 按需启用(如果是主网页就不要开启,如果是调用静态文件的域名就开启)
3、IP访问限频配置 – 启用
4、UA黑白名单配置
curl*|*crawler*|*python-requests*|*scrapy*|*go-http-client*|*wget*|*axios*|*HttpClient*|*CriOS*|*FxiOS*
这个规则是我在问了腾讯云官方客服和AI分析的结果下,综合了几个常见的爬虫UA标识。
二、高级配置
用量封顶配置
瞬间用量 – 流量 – 500MB – 5分钟
瞬间用量 – HTTPS请求数 – 1百万次 每5分钟
我都是用的瞬间用量限制。
三、告警配置
告警配置,就是让腾讯云可以及时通知我们,CDN是否异常的情况。
在腾讯云可观测平台创建一个关于CDN域名的告警配置,我的配置:
-
流量 > 500MB,统计粒度1分钟,连续3次满足条件则每1小时告警一次
-
请求数 > 1000次,统计粒度1分钟,连续3次满足条件则每1小时告警一次
-
带宽 > 200Mbps,统计粒度1分钟,连续3次满足条件则每1小时告警一次
这个是意思就是,流量异常大于500MB、请求数大于1000次就会通知我,微信、短信、邮件都会通知到。
那我就可以及时去查看具体什么情况,根据具体的异常问题来解决,比如分析数据,封掉对应的ip之类的。
四、静态对象存储和CDN配置
这个就是用于存放静态文件的网站CDN配置了。
首先我们需要在对象存储这边做下跨域访问CORS和防盗链设置。
然后再到CDN域名配置这边,进行防盗链配置,和对象存储的防盗链设置同步。
其次到CDN高级配置 – HTTP响应头配置,这个也就是要和对象存储的跨域访问CORS设置同步。
最后按需做CDN鉴权配置,这个配置看情况吧,我暂时没有做,因为我静态CDN的域名很多地方在调用,有点乱。
注:具体的跨域访问CORS和防盗链设置,是根据你自己网站来。
五、遇到被刷流量(不限PCDN)之后怎么解决
在我们收到告警通知之后,立马去CDN控制台的数据分析里面,查看具体数据,在展示数据里面,可以都勾选上,但是我们要查看:
- 请求数
- 错误码
- TOP1000 URL
- TOP 100 客户端IP
这个后台是看不了具体UA参数的,所以这里看不看UA都无所谓,因为查看具体UA标识是要下载日志才行,这个日志在日志服务里面可以下载,
我们看请求最多的URL链接,在TOP1000 URL里面,看看被请求最多的URL,对应的是什么文件,如果文件是不正常的,或者不需要的,可以先把这个文件给删了,记得刷新缓存。
1、封异常ip
然后再到TOP 100 客户端IP里面查看,请求最多的ip,拿到ip之后,我们到:CDN配置 – 访问控制 – IP黑白名单配置
把异常访问的ip给加到黑名单去,加进黑名单的ip,它可能还会继续访问,但是会变成 514 的错误码,而腾讯云 514 的错误码不计算https的请求数,也就是不会消耗你的https套餐包。当然流量还是会走,但不会是大流量了,就一个正常的访问流量,所以这点流量没什么,我在开头就说了要先买好流量包。
如果遇到的ip太多,那我们就要持续观察,并且记录每一个异常ip,看看这些ip有没有什么共同点,这个很重要,如果是同一个ip段,那我们就可以不用一个个的封ip了,而是直接封掉整个ip段,腾讯云的ip黑名单是支持的,比如:
43.254.192.0/24
那么43.254.192.开头的ip都会被封,如果还有更多同个大的ip段,24子网不够,那么就用16子网的,比如:
43.254.0.0/16
这样的话,只要是43.254.开头的ip都无法正常访问,腾讯云也是支持这个规则的。
使用16子网的误封率肯定比24子网大,这个就看你自己的安排了,你要是时间多,有人专门盯着,那可以一个个的封,要是你觉得不太重要,比如我的博客,所以我就是直接采用的16子网进行封禁。
具体ip数:
-
“/24″是一个较小的地址块(包含256个IP地址)
-
“/16″表示的是一个更大的地址块(包含65536个IP地址)
当然在封禁ip的时候,先去查询ip,免得把你自己本地的ip加进去了,如果你每天自己经常访问自己的网站,那你自己的请求肯定也多。
2、封异常UA
我们在后台下载日志之后,分析里面的具体数据,如果异常UA标识很少,都是那么几个,那我们可以针对异常UA进行封禁,如果UA实在是太多了,比如他们合作刷PCDN的,那封UA就没啥意义了,因为可能有上千上万个伪装的各种UA,你没法封的,所以这种情况只封ip就行。
以上就是我网站CDN的一些常规配置以及我遇到PCDN的解决方案了。
我博客网站这几天切换到edgeone服务免费版上面去了,虽然刷PCDN流量的还在继续,不过相对又省心一点,关于edgeone的体验和我之前的疑问,等过几天有空了,我核实之后再说。