obsidian: 정본에서 변경 이력 분리, history/ 도입
- history/README.md: 변경 이력/인시던트 기록 규약 - history/2026-04-10-edge-cleanup.md: 오늘의 엣지 정리·인시던트·복구 전체 연대기 - infra/cloudflare.md: 연대기 주석/strikethrough/인시던트 서사 제거, 현재 사실만 - infra/crowdsec-safeline.md: 인시던트 bullet 제거, 과거 이력은 history/ 참조 - services/bunnycdn-security.md: sitekey 이력표 제거, 현재 위젯 정보만 - infra/nas-storage.md: reverse proxy 섹션의 날짜 주석 제거
This commit is contained in:
@@ -4,39 +4,36 @@ updated: 2026-04-10
|
||||
tags: [infra, cloudflare, cdn, dns]
|
||||
---
|
||||
|
||||
> 2026-04-10 전수 감사 (Outline `agent-qna` doc `51b963c3-b251-48b5-a57a-a2305959c470`) 결과 반영 + 정리 1차 (`nas.inouter.com`, `ironclad.jp.inouter.com`, `k8s.jp.inouter.com` 삭제). Syn 이 엣지 관점에서 소유. 일반 DNS 관리 협업은 Heimdall.
|
||||
Syn 이 엣지 관점에서 소유. 일반 DNS 관리 협업은 Heimdall.
|
||||
|
||||
## 계정
|
||||
|
||||
- ID: `d8e5997eb4040f8b489f09095c0f623c` (kappa@inouter.com)
|
||||
- API 토큰: Vault `secret/cloud/cloudflare` (`api_token`, `email`)
|
||||
- **Turnstile 쓰기 권한 없음** — 현 토큰은 read-only. 신규 위젯은 CF 대시보드 수동 또는 별도 권한 토큰 필요.
|
||||
|
||||
## Zone 전수 (6개, 2026-04-10)
|
||||
## Zone
|
||||
|
||||
| Zone | Zone ID | Status | Plan | NS | DNS rec | 비고 |
|
||||
|---|---|---|---|---|---|---|
|
||||
| **actions.it.com** | `dd7db273…` | active | Free | earl/raegan | 2 | apex+wildcard CNAME → BunnyCDN, **wildcard 가 dead 풀존 가리킴** ⚠ |
|
||||
| **actions.it.com** | `dd7db273…` | active | Free | earl/raegan | 2 | apex+wildcard CNAME → BunnyCDN. `*.actions.it.com → actions.b-cdn.net` 는 dead 풀존 가리킴 (미정리) |
|
||||
| **anvil.it.com** | `742f4c98…` | active | Free | earl/raegan | 9 | apex/wildcard CNAME → iron-jp, ssh.anvil.it.com A, Cloudflare Email Routing |
|
||||
| **inouter.com** | `cd84743d…` | active | Free | earl/raegan | 32 | 메인 zone. 와일드카드 → k3s.inouter.com (LAN), 다수 서브가 iron-kr/iron-git 으로 분기 |
|
||||
| **inouter.com** | `cd84743d…` | active | Free | earl/raegan | 32 | 메인 zone. 와일드카드 → k3s.inouter.com (LAN), 다수 서브가 iron-kr / iron-git 으로 분기 |
|
||||
| **ironclad.it.com** | `bc8761b3…` | active | Free | earl/raegan | 14 | apex+wildcard A `172.233.93.180` (proxied), Mailgun MX, AWS SES DKIM |
|
||||
| **keepanker.cv** | `118ac337…` | active | Free | lochlan/olivia | 3 | apex/wildcard → **Cloudflare Tunnel** (`cfargotunnel.com`), juiceshop CNAME → iron-kr-waf |
|
||||
| **servidor.it.com** | `a6e1a3f1…` | active | Free | earl/raegan | **0** ⚠ | **DNS 레코드 0건 — orphan zone**. 워커 라우트 + Turnstile 위젯만 살아 있음 |
|
||||
| **keepanker.cv** | `118ac337…` | active | Free | lochlan/olivia | 3 | apex/wildcard → Cloudflare Tunnel (`cfargotunnel.com`), juiceshop CNAME → iron-kr-waf |
|
||||
| **servidor.it.com** | `a6e1a3f1…` | active | Free | earl/raegan | 0 | DNS 0건 orphan. cert-manager wildcard + CrowdSec bouncer + Turnstile 위젯은 세팅된 상태 (배포 준비용 유지) |
|
||||
|
||||
총 60건 (servidor 제외).
|
||||
|
||||
별도 계정 [[netbis]] 의 6개 zone (fall-vip / psd777 등) 은 본 문서 범위 외 — netbis-cf-bouncer 가 별도로 관리.
|
||||
별도 계정 [[netbis]] 의 6개 zone 은 본 문서 범위 외 — netbis-cf-bouncer 가 별도로 관리.
|
||||
|
||||
## DNS 레코드 — zone 별 핵심
|
||||
|
||||
### actions.it.com (2)
|
||||
### actions.it.com
|
||||
|
||||
| Name | Type | Value | Proxied |
|
||||
|---|---|---|---|
|
||||
| `actions.it.com` | CNAME | `iron-kr.b-cdn.net` | ✅ |
|
||||
| `*.actions.it.com` | CNAME | **`actions.b-cdn.net`** ⚠ dead | ✅ |
|
||||
| `*.actions.it.com` | CNAME | `actions.b-cdn.net` (dead 풀존) | ✅ |
|
||||
|
||||
### anvil.it.com (9)
|
||||
### anvil.it.com
|
||||
|
||||
| Name | Type | Value | Proxied |
|
||||
|---|---|---|---|
|
||||
@@ -45,9 +42,9 @@ tags: [infra, cloudflare, cdn, dns]
|
||||
| `n8n.anvil.it.com` | CNAME | `iron-jp.b-cdn.net` | off |
|
||||
| `kroki.anvil.it.com` | CNAME | `k3s.inouter.com` | off |
|
||||
| `ssh.anvil.it.com` | A | `139.162.71.52` | off |
|
||||
| MX×3 (Cloudflare Email Routing), DKIM TXT 1건 | | | |
|
||||
| MX×3 Cloudflare Email Routing, DKIM TXT | | | |
|
||||
|
||||
### inouter.com (32) — 핵심
|
||||
### inouter.com
|
||||
|
||||
| Name | Type | Value | Proxied | 메모 |
|
||||
|---|---|---|---|---|
|
||||
@@ -57,28 +54,28 @@ tags: [infra, cloudflare, cdn, dns]
|
||||
| `jp.inouter.com` | A | `42.125.196.116` | off | jp1 |
|
||||
| `derp.inouter.com` | A | `42.125.196.116` | off | jp1 derp |
|
||||
| `gitea.inouter.com` | CNAME | `iron-git.b-cdn.net` | off | 별도 풀존 (미들웨어 우회) |
|
||||
| `n8n.inouter.com` | CNAME | `iron-kr.b-cdn.net` | off |
|
||||
| `jarvis.inouter.com` | CNAME | `iron-kr.b-cdn.net` | off |
|
||||
| `vault.inouter.com` | CNAME | `iron-kr.b-cdn.net` | off |
|
||||
| `outline.inouter.com` | CNAME | `iron-kr.b-cdn.net` | off |
|
||||
| `telegram-webhook.inouter.com` | CNAME | `iron-kr.b-cdn.net` | off |
|
||||
| `n8n.inouter.com` | CNAME | `iron-kr.b-cdn.net` | off | |
|
||||
| `jarvis.inouter.com` | CNAME | `iron-kr.b-cdn.net` | off | |
|
||||
| `vault.inouter.com` | CNAME | `iron-kr.b-cdn.net` | off | |
|
||||
| `outline.inouter.com` | CNAME | `iron-kr.b-cdn.net` | off | |
|
||||
| `telegram-webhook.inouter.com` | CNAME | `iron-kr.b-cdn.net` | off | |
|
||||
| `desk-api.inouter.com` | A | `172.233.93.180` | ✅ | osaka 직통, CF proxied |
|
||||
| `sftp.inouter.com` | A | `220.120.65.245` | ✅ | OpenWrt 직통, CF proxied |
|
||||
| `git.inouter.com` | A | `52.79.45.166` | off | relay4wd Lightsail |
|
||||
| `teleport.inouter.com` | A | `52.79.45.166` | off | relay4wd Lightsail |
|
||||
| `twilio.jp.inouter.com` | A | `172.233.93.180` | off |
|
||||
| `bunny.mcp.inouter.com` | CNAME | `k3s.inouter.com` | off |
|
||||
| `twilio.jp.inouter.com` | A | `172.233.93.180` | off | |
|
||||
| `bunny.mcp.inouter.com` | CNAME | `k3s.inouter.com` | off | |
|
||||
| `vl.inouter.com` | CNAME | `k3s.inouter.com` | off | [[victorialogs|VictoriaLogs]] |
|
||||
| `emulator.api.inouter.com` | CNAME | `k3s.inouter.com` | off |
|
||||
| `linode.api.inouter.com` | CNAME | `k3s.inouter.com` | off |
|
||||
| `namecheap.api.inouter.com` | CNAME | `k3s.inouter.com` | off |
|
||||
| `vultr.api.inouter.com` | CNAME | `k3s.inouter.com` | off |
|
||||
| `email.inouter.com` | CNAME | `mailgun.org` | off |
|
||||
| MX×2 Mailgun, TXT (SPF/DMARC/DKIM/google verification) | | | |
|
||||
| `emulator.api.inouter.com` | CNAME | `k3s.inouter.com` | off | |
|
||||
| `linode.api.inouter.com` | CNAME | `k3s.inouter.com` | off | |
|
||||
| `namecheap.api.inouter.com` | CNAME | `k3s.inouter.com` | off | |
|
||||
| `vultr.api.inouter.com` | CNAME | `k3s.inouter.com` | off | |
|
||||
| `email.inouter.com` | CNAME | `mailgun.org` | off | |
|
||||
| MX×2 Mailgun, TXT (SPF/DMARC/DKIM/google verification) | | | | |
|
||||
|
||||
> **이전 메모(updated 2026-04-04)는 폐기**: jarvis/telegram-webhook/vault/n8n 이 `actions.b-cdn.net` 가리킨다는 기록은 dead 풀존을 가리키는 구식 정보. 실제 정본은 위 표와 같이 모두 `iron-kr.b-cdn.net`.
|
||||
`nas.inouter.com` 은 특정 A/CNAME 레코드 없음. `*.inouter.com` 와일드카드 폴백으로 `192.168.9.53` (LAN MetalLB VIP) 로 해석되어 K3s `lan-proxies/nas` IngressRoute 를 통해 Synology DSM (`192.168.9.100:5000`) 으로 reverse proxy. 상세 [[nas-storage#DSM Reverse Proxy — `nas.inouter.com`]].
|
||||
|
||||
### ironclad.it.com (14)
|
||||
### ironclad.it.com
|
||||
|
||||
| Name | Type | Value | Proxied |
|
||||
|---|---|---|---|
|
||||
@@ -86,9 +83,9 @@ tags: [infra, cloudflare, cdn, dns]
|
||||
| `*.ironclad.it.com` | A | `172.233.93.180` | ✅ |
|
||||
| MX×2 Mailgun, AWS SES DKIM CNAME×3, TXT (SPF/DMARC/google) | | | |
|
||||
|
||||
> ironclad.it.com 은 **BunnyCDN 풀존을 거치지 않음**. CF proxied A 로 osaka 172.233.93.180 직통. 보호는 CF Worker (`ironclad-site` apex + bouncer wildcard) 단독.
|
||||
ironclad.it.com 은 **BunnyCDN 풀존을 거치지 않음**. CF proxied A 로 osaka `172.233.93.180` 직통. 보호는 CF Worker (`ironclad-site` apex + bouncer wildcard) 단독.
|
||||
|
||||
### keepanker.cv (3)
|
||||
### keepanker.cv
|
||||
|
||||
| Name | Type | Value | Proxied |
|
||||
|---|---|---|---|
|
||||
@@ -96,143 +93,97 @@ tags: [infra, cloudflare, cdn, dns]
|
||||
| `*.keepanker.cv` | CNAME | `f1aa79f2-….cfargotunnel.com` | ✅ |
|
||||
| `juiceshop.keepanker.cv` | CNAME | `iron-kr-waf.b-cdn.net` | off |
|
||||
|
||||
apex/wildcard 는 Cloudflare Tunnel (cfargotunnel). juiceshop 은 BunnyCDN iron-kr-waf 로 override.
|
||||
apex/wildcard 는 Cloudflare Tunnel. juiceshop 은 BunnyCDN iron-kr-waf 로 override.
|
||||
|
||||
### servidor.it.com (0)
|
||||
### servidor.it.com
|
||||
|
||||
DNS 레코드 **없음**. zone 만 등록. 워커 라우트 + Turnstile 위젯은 살아있음 → 트래픽 자체가 불가능한데 보안 자원만 회전 중. zone 정리 또는 DNS 레코드 추가 결정 필요.
|
||||
DNS 레코드 없음. zone 만 등록. 워커 라우트 + Turnstile 위젯 + cert-manager wildcard cert 는 세팅되어 있으며 배포 준비 상태로 유지.
|
||||
|
||||
## Workers (9개)
|
||||
## Workers
|
||||
|
||||
| Worker | 라우트 부착 zones | 비고 |
|
||||
|---|---|---|
|
||||
| **crowdsec-cloudflare-worker-bouncer** | actions, anvil, inouter, ironclad, keepanker, servidor (전 6 zone) | CrowdSec CF bouncer 본체. cs-cf-worker-bouncer (jp1) 가 168h 마다 secret rotate. 정본 [[crowdsec-safeline]] |
|
||||
| **crowdsec-cloudflare-worker-bouncer** | actions, ironclad, keepanker, servidor | CrowdSec CF bouncer 본체. cs-cf-worker-bouncer (jp1) 가 168h 마다 secret rotate. 정본 [[crowdsec-safeline]] |
|
||||
| **ironclad-site** | ironclad.it.com (apex) | 정적 사이트, has_assets |
|
||||
| **cf-multisite** | `*.actions.it.com/*` | 라우팅 워커 |
|
||||
| chat-worker | (없음) | workers.dev only |
|
||||
| cloud-instances-api | (없음) | 〃 |
|
||||
| cloud-orchestrator | (없음) | 〃 |
|
||||
| telegram-ai-support | (없음) | 〃 |
|
||||
| telegram-cli-web | (없음) | 〃 |
|
||||
| telegram-summary-bot | (없음) | 〃 |
|
||||
| cloud-instances-api | (없음) | workers.dev only |
|
||||
| cloud-orchestrator | (없음) | workers.dev only |
|
||||
| telegram-ai-support | (없음) | workers.dev only |
|
||||
| telegram-cli-web | (없음) | workers.dev only |
|
||||
| telegram-summary-bot | (없음) | workers.dev only |
|
||||
|
||||
### Worker 라우트 (zone 별, 2026-04-10 cf-audit-cleanup-2 후)
|
||||
### Worker 라우트 (zone 별)
|
||||
|
||||
| Zone | Pattern | Script |
|
||||
|---|---|---|
|
||||
| actions.it.com | `*actions.it.com/*` | crowdsec-cloudflare-worker-bouncer |
|
||||
| actions.it.com | `*.actions.it.com/*` | cf-multisite |
|
||||
| actions.it.com | `vultr.actions.it.com/*` | **null** ⚠ orphan |
|
||||
| actions.it.com | `linode.actions.it.com/*` | **null** ⚠ orphan |
|
||||
| actions.it.com | `vultr.actions.it.com/*` | null (orphan, 미정리) |
|
||||
| actions.it.com | `linode.actions.it.com/*` | null (orphan, 미정리) |
|
||||
| ironclad.it.com | `ironclad.it.com/*` | ironclad-site |
|
||||
| ironclad.it.com | `*ironclad.it.com/*` | crowdsec-cloudflare-worker-bouncer |
|
||||
| keepanker.cv | `*keepanker.cv/*` | crowdsec-cloudflare-worker-bouncer |
|
||||
| servidor.it.com | `*servidor.it.com/*` | crowdsec-cloudflare-worker-bouncer |
|
||||
|
||||
**2026-04-10 삭제 (cf-audit-cleanup-2)**:
|
||||
- ~~`*inouter.com/*`~~ (inouter.com zone, crowdsec-cloudflare-worker-bouncer) — DNS proxied=false 라 enforce 안 됐음
|
||||
- ~~`*anvil.it.com/*`~~ (anvil.it.com zone, 동일)
|
||||
inouter.com / anvil.it.com 에는 Worker 라우트 없음. DNS proxied=false 라 CF 엣지를 거치지 않으므로 enforce 불가 — 이들 zone 의 엣지 보호는 BunnyCDN 미들웨어 64811 이 단독 책임.
|
||||
|
||||
이 두 라우트는 cs-cf-worker-bouncer 의 zone 제거 사이클에 의해 자동 삭제됨 (CF API 직접 호출 불필요했음).
|
||||
Worker Custom Domains (계정 레벨): 0건.
|
||||
|
||||
> Worker Custom Domains (계정 레벨): **0건**.
|
||||
|
||||
## Turnstile 위젯 (현재 6개, 2026-04-10 cf-audit-cleanup-2 후)
|
||||
## Turnstile 위젯
|
||||
|
||||
| Sitekey | 이름 | mode | 도메인 | 역할 |
|
||||
|---|---|---|---|---|
|
||||
| `0x4AAAAAABvmO8BKc1ss5d-S` | `crowdsec-captcha` | managed | actions / anvil / charon.my / ironclad / keepanker / n8n.my / servidor / subin.my | multi-domain 운영용 (8 도메인). 2025-08-29 생성. bouncer 관리 외 |
|
||||
| `0x4AAAAAACbmaudAjITah7y7` | `inouter` | managed | anvil.it.com **만** | 2026-02-13 생성. 이름과 도메인 불일치 → legacy/orphan 후보. 별건 결정 미정 (kappa) |
|
||||
| **`0x4AAAAAAC3otPWhldI96Aks`** | **`inouter-bunny-middleware`** | managed | inouter.com | **2026-04-10 신규** (cf-audit-cleanup-2 복구). **BunnyCDN 미들웨어 64811 이 TURNSTILE_SITE_KEY/SECRET_KEY env 로 baked-in 사용**. 이름이 bouncer 패턴 (`crowdsec-cloudflare-worker-bouncer-widget`) 과 다르므로 cs-cf-worker-bouncer 가 관리 대상에 넣지 않음 → freeze. **수동 관리** |
|
||||
| `0x4AAAAAAC3nIMLBRKWfiY8A` | `crowdsec-cloudflare-worker-bouncer-widget` | managed | actions.it.com | bouncer 자동 (168h rotation), 2026-04-10 00:23 재생성 (이전 sitekey `…2cn8bzKBex_ihU` 폐기) |
|
||||
| `0x4AAAAAAC3nIYV_A5OA0Xzv` | 〃 | managed | ironclad.it.com | bouncer 자동, 2026-04-10 00:23 재생성 (이전 `…2coU0PB8O8oJqY` 폐기) |
|
||||
| `0x4AAAAAAC3nHnAB6Q9dlvHM` | 〃 | managed | keepanker.cv | bouncer 자동, 2026-04-10 00:23 재생성 (이전 `…2coNrK9rRq7S_b` 폐기) |
|
||||
| `0x4AAAAAAC3nH0xXSU8kbwsn` | 〃 | managed | servidor.it.com | bouncer 자동, 2026-04-10 00:23 재생성 (이전 `…2cnZzIyNRayTcG` 폐기) |
|
||||
| `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 | 〃 |
|
||||
|
||||
**2026-04-10 삭제 (cf-audit-cleanup-2)**:
|
||||
- ~~`0x4AAAAAAC2cnEA797HwesRX`~~ (anvil.it.com bouncer-managed) — bouncer 가 zone 제거 시 자동 cleanup
|
||||
- ~~`0x4AAAAAAC2cntUlRC3KKMKG`~~ (inouter.com bouncer-managed) — bouncer 가 zone 제거 시 자동 cleanup. **이로 인해 BunnyCDN 미들웨어 64811 stale 발생 → 수동 신규 위젯 `inouter-bunny-middleware` 로 복구.** 인시던트 doc `8f5c43f8-0b46-4032-b3f6-08106aa1e5e2`
|
||||
`inouter-bunny-middleware` 의 secret 은 Vault `secret/cloud/cloudflare/turnstile-inouter-bunny` (`sitekey`, `secret`, `name`).
|
||||
|
||||
bouncer 자동 위젯 4개 (actions/ironclad/keepanker/servidor) 는 `cs-cf-worker-bouncer` 가 rotate. **수동 편집 금지** — 다음 rotate 때 덮어써짐. `inouter-bunny-middleware` 는 bouncer 관리 밖이라 수동 관리 (sitekey/secret 변경 시 BunnyCDN 미들웨어 64811 env 동시 갱신 필수).
|
||||
### Turnstile 토큰 권한
|
||||
|
||||
### Turnstile 토큰 권한 (2026-04-10 사실)
|
||||
|
||||
- **Vault `secret/cloud/cloudflare` `api_token` (`pUIZdTV0…`)**: DNS R/W + Turnstile **read-only**. 위젯 생성/수정/삭제 불가.
|
||||
- **cs-cf-worker-bouncer 가 jp1 bouncer 호스트의 `/etc/crowdsec/bouncers/crowdsec-cloudflare-worker-bouncer.yaml` 안에 보유한 별도 CF 토큰** (`token: seUKZID4…`): Turnstile **read+write**. 위젯 생성/수정/삭제 가능. 이 토큰은 bouncer 의 자체 인증 자산이며 Vault 에 복제되어 있지 않음.
|
||||
- **2026-04-10 cf-audit-cleanup-2 복구**: kappa 가 jp1 bouncer 호스트의 위 토큰을 일시 빌려 `inouter-bunny-middleware` 위젯을 직접 API 로 생성. 결과 (sitekey/secret/name) 만 Vault `secret/cloud/cloudflare/turnstile-inouter-bunny` 에 보관. 토큰 본체는 복제 없음.
|
||||
- **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 에 복제되어 있지 않음
|
||||
|
||||
## 특이사항
|
||||
|
||||
### Orphan / dead 자원
|
||||
- **`*.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 후보. 미정리
|
||||
|
||||
| 항목 | 내용 |
|
||||
|---|---|
|
||||
| **servidor.it.com zone** | DNS 레코드 0건. 워커 라우트 + Turnstile 위젯만 살아있음. 2026-04-10 kappa 판정 "죽은 도메인 아님" → **유지**. |
|
||||
| ~~`nas.inouter.com → actions.b-cdn.net`~~ | **2026-04-10 삭제 완료** (cf-audit-cleanup-1). dead 풀존 참조였고 Synology 는 LAN 전용. → 같은 날 Heimdall 이 K3s `lan-proxies/nas` (Traefik IngressRoute) 로 LAN-only 복원, `*.inouter.com → k3s.inouter.com (192.168.9.53)` 폴백 활용. 상세 [[nas-storage#DSM Reverse Proxy — `nas.inouter.com` (2026-04-10)]] |
|
||||
| **`*.actions.it.com → actions.b-cdn.net`** | 와일드카드 자체가 dead 풀존 가리킴. proxied=on 이라 CF 가 어디로 보내는지 의문. 일부 서브가 5xx 가능. **미정리** (영향 평가 후 별건). |
|
||||
| **Worker route `vultr.actions.it.com/*`, `linode.actions.it.com/*`** | `script: null`. 등록만 되고 워커 미연결. (linode.actions.it.com 자체는 BunnyCDN iron-jp 호스트네임으로도 있음 — 중복 의도?) **미정리**. |
|
||||
| **Turnstile `inouter` (sitekey `…CbmaudAjITah7y7`)** | 이름은 inouter 인데 허용 도메인은 anvil.it.com 단일. legacy 후보. **미정리** (CF 토큰 read-only 라 대시보드 수동 필요). |
|
||||
### CF proxy on/off 패턴
|
||||
|
||||
### 사설 IP 공개 DNS 노출 — 2026-04-10 정리 완료
|
||||
|
||||
| 레코드 | 값 | 상태 |
|
||||
| Zone | Proxy | 보호 |
|
||||
|---|---|---|
|
||||
| ~~`ironclad.jp.inouter.com`~~ | ~~A `10.19.228.193`~~ | **2026-04-10 삭제** (cf-audit-cleanup-1) |
|
||||
| ~~`k8s.jp.inouter.com`~~ | ~~A `10.253.103.124`~~ | **2026-04-10 삭제** (cf-audit-cleanup-1) |
|
||||
|
||||
향후 사설 IP 가 필요하면 Tailscale Magic DNS 또는 split-horizon (예: jp.inouter.com 내부 zone) 으로 처리.
|
||||
|
||||
### CF proxy on/off 패턴 (중요)
|
||||
|
||||
- **inouter.com / anvil.it.com**: 거의 전부 `proxied: false` — CF 는 DNS 만, 트래픽은 BunnyCDN 또는 LAN 직통. **2026-04-10 cf-audit-cleanup-2 에서 두 zone 의 CF Worker bouncer 라우트 + bouncer 관리 zone 항목 모두 제거**. 보호는 BunnyCDN 미들웨어 64811 이 단독 책임.
|
||||
- **actions.it.com / ironclad.it.com**: apex/wildcard 모두 `proxied: true` — CF Worker 효과적으로 enforce.
|
||||
- **keepanker.cv**: CF Tunnel.
|
||||
|
||||
### 정책 일관성
|
||||
|
||||
- iron-kr `IgnoreQueryStrings: true` vs iron-jp `IgnoreQueryStrings: false` — 같은 미들웨어 64811 공유인데 캐시 키 정책이 다름. iron-jp 트래픽이 미미해 영향 작지만 통일이 운영 단순화.
|
||||
| inouter.com / anvil.it.com | off | BunnyCDN 미들웨어 64811 단독 |
|
||||
| actions.it.com / ironclad.it.com | on | CF Worker (bouncer + cf-multisite / ironclad-site) |
|
||||
| keepanker.cv | on (Tunnel) | CF Tunnel + juiceshop 만 iron-kr-waf override |
|
||||
|
||||
## cfb-manager (CrowdSec CF Worker bouncer 관리 API)
|
||||
|
||||
| 항목 | 값 |
|
||||
|---|---|
|
||||
| 위치 | K3s `default/cfb-manager` (10.43.68.76:8000) |
|
||||
| 위치 | K3s `default/cfb-manager` (`10.43.68.76:8000`) |
|
||||
| 구현 | Python FastAPI |
|
||||
| 기능 | bouncer 보호 도메인 추가/삭제, decision 조회, CF zone 동기화, bouncer 재시작 트리거 |
|
||||
| SSH 키 | K8s `default/cfb-ssh-key` 시크릿 (ed25519, 2026-04-09 재생성) |
|
||||
| SSH 키 | K8s `default/cfb-ssh-key` (ed25519) |
|
||||
|
||||
```bash
|
||||
BASE=http://cfb-manager.default.svc.cluster.local:8000
|
||||
curl $BASE/status # bouncer_running, pids, protected_domains
|
||||
curl $BASE/domains # 보호 중인 zone 상세
|
||||
curl $BASE/decisions # 현재 결정
|
||||
curl -X POST $BASE/sync?auto_apply=true # CF 의 모든 zone 을 보호 목록 동기화
|
||||
curl -X POST $BASE/domains/<zone> # zone 추가
|
||||
curl -X DELETE $BASE/domains/<zone> # zone 제거 (destructive — bouncer restart + widget rotate)
|
||||
```
|
||||
|
||||
> **BunnyCDN 미들웨어와는 무관**. BunnyCDN 미들웨어 64811 의 bloom filter 동기화는 jp1 `infra-tool` 컨테이너 `/opt/crowdsec-bouncer/bouncer.py` (3분 delta + 매시 full sync) 가 담당.
|
||||
**중요**: `DELETE /domains/<zone>` 는 단순 config 항목 제거가 아니라 bouncer restart 를 트리거하며, restart 가 모든 zone 의 widget 을 force-rotate 하고 제거된 zone 의 widget 을 destroy 한다. 외부에서 baked-in 으로 사용 중인 sitekey 가 있다면 동시에 깨진다.
|
||||
|
||||
## 인시던트 이력
|
||||
|
||||
### 2026-04-10 cf-audit-cleanup-2 — destructive widget cleanup + 복구
|
||||
|
||||
- 의도: cs-cf-worker-bouncer 의 managed zones 에서 inouter.com, anvil.it.com 제거 (DNS proxied=false 라 enforce 안 되는 dead route 정리)
|
||||
- 잘못된 가정: zone 제거 시 위젯이 freeze 된 채 남는다
|
||||
- 실제 동작: 다음 bouncer restart 가 모든 zone 의 bouncer-managed widget 을 새 sitekey 로 rotation 하면서, config 에서 빠진 zone 의 옛 widget 은 destroy. **BunnyCDN 미들웨어 64811 이 baked-in 으로 사용하던 inouter sitekey `…2cntUlRC3KKMKG` 가 삭제되어 stale 발생**
|
||||
- 영향: 잠재 버그. 현재 ban 없으면 미발현, 첫 inouter.com 호스트 ban 시 캡차 페이지 로드 실패
|
||||
- 복구: kappa 가 jp1 bouncer 호스트의 cs-cf-worker-bouncer 토큰을 일시 빌려 신규 위젯 `inouter-bunny-middleware` (`0x4AAAAAAC3otPWhldI96Aks`) 생성. 이름이 bouncer 패턴과 다르므로 향후 rotation 영향 없음. Syn 이 BunnyCDN 미들웨어 64811 의 `TURNSTILE_SITE_KEY/SECRET_KEY` env 갱신 + publish (deployment `3816dbc5-…`)
|
||||
- 부수: cfb-manager YAML 두 번째 DELETE 호출 시 파싱 깨짐 (anvil zone_id 라인 12-space orphan indent), 003003 자동 백업과 002237 API 백업 보유. 직접 수동 수리 (orphan 22 라인 제거) 후 `wc -l 79` 확인, restart 없이 정상 복구
|
||||
- 학습: 보안/엣지 리소스 cleanup 경로는 destructive 가능성을 디폴트로 가정. 1개 항목 dry-run 후 부작용 0 확인 후 다음 진행
|
||||
- 정본: 인시던트 doc `8f5c43f8-0b46-4032-b3f6-08106aa1e5e2`, recovery 절차 동 doc `## 복구 완료` 섹션
|
||||
|
||||
## 참조
|
||||
|
||||
- 전수 감사 정본 (대화 로그): Outline `agent-qna` doc `51b963c3-b251-48b5-a57a-a2305959c470` (2026-04-10)
|
||||
- cf-audit-cleanup-2 인시던트: Outline `agent-qna` doc `8f5c43f8-0b46-4032-b3f6-08106aa1e5e2` (2026-04-10)
|
||||
- 워크스페이스 런북: `~/syn/cloudflare/README.md`
|
||||
- BunnyCDN 매핑: [[bunnycdn-security]]
|
||||
- CrowdSec/Worker bouncer: [[crowdsec-safeline]]
|
||||
- 별도 계정: [[netbis]] (Netbis 계정 6 zone, 별도 cs-cf-worker-bouncer)
|
||||
- DNS 프리셋: cloudflare, aws, google, github, bunnycdn
|
||||
BunnyCDN 미들웨어와는 무관. BunnyCDN 미들웨어 64811 의 bloom filter 동기화는 jp1 `infra-tool` 컨테이너 `/opt/crowdsec-bouncer/bouncer.py` (3분 delta + 매시 full sync) 가 담당.
|
||||
|
||||
## 관련 문서
|
||||
|
||||
@@ -240,3 +191,4 @@ curl -X POST $BASE/sync?auto_apply=true # CF 의 모든 zone 을 보호 목록
|
||||
- [[cf-multisite]] — `*.actions.it.com` 라우팅 워커
|
||||
- [[crowdsec-safeline]] — CrowdSec CF Worker Bouncer 연동
|
||||
- [[bunnycdn-security]] — BunnyCDN 엣지 보안
|
||||
- [[nas-storage]] — Synology NAS + `nas.inouter.com` reverse proxy
|
||||
|
||||
Reference in New Issue
Block a user