开始使用

快速开始

从一份干净的 checkout 到一个 Tiyi 实例拦截真实 OWASP CRS 攻击,只需要五分钟。我们会构建二进制、启动 standalone、创建一个站点,并看 WAF 干活。

前置条件

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 基线-拦截比。

下一步阅读