快速开始
从一份干净的 checkout 到一个 Tiyi 实例拦截真实 OWASP CRS 攻击,只需要五分钟。我们会构建二进制、启动 standalone、创建一个站点,并看 WAF 干活。
前置条件
- Linux(amd64 或 arm64)或 macOS 用于开发。Windows 不是目标主机。
- 从源码构建需要 Go 1.25+。
- 重新构建嵌入式管理 UI 需要 Node 20+ 与 pnpm 9+。
- 一个空闲的后端 —— 任何会说 HTTP 的都行。下方示例用 Python 的
http.server。
1. 构建二进制
从一份新的 checkout:
$ make proto # 从 proto/ 重新生成 Connect Go + Protobuf Go
$ make web # 把 Vben Admin 前端构建到 web/dist/
$ make build # 编译嵌入前端的 bin/tiyi
或一条命令搞定:
$ make build-all
输出在 ./bin/tiyi。它是一个静态链接的 Go 可执行文件,复制到任何地方都能跑。
没有 Go 工具链?跳到安装 → 预构建二进制看签名发布版的下载方式。
2. 以 standalone 模式运行
本地非特权测试,覆盖数据平面端口:
$ ./bin/tiyi standalone \
--state-db /tmp/tiyi.db \
--caddy-admin-socket /tmp/tiyi-caddy.sock \
--proxy-http-addr 127.0.0.1:18080 \
--proxy-https-addr 127.0.0.1:18443
Tiyi 会打印一行包含 API 地址、引导管理员密码(仅首次启动显示一次)与 Caddy 管理 socket 路径的 banner:
tiyi v3.0.0-rc.1 standalone
api http://127.0.0.1:8080
proxy http://127.0.0.1:18080 https://127.0.0.1:18443
state /tmp/tiyi.db
bootstrap admin password: <random-shown-once>
浏览器打开 http://127.0.0.1:8080/。用 admin 与上面的密码登录。你已经在 Vben Admin 里。
引导密码只显示一次。刷新前先从终端复制下来。丢了?停掉二进制、删除 state.db、再次启动 —— Tiyi 会重新引导。
3. 准备一个后端
在第二个终端启动一个 Tiyi 可以代理的服务。任何 HTTP 都行 —— 演示用 Python:
$ python3 -m http.server 9000
4. 创建第一个站点
UI 与 CLI 都行。CLI 使用本地管理 socket,无需 token:
# 1. 创建一个上游池指向演示后端
$ ./bin/tiyi upstream create \
--name demo-backend \
--target http://127.0.0.1:9000
# 2. 挂上内置 Standard 策略并创建站点
$ ./bin/tiyi site create \
--name demo \
--hostname demo.local \
--upstream demo-backend \
--policy "Built-in Standard" \
--tls none
# 3. 启用 —— 触发实时 Caddy apply
$ ./bin/tiyi site enable demo
写入器把站点行翻译成 Caddy JSON、通过其管理 socket 热重载 Caddy,并发出一行已签名的配置 bundle。任何失败都会保留旧配置并恢复站点行。
5. 验证 WAF 拦截攻击
在第三个终端,向代理端口发出一次基线请求与三个经典攻击:
# 基线 —— 应该通过
$ curl -sS -o /dev/null -w "%{http_code}\n" -H "Host: demo.local" http://127.0.0.1:18080/
200
# SQL 注入
$ curl -sS -o /dev/null -w "%{http_code}\n" -H "Host: demo.local" \
"http://127.0.0.1:18080/?id=1'%20OR%20'1'='1"
403
# XSS
$ curl -sS -o /dev/null -w "%{http_code}\n" -H "Host: demo.local" \
"http://127.0.0.1:18080/?q=<script>alert(1)</script>"
403
# 目录穿越
$ curl -sS -o /dev/null -w "%{http_code}\n" -H "Host: demo.local" \
"http://127.0.0.1:18080/../../../../etc/passwd"
403
在 http://127.0.0.1:8080/#/logs/security 的 dashboard 上,三次拦截请求会立即出现,附带 Coraza 规则 ID、严重等级、攻击标签与匹配的 CRS 消息。Dashboard 的流量曲线实时展现 1:3 基线-拦截比。