简介:本文详细介绍如何在 Caddy 服务器中集成 WAF 防火墙,涵盖配置原理、模块选择、规则编写及性能优化,帮助开发者构建安全的 Web 服务环境。
Caddy 作为新一代 Web 服务器,以其自动 HTTPS、简洁配置和模块化设计著称。然而,原生 Caddy 缺乏深度防御机制,面对 SQL 注入、XSS 攻击等常见威胁时显得力不从心。WAF(Web 应用防火墙)通过规则引擎拦截恶意请求,与 Caddy 结合可形成”流量过滤层+应用服务层”的双保险架构。这种组合既能利用 Caddy 的轻量级优势,又能通过 WAF 实现 OWASP Top 10 威胁的主动防御。
作为业界标杆,ModSecurity 提供超过 2500 条预定义规则(OWASP CRS),支持正则表达式和 Lua 脚本扩展。在 Caddy 中可通过 caddy-modsecurity 插件实现:
{order modsecurity before file_server}modsecurity {ruleset /etc/modsecurity/owasp-crs.confaudit_log /var/log/modsec_audit.logsec_rule_engine on}
优势:规则库完善,社区支持强
局限:配置复杂,性能开销较大(约 15-20% CPU 占用)
Coraza 作为 ModSecurity 的 Go 语言重构版,专为云原生环境设计。其 Caddy 插件安装只需:
xcaddy build --with github.com/corazawaf/coraza-caddy
配置示例:
coraza {rule_file /etc/coraza/rules.confparanoia_level 2anomalies_threshold 5}
优势:内存占用低(比 ModSecurity 少 40%),支持 WASM 扩展
局限:规则库成熟度待提升
对于已使用云服务的用户,可通过 Caddy 的反向代理功能对接云 WAF:
reverse_proxy {to https://waf-provider.example.comtransport http {tls_insecure_skip_verify}}
适用场景:需要 DDoS 防护、Bot 管理等高级功能的企业级用户
以 Coraza 为例,创建自定义规则防御 XSS:
coraza {rule_file /etc/coraza/xss_rules.conf}
文件内容:
SecRule ARGS|ARGS_NAMES|REQUEST_COOKIES|REQUEST_COOKIES_NAMES|REQUEST_HEADERS|REQUEST_HEADERS_NAMES|XML:/*|JSON:/* "\<(script|iframe|object|embed|frame|frameset|layer|bgsound|title|base|applet)[\s\>]" \"id:'941100',\phase:2,\block,\t:none,\msg:'XSS Filter - Category 1: Script Tag Vector',\logdata:'Matched Data: %{TX.0} found within %{MATCHED_VAR_NAME}: %{MATCHED_VAR}',\tag:'application-multi',\tag:'language-multi',\tag:'platform-multi',\tag:'attack-xss',\tag:'OWASP_CRS',\tag:'capec/1000/152/272',\severity:'CRITICAL',\setvar:'tx.xss_score=+%{tx.critical_anomaly_score}',\setvar:'tx.anomaly_score=+%{tx.critical_anomaly_score}'"
coraza {skip_ip 192.168.1.0/24}
结合 Prometheus 和 Grafana 监控 WAF 指标:
coraza {metrics}
关键监控项:
caddy test 验证配置语法coraza { mode detection_only })针对 REST API 的特殊防护:
coraza {rule_file /etc/coraza/api_rules.confapi {max_body_size 10mbjson_validation /schemas/api.json}}
结合 CDN WAF + Caddy WAF + 应用层防护:
客户端 → CDN WAF → Caddy WAF → 应用防火墙 → 后端服务
每层关注不同威胁面:
Docker 部署示例:
FROM caddy:2.6-builder AS builderRUN xcaddy build --with github.com/corazawaf/coraza-caddyFROM caddy:2.6COPY --from=builder /usr/bin/caddy /usr/bin/caddyCOPY Caddyfile /etc/caddy/Caddyfile
wrk 进行压力测试
wrk -t12 -c400 -d30s http://example.com
workers 参数,启用 HTTP/2 推送chained_rule 逻辑)解析 ModSecurity 审计日志:
cat /var/log/modsec_audit.log | awk -F'"' '/^--[a-z0-9_-]+--/ {print $4}' | sort | uniq -c
重点关注高频拦截的规则 ID。
通过系统化的 WAF 配置,Caddy 服务器可实现从基础防护到智能防御的全面升级。建议开发者建立”配置-监控-优化”的闭环管理体系,根据实际威胁态势持续调整防护策略。对于高安全需求场景,可考虑采用商业 WAF 解决方案与开源方案混合部署的模式。