Warden 一个基于 Go 的轻量级反向代理 WAF

今天给大伙儿推荐一个开源项目 —— 推荐一个 warden:Go 写的轻量级反向代理 WAF,单文件部署、内嵌管理后台。沃盾(warden)是一个用 Go 写的轻量级反向代理 WAF。它把自己放在业务服务前面,在 TCP / HTTP 两个 想深入了解的同学,建议收藏这篇。

项目地址:https://gitee.com/jxw1111/warden

📦 6 Parts + Conclusion

👉 滑动

PART 01

项目是什么

项目是什么

PART 02

核心功能

核心功能

PART 03

技术栈

TECH STACK · 技术选型

PART 04

架构设计

架构设计

PART 05

快速开始

QUICK START · 快速上手

PART 06

适用场景

适用场景

PART ///

写在最后

SUMMARY · 个人观点

01

PART


项目是什么

项目是什么

沃盾(warden)是一个用 Go 写的轻量级反向代理 WAF。它把自己放在业务服务前面,在 TCP / HTTP 两个层面完成连接限流、频率限制、CC 防护、IP 归属拦截与 WAF 规则检测,并内置一个无需额外部署前端的管理后台。

它主要解决小站(企业官网、学校站点、内网业务系统)常年被两类流量困扰的问题:一类是 CC / 爬虫高频刷量把后端打满;另一类是 /wp-admin、.env 这类扫描器探测。相比商业 WAF 的高成本和云 WAF 的 DNS 改造,warden 只需一个二进制文件,把 Nginx(或直接对外)的流量指向它即可。

其核心设计取向有三点:宁可多一次验证码也不要误杀真实用户;快路径优先,静态资源与可信会话直接放行;有状态但不失控,所有内存状态都有 TTL 与后台清扫协程。

Warden 一个基于 Go 的轻量级反向代理 WAF

架构图

02

PART


核心功能

核心功能

•WAF 检测(Coraza):基于 OWASP Coraza v3,兼容 ModSecurity / OWASP CRS 规则语法;内置脚本 UA 拦截、扫描器路径 / UA 拦截,支持 DetectionOnly 观察模式与 On 拦截模式。

•CC 防护(核心能力):可信 IP 快路、可信会话快路、新 IP 泛洪检测、行为检测、每 IP 限速、共享令牌桶;采用自研轻量点选数字验证码,验证通过即签发可信凭证。

•IP 归属拦截:基于离线 xdb 库识别 IP 地理与云厂商 / IDC 归属,可分别开关"国外 IP 拦截"与"云厂商 / IDC IP 拦截",无外部请求。

•频率限制与连接限制:热点路径限流、整站限流、/24 子网限流,以及在 TCP accept 阶段用令牌桶丢弃过量连接的 L4 连接限流。

•黑白名单:IP 白名单(CIDR)直通、IP 黑名单拦截,URL 白名单 / 黑名单支持正则。

•多站点反向代理:按 Host 头路由到不同上游,自动注入 X-Real-IP / X-Forwarded-For,后端可拿到真实客户端 IP。

•内嵌管理后台:Vue3 + Element Plus + ECharts 全部本地化,通过 go:embed 打进二进制,提供实时拦截指标、QPS / 拦截率趋势图与攻击日志查询。

•告警通知:SMTP 邮件 + 通用 Webhook + 钉钉 / 企业微信 / 飞书机器人,支持冷却时间避免告警风暴。

Warden 一个基于 Go 的轻量级反向代理 WAF(2)

沃盾管理后台 - 仪表盘

Warden 一个基于 Go 的轻量级反向代理 WAF(3)

沃盾管理后台 - WAF 规则

03

PART


技术栈

TECH STACK · 技术选型

•语言:Go 1.23+,编译产物为单个可执行文件;

•WAF 引擎:OWASP Coraza v3(兼容 ModSecurity / OWASP CRS);

•数据库:modernc.org/sqlite(纯 Go 实现,无需 cgo);

•管理前端:Vue3 + Element Plus + ECharts,经 go:embed 内嵌;

•验证码:自研轻量点选数字图形验证码;

•IP 归属:离线 xdb 库(IP 地理 + 云厂商 / IDC 归属)。

04

PART


架构设计

架构设计

warden 在请求进入业务后端之前,先经过一条由外到内的 HTTP 中间件链:先做 IP 黑名单、URL 白黑名单、IP 白名单的粗筛,再进入 CC 防护做泛洪 / 行为 / 限速挑战,接着是频率限制(热点 / 整站 / 子网 → 429),然后交由 Coraza WAF 做 OWASP CRS 规则检测,最后由多站点 Router 按 Host 反代到上游。

在 TCP 层,它在 accept 阶段就用令牌桶丢弃过量连接,根本不进入 HTTP 处理,从源头扛住连接泛洪。所有运行配置、攻击日志、可信 IP、防火墙封禁记录统一写入 SQLite(busy_timeout + WAL + 自动重试),重启后可恢复,既不会丢数据,内存状态也不会无界增长。

05

PART


快速开始

QUICK START · 快速上手

...bash

# 编译(自动使用国内模块镜像 goproxy.cn)

export GOPROXY=https://goproxy.cn,https://goproxy.io,direct

go mod tidy

go build -o warden ./cmd/warden

# 启动(默认监听 :81,按 config.json 转发到后端)

./warden -config config.json

启动后用 curl http://127.0.0.1:81/healthz 做健康检查,管理后台默认在 http://127.0.0.1:9090(建议只监听本机)。

06

PART


适用场景

适用场景

•常年被 CC 刷量、扫描器探测困扰的企业官网、学校站点、内网业务系统;

•想用低成本自托管方案替代商业 / 云 WAF,又不愿改动现有 DNS 的中小团队;

•需要可视化拦截指标、攻击日志与在线配置,但不想额外部署前端的运维场景。

warden 把 L4~L7 防护、CC 挑战与可观测性一次性解决,部署时只需把流量指向它,是抵御脚本化 CC 与恶意探测的轻量首选。


版权声明

本文仅代表作者观点,不代表本站立场。
本文系作者授权发表,未经许可,不得转载。

评论