一、问题背景:你的服务器为什么突然就满了?
很多站长都遇到过这样的情况:网站流量没有明显增加,服务器CPU却飙到100%,带宽被占满,页面打开卡顿甚至频繁报502错误。这种情况大概率不是你网站火了,而是被恶意爬虫或CC攻击盯上了。
恶意爬虫的攻击有几个典型特征:
- CPU长期100%:服务器负载极高,正常业务请求被大量恶意请求挤占
- 带宽被占满:攻击流量虽然单次不大,但并发极高,直接打满出口带宽
- 502错误频发:后端服务因资源耗尽无法响应
- IP海量且分散:攻击IP来自全国各地,每个IP只请求几次就换,传统的IP黑名单完全失效
- 请求目标分散:攻击者不仅刷页面,还大量请求CSS、JS等静态资源,消耗服务器IO和带宽
有些高级爬虫更加狡猾:每秒访问的URL都不同,IP不同,浏览器UA也不同,每个IP只访问一两次,几乎跟真人访问一模一样。传统的防火墙和智能CC防护模式对这种爬虫很难有效拦截。
百度云防护集成了WAF(Web应用防火墙)、DDoS防护、CC防护能力,并包含CDN加速,可以有效应对这类问题。下面从实战角度,详细介绍几种核心拦截方法。
二、方案一:基于User-Agent拦截(最简单,适合快速应急)
如果你从日志中发现攻击者使用了统一的User-Agent(比如伪造的搜索引擎爬虫),这是最直接的拦截方式。
典型案例:假YisouSpider攻击
有客户反馈服务器被大量UA为“YisouSpider”的请求刷爆。但真正的YisouSpider(神马搜索爬虫)根本不会这么高频地抓取——这是攻击者伪造UA搞CC攻击。
操作步骤
- 登录百度云防护控制台
- 进入「Web防护」→「自定义规则」→「添加规则」
- 配置规则:
- 规则名称:例如“拦截假YisouSpider”
- 匹配条件:选择 User-Agent,逻辑符选择 包含,匹配值输入
YisouSpider - 处置动作:选择 拦截
- 保存规则并应用到需要防护的站点
配置后,所有UA包含YisouSpider的请求都会被直接拦截,连服务器都到不了。攻击者再怎么换IP,UA不变就永远进不来。
常用恶意UA黑名单
可以批量封禁已知的恶意爬虫UA,常见的包括:gptbot、amazonbot、PanguBot、BLEXBot、DataForSeoBot、SemrushBot、curl、python、MJ12bot、Go-http-client、Java、Scrapy等。
三、方案二:JA3/JA4指纹拦截(推荐,精准识别恶意工具)
UA拦截的局限性在于攻击者可以随时更换UA。更高级的方案是基于JA3/JA4指纹进行拦截——这是目前应对高级爬虫最有效的方法之一。
JA3指纹是什么?
JA3指纹是基于TLS握手特征生成的,代表了客户端使用的TLS库的特征。同一款攻击工具无论怎么换IP、换UA,其JA3指纹几乎是不变的。因此通过JA3指纹,可以精准识别出攻击者使用的工具框架。
⚠️ 注意:使用JA3/JA4指纹拦截的前提是网站必须部署SSL证书,采用HTTPS访问。
方法1:直接拦截已知恶意JA3指纹
如果你已经通过日志确定了攻击者的JA3指纹,可以直接添加拦截规则:
- 进入「Web防护」→「自定义规则」→「添加规则」
- 配置:
- 规则名称:恶意爬虫拦截
- 匹配条件:选择 JA3,逻辑符选择 等于我值之一,输入具体的JA3指纹值(如
8bee49baa010986785a9e74d688ed7e9) - 处置动作:选择 拦截
- 保存即可
一个典型的实战案例:有客户反馈带宽CPU偶尔爆满,通过日志发现一个JA3指纹出现了大量请求,尽管IP、UA都在变,但JA3指纹一直不变。使用上述方法配置后成功拦截,服务器恢复正常。
方法2:如何获取攻击者的JA3指纹
如果你还不清楚攻击者的JA3指纹,可以通过以下方式获取:
直接在百度云提交工单,让百度提供近一天的访问前十的JA3指纹,然后把这些指纹加入拦截规则即可。
方法3:基于JA3指纹的频率限制(更柔和)
如果你不确定某个JA3指纹是否完全恶意,可以采用频率限制而非直接拦截:
- 进入「防护配置」→「Web防护」→「CC防护」→「精准自定义CC」
- 设置规则:JA3指纹不等于某个值,10秒内只能访问10次,超过后拦截1小时
这样既能限制爬虫频率,又不会误伤正常用户。
四、方案三:BOT防护(企业版功能,综合防御)
百度云防护企业版内置了完整的BOT防护功能,能够智能识别和防御机器流量。企业版支持:DDoS防护、CC攻击防护、WAF自定义规则20条、Bot防护(爬虫防护)、威胁情报等。
前提条件
- 已购买百度云防护企业版
- 已在接入配置页面完成Web业务接入
BOT规则配置步骤
第一步:创建Bot规则模板
- 在WAF控制台左侧导航栏,选择「配置中心」→「Bot规则」→「创建Bot规则模板」
- 填写模板名称
第二步:配置防护策略
针对域名开启防护后,建议配置以下策略:
- AI智能防护:开启并设置为“拦截”模式。百度云防护会基于百度搜索等全系场景多年的防爬规则经验,对访问流量进行分析和自动学习,生成针对性的防护规则
- IP动态情报:创建自定义策略,条件为“IP动态情报-属于-高危IP”,处置动作为“拦截”
- 地域情报:条件为“地域情报-属于-IDC IP”,处置动作为“拦截”(因为真实用户极少来自IDC机房IP)
- Bot特征识别:勾选“简单脚本过滤(Javascript挑战)”,对无法执行JS的脚本工具进行过滤
对于静态页或伪静态页,还可以进一步开启“高级bot防御”,并集成验证JS代码以增强防护。
五、方案四:CC防护配置(通用防护层)
CC防护可以作为基础防护层,自动识别和拦截高频请求。
智能CC防护配置
- 登录百度云防护控制台 → 左侧导航栏选择「防护配置」→「Web防护」→「CC防护」
- 点击「添加规则」,防护类型选择「智能CC」
- 选择防护模式:
- 宽松模式:误报敏感时选用,减少拦截
- 严格模式:攻击检测命中率高,推荐日常使用
- 超级严格模式:攻击期间紧急启用,拦截更狠
- 处置动作建议选择「拦截」或「JS挑战」
自定义限速
在Bot规则中还可以设置自定义限速:支持按IP和会话进行自定义限速,有针对性地对访问频率过高的爬虫请求进行过滤。
六、重要注意事项
1. 务必设置搜索引擎白名单
以上拦截方法虽然能有效拦截恶意爬虫,但也会影响正常搜索引擎爬虫的抓取。务必先设置搜索引擎白名单,避免SEO受影响。
白名单设置方法:
- 左侧导航栏选择「Web防护配置」→「白名单规则」→「添加规则」
- 规则名称:例如“百度蜘蛛白名单”
- 匹配条件:选择UA包含
Baiduspider、Googlebot、Bingbot、YisouSpider(如果确认是真实的神马蜘蛛)等 - 处置动作:选择「放行」
2. 开启静态文件缓存
在防护的同时,建议开启静态文件缓存,减少图片、CSS、JS等静态资源回源,进一步降低服务器带宽压力。
可缓存的常见静态文件类型:bmp, jpeg, pdf, ttf, css, js, png, svg, webp, gif, ico, doc, xls 等。
3. JS挑战不适合API/APP业务
如果全站开启JS挑战,一定要对搜索引擎UA做白名单处理。同时JS挑战不适合APP业务,如果网站中包含API或接口,一定要对相关路径做白名单处理。
七、效果验证与监控
配置完成后,建议持续观察以下指标:
- 百度云防护控制台:查看攻击详情和拦截日志,确认规则是否生效
- 服务器监控:观察CPU使用率和带宽是否恢复正常
- 网站访问:确认正常用户访问不受影响,搜索引擎抓取正常
一个成功的实战案例:通过JA3指纹拦截后,主机帮的服务器恢复了正常,验证了引起服务器CPU、带宽占满的正是该JA3指纹的机器在刷站。
八、总结
| 方案 | 适用场景 | 推荐指数 |
|---|---|---|
| UA拦截 | 攻击者UA固定且明显异常,快速应急 | ⭐⭐⭐ |
| JA3/JA4指纹拦截 | 攻击者使用固定工具框架,换IP换UA | ⭐⭐⭐⭐⭐ |
| BOT综合防护 | 企业版用户,希望自动化智能防护 | ⭐⭐⭐⭐⭐ |
| CC防护 | 所有站点的基础防护层 | ⭐⭐⭐⭐ |
建议组合使用以上方案:先开启CC防护作为基础层,再配置JA3指纹拦截精准打击恶意工具,企业版用户进一步开启BOT综合防护。同时务必配置搜索引擎白名单,避免误伤正常爬虫。通过百度云防护的多层拦截,可以有效解决恶意爬虫导致的服务器CPU和带宽占满问题。


