可通过查看/www/wwwlogs/waf_logs/下按日志文件(如waf_2024-06-15.log),用jq解析JSON日志定位被拦截的API请求及触发规则;白名单需手动编辑/www/server/panel/vhost/wafconf/whiteurl.conf,写PCRE正则(如^/api/v2/user/profile$),注意权限、路径匹配和大小写敏感问题。

怎么看宝塔免费WAF拦截了哪个API请求
宝塔免费版 WAF 拦截后,HTTP 403 响应体里通常不带具体原因,直接返回“访问被拒绝”,所以得查日志定位。关键路径是:/www/wwwlogs/waf_logs/,里面按天生成日志文件,比如 waf_2024-06-15.log。
每条日志是 JSON 格式,用 tail -n 50 /www/wwwlogs/waf_logs/waf_$(date +%Y-%m-%d).log | jq -r '.url + " | " + .rule'(需先 yum install -y jq)可快速看最近拦截的 URL 和触发规则。常见误报规则名如 sql_inject、xss_check、user_agent_attack —— 注意不是所有都代表真实攻击,比如带 select%20* 的查询参数可能只是前端调试用。
怎么在宝塔免费WAF里加白名单(只针对特定URL)
免费版 WAF 不支持图形界面添加白名单,必须手动编辑配置文件。核心配置在:/www/server/panel/vhost/wafconf/ 下的 whiteurl.conf(不存在就新建)。
白名单规则是正则匹配 URL 路径(不含域名和 query 参数),格式为每行一条 PCRE 正则,例如:
^/api/v2/user/profile$ ^/api/webhook/.*$
注意点:
- 开头必须有
^,结尾推荐加$,避免误匹配(比如/api/test匹配到/api/test2) - 不要写完整 URL(如
https://xxx.com/api/xxx),WAF 只处理REQUEST_URI部分 - 如果 API 带 query 参数(如
?format=json),白名单里不用管参数,WAF 白名单只校验路径 - 改完后执行
bt 18(重载 WAF)或重启 Nginx:systemctl restart nginx
为什么加了白名单还是被拦?常见坑点
最常踩的不是正则写错,而是规则没生效或匹配逻辑被绕过:
-
whiteurl.conf文件权限不对(应为 644,属主www),WAF 加载失败时无提示 - 规则写在了错误位置:必须放在
/www/server/panel/vhost/wafconf/,不是站点根目录或 Nginx 配置里 - 用了大小写敏感匹配:默认 PCRE 是区分大小写的,
/API/xxx不会匹配/api/xxx,需要加(?i)前缀,如(?i)^/api/.*$ - WAF 规则优先级高于白名单:如果某条规则标记为
block且priority=100,而白名单 priority 默认较低,可能仍被拦截(不过免费版不开放 priority 调整) - 部分请求被 CDN 或前置代理(如 Nginx 自定义规则)提前拦截,根本没走到宝塔 WAF —— 先确认请求是否真进了 WAF 日志
有没有更稳妥的临时绕过方式(慎用)
仅限调试,不建议长期使用:
- 临时关闭该站点的 WAF:在宝塔面板 → 网站 → 设置 → WAF → 关闭开关(但会整体失效,不推荐)
- 用 Nginx
if判断 User-Agent 或请求头绕过:在站点配置的「配置文件」里加一段(放在location /内):if ($request_uri ~ ^/api/v2/.*) { set $waf_status "off"; },再配合 WAF 的if ($waf_status = "off") { ... }逻辑(需确认你用的 WAF 版本支持该变量) - 把误报参数改成 Base64 编码传参(如
data=eyJ1c2VyIjoiYWQi...),避开关键字检测,后端再解码 —— 这招对简单 SQL/XSS 规则有效,但增加维护成本
白名单正则看似简单,但路径边界、大小写、文件加载时机这三个点,90% 的失败都卡在这儿。别急着改多条,先用一条最精确的路径验证是否生效,再逐步扩展。
大量免费API接口:立即使用
涵盖生活服务API、金融科技API、企业工商API、等相关的API接口服务。免费API接口可安全、合规地连接上下游,为数据API应用能力赋能!










