waf误拦主因是ip白名单与url忽略规则混用——前者在站点防火墙配置、跳过全部检测,后者需按规则id逐个忽略路径;同时须确认luawaf配置开启且nginx重载生效。

不是WAF太敏感,而是IP白名单和URL忽略规则被混用了——两者生效位置、作用范围、配置路径全都不一样,错配一次就可能让整个站点裸奔或持续403。
确认拦截来源是WAF而不是系统防火墙
很多用户在「安全 → 防火墙」里加了自己IP,结果访问还是403,其实那只是系统级端口防火墙,和WAF完全无关。WAF的拦截逻辑走的是Nginx请求解析层,日志在/www/wwwlogs/waf/里;而系统防火墙走的是iptables或firewalld,只管端口通不通。
- 查WAF是否真在工作:看
nginx.conf里有没有include luawaf.conf;,且没被注释 - 查拦截记录:进「防护事件」页面,能看到具体命中哪条规则(比如
web_rule_1024)、来自哪个IP、请求URL和参数 - 查系统防火墙是否干扰:运行
firewall-cmd --list-all或iptables -L INPUT -n,确认80/443/8888端口确实放行
IP误拦:必须在站点防火墙里加白名单
IP白名单不是加在「安全 → 防火墙」,而是进「网站 → 对应站点 → 防火墙 → 白名单」。这里加的IP会跳过所有WAF检测模块(CC、XSS、SQL注入等),但仅对该站点生效。
- 防护对象选「IP地址」,填单个IP如
203.0.113.50,或网段如192.168.10.0/24 - 务必勾选「全部不检测」,否则只跳过部分模块,仍可能被其他规则拦
- 如果IP是动态的(比如家用宽带),别硬加白名单,改用URL忽略+登录验证码更稳妥
URL误拦:按规则ID逐个忽略路径
某个接口如/api/v1/upload总被拦,不能直接“放行这个URL”,因为WAF是按规则ID匹配的。同一个URL可能触发多条规则(比如web_rule_1024拦SQL特征,web_rule_1056拦文件上传后缀),漏一个就继续403。
- 先去「防护事件」点开拦截记录,记下「规则ID」
- 进「防护规则 → 规则管理」,找到该ID,点「忽略」
- 填入完整路径
/api/v1/upload,选「永久忽略」;注意不能写成api/v1/upload或*/upload - 如果还有拦截,重复上述流程,把新出现的规则ID也逐个忽略
luawaf配置不当导致全局失效
WAF本身依赖/www/server/nginx/waf/config.lua里的开关。常见翻车点是UrlDeny="off"或postMatch="off",结果规则加载了但根本不执行匹配。
- 确保这几项为
"on":UrlDeny、postMatch、CookieMatch、attacklog -
black_fileExt默认只含{"php","jsp","asp"},但攻击常绕过为.php5或.phtml,得手动补全 - 改完配置后必须重启Nginx:
bt restart nginx或面板里点「重载配置」,nginx -t只校验语法,不生效
最易被忽略的一点:WAF规则忽略只对指定规则ID生效,不是屏蔽整个URL。同一请求触发多个规则时,少忽略任何一个ID,拦截就照常发生——这和你想象中的“加个白名单就一劳永逸”完全不同。











