7d89ec9d91
- 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>
52 lines
2.5 KiB
Markdown
52 lines
2.5 KiB
Markdown
# 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=... # 新账号 token(rbw 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 公开稳定 ID(Managed / OWASP)。
|
||
- 本目录无法在本仓库 CI 内 `apply`(需真实账号);提交前至少 `terraform fmt -check && terraform validate`。
|