Files
pangolin/infra/domains/cdn/terraform/README.md
T
wangjia 7d89ec9d91 feat(infra/domains): 域名池 + CDN 前置 + 签名端点分发 (tsk_NU9JuUweHWMt)
- domains.md: 四组域名隔离登记 + 冷备池 ≥5 + 启用流程(不含身份信息)
- cdn/terraform: Cloudflare 配置即代码(WAF/bot/速率限制/代理DNS/回源鉴权注入)+ 30min 重放 Runbook
- server/internal/originauth: 回源鉴权中间件,非 CDN 网段或鉴权头不符一律 403,支持双值轮换
- tools/endpoint-signer: 离线 Ed25519 签名 CLI(端点 + 公告文档,单调版本防回滚,key_id 双公钥轮换)
- tools/publish-mirrors: ≥3 镜像发布 + hash 一致性校验 + 故障转移取回
- CLIENT-CONTRACT.md: schema/验签/防回滚/合并/兜底链/channel 客户端契约
- 出站独立出口要求写入部署文档;私钥/token/身份信息一律不入库

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-13 14:21:55 +08:00

52 lines
2.5 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# CDN 前置(Cloudflare)配置即代码
把一个域名在 30 分钟内接到 Cloudflare 之后:WAF + bot 管理 + 速率限制全开、DNS 代理回源、回源鉴权 header 注入。对应 doc/05 §2 与 §5「CDN 账号风险」Runbook。
## 资源清单
| 文件 | 资源 | 作用 |
|---|---|---|
| `versions.tf` | provider | 锁 `cloudflare ~> 4.40`token 走 `CLOUDFLARE_API_TOKEN` 环境变量 |
| `settings.tf` | `cloudflare_zone_settings_override` | TLS1.3 / SSL strict / HSTS / 高安全级 |
| `dns.tf` | `cloudflare_record` | 代理(橙云)A 记录,隐藏源站 IP |
| `waf.tf` | `cloudflare_ruleset` ×2 + `cloudflare_bot_management` | Managed+OWASP WAF、`/v1/*` 速率限制、Bot 管理 |
| `origin.tf` | `cloudflare_ruleset`late_transform | 回源注入 `X-Origin-Auth` |
| `outputs.tf` | — | 代理后的主机名清单 |
## 绝不入库的东西
- **API token**`export CLOUDFLARE_API_TOKEN=...`(本机由 rbw 取;CI 由 Secret 注入)。
- **回源鉴权值**`export TF_VAR_origin_auth_value=...`
- `terraform.tfvars``*.tfstate``.terraform/`:均 gitignore。
## 30 分钟重放流程(CDN 账号风险应急)
> 目标:旧 CDN 账号被封 / 要求实名时,在新账号 + 新(或同)域名上 30 分钟内重建全部防护并切流量。
```bash
# 0. 准备(离线已存):新账号 API token、zone_id、account_id、origin_ip、回源鉴权值
export CLOUDFLARE_API_TOKEN=... # 新账号 tokenrbw get
export TF_VAR_origin_auth_value=... # 当前回源鉴权值
cd infra/domains/cdn/terraform
cp terraform.tfvars.example terraform.tfvars # 填 zone_id/account_id/origin_ip/api_hostnames
# 1. 初始化 + 计划 + 应用(首次约 3–8 分钟)
terraform init
terraform plan -out tf.plan
terraform apply tf.plan
# 2. 在新账号把域名 NS 指过去(注册商处改 NS),等待生效
# 用多镜像签名端点更新把新 API 域名/镜像下发给客户端(见 ../../tools
# 3. 验证回源鉴权(应 200)与直连源站(应 403,见 server/internal/originauth
```
把每次重放的**实测耗时**记到本目录 `REPLAY-LOG.md`(验收要求 ≤30min)。
## 注意
- `cloudflare_bot_management` 需要账号套餐支持(Pro+/Bot Management),免费账号把 `enable_bot_management=false`,改用面板 Bot Fight Mode。
- WAF managed ruleset 的 `id` 为 Cloudflare 公开稳定 IDManaged / OWASP)。
- 本目录无法在本仓库 CI 内 `apply`(需真实账号);提交前至少 `terraform fmt -check && terraform validate`