最近CDN流量被刷的有点高,在WAF/Nginx侧做一些配置或者防护措施,如单IP超过多少封禁/将爬虫加入黑名单/将python等非浏览器加入黑名单,仍然还是存在大量非真实用户的流量,遂尝试在CDN中直接做一些防护性的配置。
先看效果(至少降低一半):

前端js优化
在配置之前,先提一下非常有效的方法,我们项目前端是VUE的单页面应用,每次访问加载全部资源,针对js,我们做了以下优化:
- 压缩拆分js文件,或者使用精简版
- 部分云服务的三方js,使用云厂商的链接
- 部分js改为按需加载,如Echarts
CDN开通运营报表和实时日志
运营报表大致能看出哪些js文件以及哪些ip的访问流量高

实时日志,类似于记录下所有的访问记录,可以通过阿里云的日志分析快速查询/统计CDN访问情况,同时可以配置告警,还有针对CDN的预制报表:

支持SQL/函数,如下是按网段分组汇总查询近15分钟的记录,封禁单ip已经失效,现在的爬虫基本都是用了ip池,ip_prefix可以带24/12参数查询对应网段。另外return_code大于400基本上都是访问异常的,可以排除掉
select ip_prefix(remote_ip,24) ipp,max(user_agent) user_agent,count(*) ct where return_code<400 group by ipp order by ct desc

可以肯定查询,观察判断异常来封禁相关ip和user_agent。
ip黑名单
在CDN的域名管理下,可以添加对于的IP,可以是单ip,也可以是网段,封禁后,CDN的return_code就会变成403。

UA黑名单
UA黑名单也就是针对USER_AGENT来限制访问,如臭名昭著的YisouSpider等爬虫,以及python/go等非浏览器爬虫,Sogou的爬虫名称比较特殊,干脆直接将Sogou封禁了(会导致搜狗浏览器无法访问)。

另外是本次文章最想分享的点就是将老的浏览器版本封禁掉,通过几天的观察,很多爬虫伪装的浏览器版本非常老,其使用IP池,访问的页面也是非正常用户浏览行为,索性直接将Firefox/3.0、Windows NT 5.1等直接加入黑名单,通过一天的观察及调研,未影响到正常用户。
完整UA黑名单如下:
*YisouSpider*|*Googlebot*|*bingbot*|*Baiduspider*|*python-requests*|*Go-http-client*|*okhttp*|*Apache-HttpClient*|*Sogou*|*Firefox/3.0*|*Windows NT 5.1*
TODO
目前针对15分钟,单ip段访问次数超过1500会触发告警,后续打算通过对接告警,然后api调用自动封禁ip/ua。





