开始使用

快速开始

从一台干净的 Linux 主机到一个太一实例拦截真实 OWASP CRS 攻击,只需要五分钟。我们会安装签名二进制、启动 tiyi run、创建一个站点,并看 WAF 干活。

前置条件

1. 安装签名二进制

使用权威公开安装器。它会选择匹配的 Linux 发行包、校验 SHA-256 manifest,并把 tiyi 安装到 /usr/local/bin

$ curl -fsSL https://www.tiyisec.com/install.sh | bash
$ tiyi --version

版本固定、安装目录覆盖与 Gitee 镜像用法见安装

已有 v3.4.0 或更早安装?不要继续执行新安装流程,也不要在通用 update 后直接重启。必须先完成并验证完整备份,再按 v3.5.3 完整卸载升级指引操作。

2. 运行太一

按你的权限选择一种方式。以 root 运行时默认值即可 —— 状态写入 /var/lib/tiyi,代理绑定 80/443 端口:

$ sudo tiyi run

以普通用户运行(不用 sudo)时,把太一指向可写路径并使用高端口:

$ tiyi run \
    --state-db /tmp/tiyi.db \
    --caddy-admin-socket /tmp/tiyi-caddy.sock \
    --admin-socket /tmp/tiyi-admin.sock \
    --proxy-http-addr 127.0.0.1:18080 \
    --proxy-https-addr 127.0.0.1:18443

太一会打印一行包含 API 地址、引导管理员密码(仅首次启动显示一次)与 Caddy 管理 socket 路径的 banner:

tiyi v3.5.3 run
  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 与上面的密码登录。控制台会进入总览。稳定任务区为总览、应用交付、防护策略、节点、事件与日志、检测与响应、监控、系统管理;权限过滤会隐藏空分组,但不会改变深链地址。

引导密码只显示一次。请从终端复制。若丢失,不要删除 state.db:在太一主机通过本地管理 socket 运行 tiyi user list,再运行 tiyi user reset-password <user-id> --password <new>

自定义管理员密码(可选)

用于自动化、容器镜像或 CI 时,跳过自动生成的密码:在首次启动前设置 TIYI_AUTH_BOOTSTRAP_ADMIN_PASSWORD,太一会原样采用且不打印任何 banner。用户名默认 admin;仅当尚不存在任何用户时才会自动生成密码,因此重启都是空操作。

$ mkdir -p /tmp/waf
$ TIYI_AUTH_BOOTSTRAP_ADMIN_PASSWORD='admin123@xxxxxxm' \
    tiyi run \
    --addr 0.0.0.0:8080 \
    --state-db /tmp/waf/state.db \
    --caddy-admin-socket /tmp/waf/caddy.sock \
    --proxy-http-addr 0.0.0.0:8180 \
    --proxy-https-addr 0.0.0.0:18443 \
    --admin-socket /tmp/waf/admin.sock

3. 准备一个后端

在第二个终端启动一个太一可以代理的服务。任何 HTTP 都行 —— 演示用 Python:

$ python3 -m http.server 9000

4. 创建第一个站点

UI 与 CLI 都行。CLI 使用本地管理 socket,无需 token:

# 1. 创建站点并指向演示后端
$ tiyi site create \
    --name demo \
    --host demo.local \
    --upstream-url http://127.0.0.1:9000 \
    --tls none

# 创建后站点立即生效。

一步式路径会创建上游池、使用内置 Standard 策略、把站点翻译成 Caddy JSON,并通过管理 socket 热重载 Caddy。任何失败都会保留旧配置并恢复站点行。

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

下一步阅读