Ingress Annotations本身不提供WAF功能,而是启用和配置ingress-nginx+ModSecurity或NGINX App Protect等WAF模块的关键控制接口,真正防护能力来自底层控制器扩展模块。

在 Kubernetes 中,Ingress Annotations 本身不直接提供 WAF(Web 应用防火墙)功能,但它是启用和精细控制 ingress-nginx + ModSecurity 或 NGINX App Protect 等 WAF 集成的关键入口。真正的 WAF 能力来自底层控制器的扩展模块,而 Annotations 是触发、配置和开关这些能力的“遥控器”。
启用 ModSecurity WAF(开源方案)
ingress-nginx 官方支持通过编译启用 ModSecurity v3(OWASP Core Rule Set),之后使用 Annotations 激活并调优:
-
全局开启:需先在 ingress-nginx ConfigMap 中启用
enable-modsecurity: "true"和enable-owasp-modsecurity-crs: "true" -
按 Ingress 启用:在对应 Ingress 资源中添加注解:
nginx.ingress.kubernetes.io/enable-modsecurity: "true" -
自定义规则模式:默认为拦截(on),可临时设为日志观察模式:
nginx.ingress.kubernetes.io/modsecurity-snippet: |<br> SecRuleEngine DetectionOnly
-
排除特定路径:避免误拦健康检查或静态资源:
nginx.ingress.kubernetes.io/modsecurity-snippet: |<br> SecRule REQUEST_URI "@streq /healthz" "id:101,phase:1,nolog,allow,ctl:ruleEngine=Off"
配置 NGINX App Protect(商业版 WAF)
该方案基于 F5 技术,需独立部署 NAP 控制器,并通过专用 Annotation 绑定策略:
-
关联安全策略:指定已创建的
NginxAppProtectPolicy对象名:appprotect.f5.com/ap-policy: "default-waf-policy" -
启用 Bot 防御(如已授权):
appprotect.f5.com/bot-policy: "bot-defense-policy" -
开启日志导出:配合 Fluentd 或 Loki 收集攻击事件:
appprotect.f5.com/log-conf: "waf-log-configuration" - 注意:所有策略对象(Policy、LogConf、BotPolicy)需在同命名空间或集群范围内定义,且控制器必须已加载对应 CRD。
结合限流与 WAF 形成纵深防御
WAF 主要防应用层攻击(SQLi/XSS),而限流防暴力扫描与 DDoS,二者通过 Annotations 协同更有效:
- 对高风险路径(如
/api/login)叠加防护:nginx.ingress.kubernetes.io/limit-rps: "5"nginx.ingress.kubernetes.io/enable-modsecurity: "true" - 设置请求体限制,防止大 payload 绕过 WAF:
nginx.ingress.kubernetes.io/proxy-body-size: "1m" - 强制 HTTPS + HSTS,避免明文传输绕过 WAF 检查:
nginx.ingress.kubernetes.io/ssl-redirect: "true"nginx.ingress.kubernetes.io/hsts: "true"
验证与调试要点
WAF 配置生效后需主动验证,避免“开着却没拦住”:
- 查看 ingress-nginx Pod 日志,搜索
"ModSecurity:或"WAF event"字样确认规则触发 - 用
curl -v http://your.app/path?foo=%3Cscript%3Ealert(1)测试 XSS 规则是否返回 403 - 检查响应头是否含
X-Mod-Security-Status: Blocked或X-App-Protect-Status: blocked - 若使用
DetectionOnly模式,务必定期分析日志,再切换至On模式


















