跳过正文

Caddy 配置 WAF防火墙

·196 字·1 分钟
作者
王浩宇
记录服务器、虚拟化、网络和日常折腾。

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 证明这是个有效的配置。

参考: