自托管的高性能 Web 应用防火墙(WAF)/ 反向代理,保护你的 Web 应用免受攻击与漏洞利用。
My-OpenWaf 是一款自托管的 WAF(Web Application Firewall),通过反向代理架构在 Web 应用前端建立安全屏障,过滤、监控并拦截恶意 HTTP/S 流量,同时保障合法请求正常通行。
WAF 部署在 Web 应用前方,充当反向代理角色 —— 所有客户端请求必须先经过 WAF 才能到达后端服务器。它通过一组策略规则判断流量是否恶意,过滤并阻断攻击请求,同时防止应用敏感数据外泄。
核心防护能力涵盖:
- OWASP Top 10 攻击防御 — SQL 注入、XSS、命令注入、路径遍历、XXE、SSRF 等
- ACL 访问控制 — 基于 IP / 地理位置 / 自定义规则的精细化访问控制
- 速率限制(CC 防护) — 防御暴力破解、DoS 攻击与流量滥用
- 机器人检测与人机验证 — 验证码挑战 + WASM 动态 5s 盾
- IP 信誉系统 — 基于行为分析的 IP 信誉评分与自动封禁
- 多上游负载均衡 — 支持多后端节点负载均衡与健康检查
- 响应缓存 — 可配置的资源缓存策略,提升访问速度
┌─────────────────────────┐
│ My-OpenWaf WAF │
Internet ─────────────►│ │──────► Upstream Servers
(HTTP/S Traffic) │ ┌────────────────────┐ │ (Web Apps)
│ │ 白名单 / 黑名单 │ │
│ │ OWASP 规则引擎 │ │
│ │ ACL 访问控制 │ │
│ │ 速率限制 (CC) │ │
│ │ Bot 检测 & 人机验证│ │
│ │ IP 信誉系统 │ │
│ └────────────────────┘ │
│ │
│ ┌────────────────────┐ │
│ │ 管理 API (9443) │ │
│ │ 前端管理面板 │ │
│ └────────────────────┘ │
└─────────────────────────┘
所有入站流量首先经过 WAF 引擎的多阶段规则管道处理:
- 白名单检查 — 最高优先级,匹配即放行,跳过后续所有规则
- 黑名单检查 — 次优先级,匹配即执行对应处置动作
- 规则策略匹配 — OWASP 检测、ACL、速率限制、Bot 检测等基础规则按序执行
- 处置执行 — 根据匹配结果执行对应动作(放行 / 限速 / 拦截 / 阻断 / 人机验证)
防御 OWASP Top 10 全品类 Web 攻击,包括 SQL 注入、XSS、代码注入、OS 命令注入、CRLF 注入、LDAP 注入、XPath 注入、XXE、SSRF、路径遍历、后门利用等。
- 内置规则引擎,支持自定义规则编写与编译
- 按规则粒度配置处置动作(限速 / 拦截 / 阻断)
- CVE 漏洞规则库,持续更新
抵御 DoS 攻击、暴力破解、流量激增等滥用行为:
- 基于 IP / 路径 / 自定义维度的请求速率限制
- 超限请求返回 HTTP 429 状态码
- 支持突发流量窗口与滑动窗口算法
多种验证机制保护网站免受 Bot 攻击,合法用户正常通行,爬虫与自动化程序被拦截:
- 验证码挑战 — 交互式验证,区分人类与自动化程序
- 5s 盾(WASM 动态验证) — 使用 Go/C++ 编译的动态 WASM 模块:
- 内嵌 VMP 与自定义高效 VM,在浏览器环境中执行验证
- 检测无头浏览器 / 自动化框架(Puppeteer、Selenium 等)
- 检测 DevTools 调试窗口打开状态
- 所有验证逻辑在 VMP 内的 VM 执行,防止逆向破解
- 混合策略 — 支持验证码 + 验证码混合、验证码后限速等组合策略
- 自定义匹配策略 — 按路径 / 请求特征触发不同验证方式
- 白名单 — 最高优先级,匹配即放行
- 黑名单 — 次优先级,匹配即执行处置动作
- IP 列表管理 — 支持批量导入 / 导出 IP 黑白名单
- 地理位置阻断 — 基于 MaxMind GeoIP 数据库的国家 / 地区级别访问控制
- 规则策略 — 灵活的规则引擎,支持多维度条件组合
- 多站点管理,支持多域名绑定
- 多上游节点负载均衡
- TLS 终止与证书管理(支持自动 HTTPS)
- WebSocket 连接透传
- SSE(Server-Sent Events)事件推送
- 转发配置文件管理
- 安全事件 — 实时记录所有安全事件,支持筛选与归档
- 访问日志 — 请求日志写入 Redis 缓存,支持高频读写
- 健康检查 — 上游节点健康检查与自动故障转移
- 性能指标 — 请求延迟、吞吐量、拦截率等实时指标收集
- 管理仪表板 — 可视化数据面板,一目了然掌握安全态势
| 模块 | 功能 |
|---|---|
| 仪表板 | 安全态势总览、流量统计、攻击趋势 |
| 站点管理 | 多站点配置、域名绑定、上游设置 |
| 规则管理 | 自定义规则编辑、编译、启停 |
| CC 防护 | 速率限制策略配置 |
| Bot 防护 | 人机验证、5s 盾策略配置 |
| IP 列表 | 黑白名单批量管理 |
| 证书管理 | TLS 证书上传与管理 |
| 安全事件 | 事件查询、日志归档 |
| 访问日志 | 请求日志查询与分析 |
| API 密钥 | 管理 API 密钥生成与权限控制 |
| 错误页面 | 自定义拦截 / 阻断响应页面 |
| 系统设置 | 全局参数配置 |
| 策略 | 状态码 | 说明 |
|---|---|---|
| 放行 | 200 |
请求合法,正常转发至上游 |
| 限速 | 429 |
阻止高频访问资源或异常高频请求 |
| 拦截 | 403 / 418 |
响应拦截或触发验证码动作 |
| 阻断 | — | 直接返回 RST 并静默丢弃后续连接 |
| 人机验证 | 422 |
执行人机验证策略(验证码 / 5s 盾) |
匹配优先级: 白名单 > 黑名单 > 规则策略
使用 blazehttp 基准测试工具进行评估,测试结果如下:
- 测试工具: blazehttp
- 目标地址:
http://127.0.0.1 - 测试样本: 33,877 条(恶意样本 658 条 + 正常样本 33,219 条)
| 指标 | 数值 |
|---|---|
| 总样本数 | 33,877 |
| 检出率(Detection Rate) | 100.00%(658 / 658 恶意样本正确拦截) |
| 误报率(False Positive Rate) | 0.00%(0 / 33,219 正常样本误报) |
| 准确率(Accuracy) | 100.00% |
| 平均响应耗时 | 31.96 ms |
| 指标 | ModSecurity (Level 1) | CloudFlare (Free) | SafeLine (Balance) | SafeLine (Strict) | My-OpenWaf |
|---|---|---|---|---|---|
| 总样本数 | 33,669 | 33,669 | 33,669 | 33,669 | 33,877 |
| 检出率 | 69.74% | 10.70% | 71.65% | 76.17% | 100.00% |
| 误报率 | 17.58% | 0.07% | 0.07% | 0.22% | 0.00% |
| 准确率 | 82.20% | 98.40% | 99.45% | 99.38% | 100.00% |
注:对比数据来源 SafeLine Effect Evaluation,各产品测试样本集略有差异。
docker run -d \
--name my-openwaf \
--restart always \
-p 9443:9443 \
-v ./data:/app/data \
my-openwaf:latest启动后访问 https://localhost:9443 进入管理面板。
前置要求: Go 1.25+、Node.js 22+、GCC
# 1. 构建前端
cd frontend && npm ci && npm run build
# 2. 构建后端(前端产物自动嵌入)
cd .. && CGO_ENABLED=1 go build -ldflags="-s -w" -o bin/my-openwaf ./cmd/...
# 3. 运行
./bin/my-openwafdocker build -t my-openwaf:latest .项目内置三阶段 Dockerfile:前端构建 → 后端编译 → 精简 Alpine 运行时镜像。
通过环境变量配置运行参数:
| 环境变量 | 默认值 | 说明 |
|---|---|---|
MY_OPENWAF_DB_DRIVER |
sqlite |
数据库驱动(sqlite / mysql / postgres) |
MY_OPENWAF_DSN |
/app/data/waf.db |
数据库连接字符串 |
MY_OPENWAF_DATA |
/app/data |
数据目录路径 |
MY_OPENWAF_ADMIN_BIND |
:9443 |
管理面板监听地址 |
启动后在管理面板中:
- 添加站点 — 配置域名与上游服务器地址
- 配置规则 — 启用 OWASP 检测、设置 ACL 规则
- 开启防护 — 启用 CC 防护、Bot 防护、IP 信誉等模块
- 配置证书 — 上传 TLS 证书或启用自动 HTTPS
| 层级 | 技术 |
|---|---|
| 后端语言 | Go 1.25 |
| Web 框架 | Hertz v0.10.4(字节跳动高性能 HTTP 框架) |
| 前端 | Next.js + React (Node.js 22) |
| 数据库 | SQLite(默认)/ MySQL / PostgreSQL(GORM ORM) |
| 本地缓存 | Ristretto v0.2.0(高性能 LFU 缓存) |
| 分布式缓存 | go-redis v9.19.0 |
| 认证 | JWT (golang-jwt v5) |
| GeoIP | MaxMind GeoLite2 (maxminddb-golang) |
| 人机验证 | 动态 WASM + VMP 虚拟机(Go/C++ 编译) |
| 运行时 | Alpine 3.21(精简容器镜像) |
┌──────────────────────────────────────────────────────┐
│ My-OpenWaf │
│ │
│ ┌────────────┐ ┌────────────┐ ┌──────────────┐ │
│ │ 数据平面 │ │ 控制平面 │ │ 可观测性 │ │
│ │ │ │ │ │ │ │
│ │ 请求处理 │ │ 管理 API │ │ 安全事件记录 │ │
│ │ 规则管道 │ │ REST 接口 │ │ 访问日志归档 │ │
│ │ TLS 终止 │ │ 前端面板 │ │ 健康检查监控 │ │
│ │ 上游代理 │ │ 配置管理 │ │ 性能指标收集 │ │
│ │ 缓存加速 │ │ 证书管理 │ │ SSE 实时推送 │ │
│ └────────────┘ └────────────┘ └──────────────┘ │
│ │
│ ┌────────────────────────────────────────────────┐ │
│ │ 存储层 │ │
│ │ SQLite / MySQL / PostgreSQL │ Ristretto + Redis │ │
│ └────────────────────────────────────────────────┘ │
└──────────────────────────────────────────────────────┘
项目采用双平面架构:
- 数据平面 — 处理所有入站 HTTP/S 流量,执行规则管道、TLS 终止、上游代理转发
- 控制平面 — 管理 API(端口 9443)+ 前端管理面板,提供规则配置、站点管理、证书管理等功能
本项目基于 Apache License 2.0 开源许可证发布。