diff --git a/history/2026-04-26-bouncer-consolidation.md b/history/2026-04-26-bouncer-consolidation.md index 487b9e2..9793b15 100644 --- a/history/2026-04-26-bouncer-consolidation.md +++ b/history/2026-04-26-bouncer-consolidation.md @@ -81,7 +81,26 @@ incus list jp1: --all-projects | grep cs-cf-worker-bouncer # → (empty) ``` -Syn 결과 (별도 보고 후 추가): CF Worker / KV / Turnstile / BunnyCDN Edge Script / APISIX plugin 정리 결과는 Syn → Heimdall 회신 시 본 history에 추기. +### Syn 회신 (DONE 2026-04-26) + +| 영역 | 결과 | +|---|---| +| CF Worker 스크립트 + KV namespace | 삭제 완료 | +| **CF Turnstile 위젯 4개** (`crowdsec-cloudflare-worker-bouncer-widget`) | Syn API 권한 부족으로 보류 → kappa가 `global_api_key`로 직접 삭제 (sitekey: `…N-HtUDFAaJ`/`…RrhJUQKfIF`/`…r02LA19njc7`/`…6l0x5reO6ZQ`) | +| BunnyCDN MiddlewareScriptId iron-jp/iron-kr 해제 | 완료 | +| BunnyCDN Edge Script 64811 자체 | Syn 보고 시 orphan 상태 → kappa가 `DELETE /compute/script/64811` HTTP 204로 삭제. iron-jp(5555247)/iron-kr(5555227)/iron-kr-waf(5555224)/iron-git(5584382) 모두 `MiddlewareScriptId: null` 자동 정리 확인 | +| APISIX(osaka) `crowdsec-bouncer` 플러그인 | global_rules + route `tg-webhook` + config.yaml에서 제거 + 재시작 완료 | + +### Turnstile 위젯 추가 정리 (kappa, 2026-04-26) + +bouncer 단일화 후속으로 같은 날 추가 폐기: + +| Sitekey | Name | 폐기 사유 | +|---|---|---| +| `0x4AAAAAACbmaudAjITah7y7` | `inouter` | 이름·도메인 불일치 legacy orphan | +| `0x4AAAAAAC3otPWhldI96Aks` | `inouter-bunny-middleware` | BunnyCDN 미들웨어 64811 폐기와 함께 사용처 사라짐 | + +CF Turnstile에 남은 위젯: `crowdsec-captcha` (`0x4AAAAAABvmO8BKc1ss5d-S`, 8 도메인). bouncer 외 사용처(charon.my / n8n.my / subin.my 등) 추적 미완 → 폐기 보류. ## 롤백 @@ -93,9 +112,11 @@ Syn 결과 (별도 보고 후 추가): CF Worker / KV / Turnstile / BunnyCDN Edg ## 후속 과제 - [ ] Vault `secret/infra/crowdsec-bunny-bouncer` + cs-cf-worker-bouncer 관련 토큰 폐기 결정 (kappa) +- [ ] Vault `secret/cloud/cloudflare/turnstile-inouter-bunny` 폐기 (위젯 삭제됨) - [ ] CrowdSec scenarios 다시 검토 — 일반 enforce 경로가 사라졌으니 시나리오 그룹화/조용화 가능 - [ ] kappa zone에 대한 대체 보호 검토 (필요 시 BunnyCDN WAF 강화 / CF Pro 플랜 활용 등) -- [ ] Syn 회신 후 본 history에 CF Worker / KV / Turnstile / BunnyCDN Edge / APISIX plugin 정리 결과 추기 +- [ ] `crowdsec-captcha` Turnstile 위젯 8 도메인 사용처 추적 (charon.my / n8n.my / subin.my 등) → 폐기 가능 여부 결정 +- [x] ~~Syn 회신 후 본 history에 CF Worker / KV / Turnstile / BunnyCDN Edge / APISIX plugin 정리 결과 추기~~ — 위 "Syn 회신" 절 ## 관련 history diff --git a/infra/security/cloudflare.md b/infra/security/cloudflare.md index 323ece7..c597c87 100644 --- a/infra/security/cloudflare.md +++ b/infra/security/cloudflare.md @@ -1,6 +1,6 @@ --- title: Cloudflare 서비스 -updated: 2026-04-10 +updated: 2026-04-26 bouncer 단일화로 Turnstile 위젯 6개 + Worker/KV 정리 반영 tags: [infra, cloudflare, cdn, dns] --- @@ -190,26 +190,30 @@ Worker Custom Domains (계정 레벨): 0건. | Sitekey | 이름 | mode | 도메인 | 역할 | |---|---|---|---|---| -| `0x4AAAAAABvmO8BKc1ss5d-S` | `crowdsec-captcha` | managed | actions / anvil / charon.my / ironclad / keepanker / n8n.my / servidor / subin.my | multi-domain 운영용 (8 도메인). 수동 관리 (bouncer 외) | -| `0x4AAAAAACbmaudAjITah7y7` | `inouter` | managed | anvil.it.com | 이름·도메인 불일치 (legacy/orphan 후보, 결정 미정) | -| `0x4AAAAAAC3otPWhldI96Aks` | `inouter-bunny-middleware` | managed | inouter.com | BunnyCDN 미들웨어 64811 의 `TURNSTILE_SITE_KEY` / `TURNSTILE_SECRET_KEY` env baked-in. 이름이 bouncer auto 패턴과 달라 cs-cf-worker-bouncer 가 관리 대상 외. **수동 관리**, sitekey/secret 변경 시 미들웨어 64811 env 동시 갱신 필수 | -| `0x4AAAAAAC3nIMLBRKWfiY8A` | `crowdsec-cloudflare-worker-bouncer-widget` | managed | actions.it.com | cs-cf-worker-bouncer 자동 (168h rotation). 수동 편집 금지 | -| `0x4AAAAAAC3nIYV_A5OA0Xzv` | 〃 | managed | ironclad.it.com | 〃 | -| `0x4AAAAAAC3nHnAB6Q9dlvHM` | 〃 | managed | keepanker.cv | 〃 | -| `0x4AAAAAAC3nH0xXSU8kbwsn` | 〃 | managed | servidor.it.com | 〃 | +| `0x4AAAAAABvmO8BKc1ss5d-S` | `crowdsec-captcha` | managed | actions / anvil / charon.my / ironclad / keepanker / n8n.my / servidor / subin.my | multi-domain 운영용 (8 도메인). 수동 관리. **bouncer 외 사용처 추적 미완 — 폐기 보류** | -`inouter-bunny-middleware` 의 secret 은 Vault `secret/cloud/cloudflare/turnstile-inouter-bunny` (`sitekey`, `secret`, `name`). +> [!note] bouncer 단일화로 위젯 6개 정리 (2026-04-26) +> - `crowdsec-cloudflare-worker-bouncer-widget` × 4 (actions.it.com / ironclad.it.com / keepanker.cv / servidor.it.com): cs-cf-worker-bouncer 폐기로 자동 사용처 사라짐 → 삭제 +> - `inouter-bunny-middleware` (`0x4AAAAAAC3otPWhldI96Aks`): BunnyCDN 미들웨어 64811 폐기와 함께 삭제 +> - `inouter` (`0x4AAAAAACbmaudAjITah7y7`): legacy orphan 정리 차원 삭제 +> - 정리 경과: [[../../history/2026-04-26-bouncer-consolidation|history]] -### Turnstile 토큰 권한 +Vault 시크릿 잔여 (위젯 삭제됐지만 시크릿은 보존 — 재가동 시 새 위젯 발급해서 덮어쓰기): +- `secret/cloud/cloudflare/turnstile-crowdsec-captcha` (현역 `crowdsec-captcha` 위젯용) +- `secret/cloud/cloudflare/turnstile-inouter-bunny` (삭제된 `inouter-bunny-middleware` legacy) + +### Turnstile 토큰 권한 (현재) - **Vault `secret/cloud/cloudflare.api_token`** (`pUIZdTV0…`): DNS R/W + Turnstile **read-only**. 위젯 생성/수정/삭제 불가 -- **jp1 bouncer 호스트의 `/etc/crowdsec/bouncers/crowdsec-cloudflare-worker-bouncer.yaml` 내 `token: seUKZID4…`**: Turnstile **read+write**. bouncer 의 자체 인증 자산이며 Vault 에 복제되어 있지 않음 +- **`global_api_key`** (Vault `secret/cloud/cloudflare.global_api_key`): 모든 권한. 위젯 삭제 등 write 작업은 이쪽 사용 +- ~~jp1 bouncer 호스트의 yaml 내 `token: seUKZID4…`~~: bouncer 컨테이너 삭제와 함께 분실 (2026-04-26) ## 특이사항 - **`*.actions.it.com → actions.b-cdn.net`** — 와일드카드가 dead 풀존 가리킴. 일부 서브가 5xx 가능. 미정리 (영향 평가 후 별건) - **Worker routes `vultr.actions.it.com/*`, `linode.actions.it.com/*`** — `script: null` orphan. 미정리 -- **Turnstile `inouter` (`…CbmaudAjITah7y7`)** — 이름·도메인 불일치 legacy 후보. 미정리 +- ~~**Turnstile `inouter` legacy**~~ — 2026-04-26 정리 완료 +- **Turnstile `crowdsec-captcha` (8 도메인)** — `charon.my`, `n8n.my`, `subin.my` 등 사용처 미확인 → 폐기 보류 ### CF proxy on/off 패턴