1.
概述:为什么宝塔WAF会阻止爬虫及影响范围
a) 宝塔面板自带WAF规则用于拦截恶意请求、注入、爬虫频繁访问及DDoS样式流量;
b) WAF通常基于IP、请求频率、URL特征和User Agent做判定;
c) 合法爬虫若未被正确识别,会被误判为爬虫攻击导致403或302封禁;
d) 这会影响搜索引擎索引、SEO、第三方数据采集与站内统计;
e) 优化识别策略能在保障安全前提下恢复抓取与站点可见性。
2.
排查步骤:定位被阻止的原因与证据收集
a) 查看宝塔WAF日志:/www/wwwlogs/waf_log.log 或 面板“安全日志”;
b) 查询Nginx/Apache access.log 和 error.log,筛选目标User Agent或IP;示例:grep "MyCrawler" /www/wwwlogs/access.log;
c) 检查面板WAF规则集(拦截策略、阈值、黑白名单);
d) 如果使用CDN(如Cloudflare/阿里云CDN),需同时查看CDN的安全策略与回源IP白名单;
e) 判断是否为DDoS防护(高并发)触发自动限流,或为User Agent模式拦截。
3.
User Agent优化策略概述
a) 优先使用“白名单+签名化UA”方式让WAF识别合法爬虫;
b) 对于自建爬虫,采用规范化User Agent并在站点robots.txt声明;示例:User-Agent: MyCrawler/1.0 (+https://example.com/info);
c) 在WAF层按规则允许已知爬虫UA(Baiduspider/Googlebot等)并对自定义UA做签名校验;
d) 结合IP白名单(搜索引擎公网IP段)进一步增强识别准确性;
e) 使用速率限制而不是直接阻断,给合法爬虫设置更高阈值。
4.
具体配置示例:Nginx/宝塔WAF中基于User Agent的放行方案
a) 在Nginx主配置使用map识别UA,示例配置片段:
map $http_user_agent $allow_bot { default 0; "~*Baiduspider" 1; "~*Googlebot" 1; "~*MyCrawler/1.0" 1; }
b) 在server段配合if或自定义变量关闭WAF:
if ($allow_bot = 1) { set $waf_enable 0; }
c) 宝塔面板可在WAF规则管理中添加自定义UA白名单(面板->安全->WAF->白名单);
d) 若使用Cloudflare/CDN,需在CDN端放行/添加爬虫UA并开启真实IP回传;
e) 配置完成后重载Nginx:systemctl reload nginx,观察日志变更。
5.
真实案例:某电商站点恢复百度抓取的过程与数据
a) 背景:服务器 VPS 配置 2vCPU / 4GB RAM / 80GB SSD,Ubuntu 20.04,Nginx 1.18,宝塔面板7.x;
b) 问题:Baiduspider访问被WAF拦截,30天内索引更新停滞;
c) 排查:/www/wwwlogs/waf_log.log 中出现大量类似“UA matched block rule”的条目,403响应码;
d) 处理:在WAF白名单添加正则 ~*Baiduspider 并在Nginx map加入放行,自定义UA示例 MyCrawler/1.0;
e) 结果:放行后3天内抓取成功率从原先日志中的5%上升到95%,下面为对比数据:
6.
安全注意事项与防护平衡建议
a) 不建议简单以“允许一切UA”为策略,应结合IP白名单与速率控制;
b) 对自建爬虫采取身份验证(如token参数、IP签名)以降低伪装风险;
c) 监控WAF日志与访问频率,设置告警阈值(如每分钟请求数);
d) 对高风险接口(登录、提交)保持严格WAF规则,不因放行UA影响敏感端点;
e) 定期更新已知爬虫IP段(搜索引擎官方公布)并同步到防火墙。
7.
运维实操清单:快速恢复抓取的步骤(命令与验证)
a) 收集证据:tail -n 200 /www/wwwlogs/waf_log.log | grep "MyCrawler";
b) 添加WAF白名单:在面板WAF->白名单添加 User Agent 正则或直接编辑waf规则;
c) Nginx 配置变更并重载:vim /etc/nginx/nginx.conf(添加map规则)-> nginx -t -> systemctl reload nginx;
d) 验证:用 curl 模拟UA请求:curl -I -A "MyCrawler/1.0 (+https://example.com/info)" https://example.com/path;查看返回200或被拦截信息;
e) 观察7天内抓取日志与搜索引擎控制台索引变化,确认无异常后持续监控。