Caddy是一个功能强大的 Web 中间件,但是Caddy 并不自带安全防护功能,但是可以通过第三方模块来增强网站的安全性,例如 Coraza WAF ,这篇文章将使用 Coraza WAF 插件以及 OWASP CRS 规则集来增强网站的安全性。

安装 Coraza WAF 插件

这里需要确保 Caddy 安装了 Coraza WAF 插件,以便能够使用 CRS 规则集。

Caddy 支持通过官方插件库安装插件,也可以通过 xcaddy 构建工具来安装插件,xcaddy 是一个用来编译和构建 Caddy 自定义版本的工具,支持在 Caddy 中安装额外插件,如果有定制化需求可以选择使用 xcaddy

1
2
caddy add-package github.com/corazawaf/coraza-caddy # 通过官方插件库
xcaddy build --with github.com/corazawaf/coraza-caddy # 通过 xcaddy 安装 Coraza WAF 插件并生成一个自定义的 Caddy 二进制文件

[card title=”注意……” color=”warning”] 如果采用 xcaddy 需要提前安装好 Go 环境。[/card]

下载 OWASP CRS 规则集

这里我选择放到 /etc/coreruleset 目录下

1
git clone https://github.com/coreruleset/coreruleset.git /etc/coreruleset

克隆完成之后将里面的crs-setup.conf.example 重命名为 coraza.conf-recommended

配置 Caddyfile

下面是一个参考例子

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
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 响应头,防止常见攻击,这个部分是可选的。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
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

1
caddy validate --config /etc/caddy/Caddyfile

如果配置没问题的话会返回 Valid configuration 证明这是个有效的配置。

参考: