1.
概述:为何需要自动检测与恢复
自动化能减少人工响应延迟,避免SEO损失与流量统计错乱。
宝塔
云WAF在高峰或规则调整时会误拦合法爬虫(如Googlebot/Bingbot)。
误拦会导致抓取频率骤降,影响索引与排名,需快速恢复。
本文提出“检测—判定—恢复—审计”闭环,适用于VPS/云主机与CDN前置场景。
方案兼容Nginx(宝塔)、iptables与常见CDN(如Cloudflare/七牛)的联动。
2.
误拦常见原因与判定要点
原因1:WAF启发式规则将非常态UA或请求速率误判为爬虫刷取。
原因2:CDN或代理导致真实IP丢失,导致行为异常集中在单IP上。
原因3:登录限速、指纹识别规则更新导致历史IP被封。
判定要点:查看User-Agent、Referer、爬虫反向DNS与ASN确认来源。
判定阈值举例:10分钟内误报阈值=请求数>100且UA匹配"bot|spider|crawl"时需人工复核。
3.
检测脚本设计思路(日志为基础)
数据源:/www/server/panel/logs/waf.log 或 /var/log/nginx/error.log(宝塔默认)。
步骤一:按时间窗口(例如最近10分钟)统计被WAF拦截的IP与请求UA。
步骤二:对可疑IP做反向DNS与ASN查询(使用dig与whois或ipinfo API)。
步骤三:基于规则决定动作:自动放行、临时白名单或标记告警。
步骤四:写入审计日志并通过钉钉/邮件告警记录变更。
4.
恢复与自动化操作实施细节
操作1:对确认的正规爬虫IP,添加到Nginx包含的白名单文件(如 /etc/nginx/conf.d/waf_whitelist.conf)。
操作2:若为iptables层阻断,脚本执行iptables -D INPUT -s IP -j DROP以删除拒绝规则。
操作3:对宝塔Panel,可用panel命令或HTTP API将IP加入WAF白名单(示例使用HTTP POST,见下方脚本)。
操作4:操作后reload Nginx:nginx -s reload 或 bt restart nginx,保证配置生效。
操作5:生成恢复记录:时间、IP、判定理由、操作人(脚本自动写入 /var/log/waf_recover.log)。
5.
示例脚本核心片段(思路级别,务必先在测试环境验证)
从waf.log中抽取前10分钟热度IP:
cat /www/server/panel/logs/waf.log | awk '$1>strftime("%Y-%m-%d %H:%M:%S",systime()-600)' | awk '{print $NF}' | sort | uniq -c | sort -rn | head -n 50
反向DNS与ASN判断:使用dig +short -x IP 与 whois IP/在线API。
若确认Googlebot且被误拦,添加白名单:echo "allow IP;" >> /etc/nginx/conf.d/waf_whitelist.conf && nginx -s reload
示例调用宝塔Panel API(需替换HOST/TOKEN):
curl -s -X POST "http://BT_PANEL_URL:8888/waf?action=add_white" -d "ip=203.0.113.45&token=YOUR_TOKEN"
6.
阈值表:不同场景的自动化策略
以下表格为建议阈值与对应动作(可根据流量级别调整):
| 场景 | 时间窗口 | 请求阈值 | 判定条件 | 自动动作 |
| 正常爬虫 | 10分钟 | >100 | UA匹配bot并反向DNS为google.com | 加入白名单并reload |
| 疑似爬虫但非正规 | 5分钟 | >500 | UA异常/ASN不符 | 触发告警/人工复核 |
| 短时爆发流量 | 1分钟 | >2000 | IP重复请求且无UA | 临时封禁并记录 |
7.
真实案例与服务器配置示例
案例:2025-03-12 12:00,公司A发现Google索引骤降,查看日志发现IP 203.0.113.45 被WAF阻断。
日志样例:2025-03-12 11:58:34 [WAF] Blocked IP=203.0.113.45 UA=Googlebot/2.1 Request=/robots.txt
短时间统计:10分钟内该IP被拦截次数=120(命令统计结果)。
服务器配置示例:Ubuntu 20.04, Nginx 1.18, 宝塔Panel 7.8, 4vCPU/8GB 内存, 公网IP 198.51.100.10, 前置CDN=Cloudflare。
处置:脚本判定为正规Googlebot(反向DNS为crawl-203-0-113-45.googlebot.com,ASN=AS15169),自动追加白名单并reload,问题在5分钟内恢复,搜索引擎抓取回升。
8.
部署与监控建议(生产化要点)
建议一:脚本以cron形式每5分钟运行,写入审计日志并发送告警。
建议二:对自动放行动作设置“自动回滚”机制(例如24小时后自动移除临时白名单)。
建议三:在CDN层保留真实IP转发(X-Forwarded-For)并在解析脚本时优先使用真实IP。
建议四:对所有自动化变更进行签名并可回溯(变更表记录操作者/脚本ID)。
建议五:上线前在测试节点反复演练脚本误放行与误封恢复流程,确保安全。
来源:自动化管理宝塔云waf防火墙阻止了爬虫怎么办脚本化检测与恢复方案