Caddy是一个功能强大的 Web 中间件,但是Caddy 并不自带安全防护功能,但是可以通过第三方模块来增强网站的安全性,例如 Coraza WAF ,这篇文章将使用 Coraza WAF 插件以及 OWASP CRS 规则集来增强网站的安全性。
安装 Coraza WAF 插件#
这里需要确保 Caddy 安装了 Coraza WAF 插件,以便能够使用 CRS 规则集。
Caddy 支持通过官方插件库安装插件,也可以通过 xcaddy 构建工具来安装插件,xcaddy 是一个用来编译和构建 Caddy 自定义版本的工具,支持在 Caddy 中安装额外插件,如果有定制化需求可以选择使用 xcaddy 。
caddy add-package github.com/corazawaf/coraza-caddy # 通过官方插件库
xcaddy build --with github.com/corazawaf/coraza-caddy # 通过 xcaddy 安装 Coraza WAF 插件并生成一个自定义的 Caddy 二进制文件注意……
如果采用
xcaddy 需要提前安装好 Go 环境。下载 OWASP CRS 规则集#
这里我选择放到
/etc/coreruleset目录下
git clone https://github.com/coreruleset/coreruleset.git /etc/coreruleset克隆完成之后将里面的crs-setup.conf.example 重命名为 coraza.conf-recommended
配置 Caddyfile#
下面是一个参考例子
wanghaoyu.com.cn {
tls admin@wanghaoyu.com.cn
route {
coraza_waf {
directives `
# 加载 Coraza 推荐的默认配置
Include /etc/coreruleset/coraza.conf-recommended
# 加载 OWASP CRS 规则
Include /etc/coreruleset/rules/*.conf
# 启用规则引擎
SecRuleEngine On
`
}
reverse_proxy localhost:8080
}
}基本配置说明:
coraza_waf:将 WAF 集成到 Caddy 的请求处理流程Include:用于加载 CRS 默认配置和防护规则SecRuleEngine On:启用规则引擎,确保请求会经过防火墙的检查和过滤。reverse_proxy:反代后端节点,将wanghaoyu.com.cn的流量请求转发到 localhost:8080 当然 这只是个例子
安全头#
为了增强一下安全性,可以配置一下 HTTP 响应头,防止常见攻击,这个部分是可选的。
header {
# 启用 HSTS,确保所有的请求都通过https进行
Strict-Transport-Security "max-age=31536000; includeSubDomains; preload"
# 设置 CSP 防止外部脚本注入
Content-Security-Policy "default-src 'self'; script-src 'self'; object-src 'none';"
# 防止点击劫持
X-Frame-Options "DENY"
# 防止xss跨站脚本攻击
X-XSS-Protection "1; mode=block"
# 防止 MIME 类型嗅探
X-Content-Type-Options "nosniff"
# 让浏览器更安全地处理 cookies
Set-Cookie "SameSite=Strict; Secure"
}验证配置#
Caddy 提供了一个工具用来检查配置文件是否正确的,类似于 nginx -t
caddy validate --config /etc/caddy/Caddyfile如果配置没问题的话会返回 Valid configuration 证明这是个有效的配置。
参考: