问题出现得很突然,日志倒是留得挺全。巡检脚本部署在办公网出口,跑了两天后所有请求返回 403,同网段同事打开站点也要过人机验证,业务没受影响,巡检数据全废。

原因不止一个,得分开看。WAF 按请求频率把出口 IP 加入了黑名单。少数情况下是脚本 UA 是 curl 默认值,命中爬虫拦截规则。

不容易想到的是,没有给巡检来源配置白名单。

先确认 403 是否来自 WAF

curl -sI -A 'URLMonitor/1.0' https://www.example.com/ | head -5

然后把巡检出口加入白名单

curl -s -X POST https://waf.example.com/api/whitelist -d '{"ip":"203.0.113.10"}'

给脚本设置可识别 UA

curl -s -A 'SiteMonitor/1.0 (+https://www.example.com)' https://www.example.com/

复检全量请求的返回码分布

xargs -P 5 -I{} curl -s -o /dev/null -w '%{http_code}\n' -A 'SiteMonitor/1.0' {} < urls.txt | sort | uniq -c

排查用的命令都是临时敲的,没有写成脚本,事后才整理。

手上没有现成的复现脚本,就照着线上请求手工拼了一个。

怎么算真的好了,看的是同一批现象。加白后 403 归零,巡检恢复全量覆盖,同网段同事访问也不再触发验证。

容易忽略的是,巡检流量和攻击流量在 WAF 眼里很像,给固定出口和固定 UA 加白是最省事的区分方式。如果同一现象隔几天又出现,说明根因没找到,别当偶发处理。

作者 9823189