Files
obsidian/infra/cloudflare.md
Syn 639c9b5a0d edge: 2026-04-10 BunnyCDN+CF 전수 감사 결과 정본 반영
- infra/cloudflare.md 전면 재작성: zone 6개(actions/anvil/inouter/ironclad/keepanker/servidor) 전수, DNS 레코드 zone별 핵심, Workers 9개 + 라우트, Turnstile 위젯 8개. dead reference (nas.inouter.com / *.actions.it.com → actions.b-cdn.net), servidor.it.com orphan zone, 사설 IP 노출, CF proxy on/off 함의 등 특이사항 정리. 옛 jarvis/n8n/vault → actions.b-cdn.net 기록 폐기.
- services/bunnycdn-security.md: 5개 풀존 전수표, 17개 호스트네임 인벤토리, 미들웨어 64811 attach 매트릭스, bouncer.py 동기화 흐름. cfb-manager 가 BunnyCDN 미들웨어를 갱신한다는 옛 오기록 정정 (cfb-manager 는 CF Worker bouncer 전용).
- 두 문서 모두 Outline 감사 doc 51b963c3 링크.
2026-04-10 08:10:06 +09:00

221 lines
12 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.
---
title: Cloudflare 서비스
updated: 2026-04-10
tags: [infra, cloudflare, cdn, dns]
---
> 2026-04-10 전수 감사 (Outline `agent-qna` doc `51b963c3-b251-48b5-a57a-a2305959c470`) 결과 반영. 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 ID | Status | Plan | NS | DNS rec | 비고 |
|---|---|---|---|---|---|---|
| **actions.it.com** | `dd7db273…` | active | Free | earl/raegan | 2 | apex+wildcard CNAME → BunnyCDN, **wildcard 가 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 으로 분기 |
| **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 위젯만 살아 있음 |
총 60건 (servidor 제외).
별도 계정 [[netbis]] 의 6개 zone (fall-vip / psd777 등) 은 본 문서 범위 외 — netbis-cf-bouncer 가 별도로 관리.
## DNS 레코드 — zone 별 핵심
### actions.it.com (2)
| Name | Type | Value | Proxied |
|---|---|---|---|
| `actions.it.com` | CNAME | `iron-kr.b-cdn.net` | ✅ |
| `*.actions.it.com` | CNAME | **`actions.b-cdn.net`** ⚠ dead | ✅ |
### anvil.it.com (9)
| Name | Type | Value | Proxied |
|---|---|---|---|
| `anvil.it.com` | CNAME | `iron-jp.b-cdn.net` | off |
| `*.anvil.it.com` | CNAME | `iron-jp.b-cdn.net` | off |
| `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건 | | | |
### inouter.com (32) — 핵심
| Name | Type | Value | Proxied | 메모 |
|---|---|---|---|---|
| `*.inouter.com` | CNAME | `k3s.inouter.com` | off | LAN 직통 (BunnyCDN 우회) |
| `k3s.inouter.com` | A | `192.168.9.53` | off | Traefik MetalLB VIP |
| `kr.inouter.com` | A | `220.120.65.245` | off | OpenWrt 공인 IP |
| `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 |
| `nas.inouter.com` | CNAME | **`actions.b-cdn.net`** ⚠ dead | off |
| `desk-api.inouter.com` | A | `172.233.93.180` | ✅ | osaka 직통, CF proxied |
| `sftp.inouter.com` | A | `220.120.65.245` | ✅ | OpenWrt 직통, CF proxied |
| `ironclad.jp.inouter.com` | A | **`10.19.228.193`** ⚠ | off | **사설 IP 공개 노출** |
| `k8s.jp.inouter.com` | A | **`10.253.103.124`** ⚠ | off | **사설 IP 공개 노출** |
| `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 |
| `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) | | | |
> **이전 메모(updated 2026-04-04)는 폐기**: jarvis/telegram-webhook/vault/n8n 이 `actions.b-cdn.net` 가리킨다는 기록은 dead 풀존을 가리키는 구식 정보. 실제 정본은 위 표와 같이 모두 `iron-kr.b-cdn.net`.
### ironclad.it.com (14)
| Name | Type | Value | Proxied |
|---|---|---|---|
| `ironclad.it.com` | A | `172.233.93.180` | ✅ |
| `*.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) 단독.
### keepanker.cv (3)
| Name | Type | Value | Proxied |
|---|---|---|---|
| `keepanker.cv` | CNAME | `f1aa79f2-….cfargotunnel.com` | ✅ |
| `*.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.
### servidor.it.com (0)
DNS 레코드 **없음**. zone 만 등록. 워커 라우트 + Turnstile 위젯은 살아있음 → 트래픽 자체가 불가능한데 보안 자원만 회전 중. zone 정리 또는 DNS 레코드 추가 결정 필요.
## Workers (9개)
| 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]] |
| **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 | (없음) | 〃 |
### 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 |
| anvil.it.com | `*anvil.it.com/*` | crowdsec-cloudflare-worker-bouncer |
| inouter.com | `*inouter.com/*` | crowdsec-cloudflare-worker-bouncer |
| 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 |
> Worker Custom Domains (계정 레벨): **0건**.
## Turnstile 위젯 (8개)
| Sitekey | 이름 | mode | 도메인 | 역할 |
|---|---|---|---|---|
| `0x4AAAAAABvmO8BKc1ss5d-S` | `crowdsec-captcha` | managed | actions / anvil / charon.my / ironclad / keepanker / n8n.my / servidor / subin.my | multi-domain 운영용 (8 도메인). 2025-08-29 생성 |
| `0x4AAAAAACbmaudAjITah7y7` | `inouter` | managed | anvil.it.com **만** | 2026-02-13 생성. **이름과 도메인 불일치 → legacy/orphan 후보** |
| `0x4AAAAAAC2cnEA797HwesRX` | `crowdsec-cloudflare-worker-bouncer-widget` | managed | anvil.it.com | bouncer 자동 (168h rotation) |
| `0x4AAAAAAC2cnZzIyNRayTcG` | 〃 | managed | servidor.it.com | bouncer 자동 |
| `0x4AAAAAAC2cntUlRC3KKMKG` | 〃 | managed | inouter.com | bouncer 자동. **현재 BunnyCDN 미들웨어 64811 이 사용 중** |
| `0x4AAAAAAC2cn8bzKBex_ihU` | 〃 | managed | actions.it.com | bouncer 자동 |
| `0x4AAAAAAC2coNrK9rRq7S_b` | 〃 | managed | keepanker.cv | bouncer 자동 |
| `0x4AAAAAAC2coU0PB8O8oJqY` | 〃 | managed | ironclad.it.com | bouncer 자동 |
bouncer 자동 위젯 6개는 `cs-cf-worker-bouncer` 가 rotate. **수동 편집 금지** — 다음 rotate 때 덮어써짐.
## 특이사항
### Orphan / dead 자원
| 항목 | 내용 |
|---|---|
| **servidor.it.com zone** | DNS 레코드 0건. 워커 라우트 + Turnstile 위젯만 살아있음. 트래픽 불가능하나 168h 마다 위젯 회전. zone 정리 또는 DNS 추가 결정 필요. |
| **`nas.inouter.com → actions.b-cdn.net`** | 가리키는 풀존 `actions` (구 5330178) 가 현 계정에 없음. dead reference. |
| **`*.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 후보. |
### 사설 IP 공개 DNS 노출
| 레코드 | 값 |
|---|---|
| `ironclad.jp.inouter.com` | A `10.19.228.193` (사설망 10/8) |
| `k8s.jp.inouter.com` | A `10.253.103.124` (jp1 incus 사설 대역) |
→ 외부 해석은 가능하나 라우팅 불가. 정보 유출 정도의 리스크. Tailscale Magic DNS 또는 split-horizon 으로 옮기는 게 깔끔.
### CF proxy on/off 패턴 (중요)
- **inouter.com / anvil.it.com**: 거의 전부 `proxied: false` — CF 는 DNS 만, 트래픽은 BunnyCDN 또는 LAN 직통. CF Worker bouncer 라우트는 등록되었으나 **DNS 가 proxied=false 면 CF 엣지를 거치지 않음** → bouncer 무효.
- **actions.it.com / ironclad.it.com**: apex/wildcard 모두 `proxied: true` — CF Worker 효과적으로 enforce.
- **keepanker.cv**: CF Tunnel.
> **함의**: `inouter.com` / `anvil.it.com` 의 보호는 **BunnyCDN 미들웨어 64811 이 단독 책임**. CF Worker bouncer 는 라우트 등록 + Turnstile 위젯 회전만 하고 실제 enforcement 는 안 함. 의도된 design 인지 (BunnyCDN 우선) 또는 누락인지 결정 필요. design 이라면 inouter / anvil 의 CF Worker 라우트는 제거 가능.
### 정책 일관성
- iron-kr `IgnoreQueryStrings: true` vs iron-jp `IgnoreQueryStrings: false` — 같은 미들웨어 64811 공유인데 캐시 키 정책이 다름. iron-jp 트래픽이 미미해 영향 작지만 통일이 운영 단순화.
## cfb-manager (CrowdSec CF Worker bouncer 관리 API)
| 항목 | 값 |
|---|---|
| 위치 | 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 재생성) |
```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 을 보호 목록 동기화
```
> **BunnyCDN 미들웨어와는 무관**. BunnyCDN 미들웨어 64811 의 bloom filter 동기화는 jp1 `infra-tool` 컨테이너 `/opt/crowdsec-bouncer/bouncer.py` (3분 delta + 매시 full sync) 가 담당.
## 참조
- 전수 감사 정본 (대화 로그): Outline `agent-qna` doc `51b963c3-b251-48b5-a57a-a2305959c470` (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
## 관련 문서
- [[netbis]] — Netbis 계정 Cloudflare (별도)
- [[cf-multisite]] — `*.actions.it.com` 라우팅 워커
- [[crowdsec-safeline]] — CrowdSec CF Worker Bouncer 연동
- [[bunnycdn-security]] — BunnyCDN 엣지 보안