edge: 풀존 매핑 정합성 (2026-04-09 API 실측 반영)

- iron-kr 호스트 7개 (사용자 6 + 시스템 1) 명시. gitea.inouter.com 제거 (iron-git 분리됨), outline.inouter.com 추가
- iron-jp 호스트 5개 정정 (anvil.it.com 계열, 옛 inouter.com 표기 제거)
- 옛 풀존 ID 5316471/5330178/5554681 → iron-kr/iron-jp/iron-kr-waf 통합 메모
- Edge Script 64811 attach: iron-kr + iron-jp 두 풀존 모두 (단일 아님)
- iron-kr-waf 섹션을 waf-kr 에서 재명명, 새 경로 표기
This commit is contained in:
Syn
2026-04-09 21:05:34 +09:00
parent fa174b75ab
commit ae696f3e33
3 changed files with 42 additions and 27 deletions

View File

@@ -36,7 +36,7 @@ updated: 2026-04-04
### 오사카 (apisix-osaka)
```
BunnyCDN(inouter, ID 5316471) → apisix-osaka(172.233.93.180) → 백엔드
BunnyCDN(iron-jp, ID 5555247) → apisix-osaka(172.233.93.180) → 백엔드
```
- 용도: Ironclad 인프라 서비스 (ironclad.it.com, n8n, twilio 등)
- Docker: APISIX 3.15.0 (waf-apisix) + etcd v3.5.11 (waf-etcd)
@@ -205,16 +205,22 @@ etcd:
- 이전 후 ingress controller는 자동으로 모든 K8s CRD 객체를 새 etcd에 재push (rollout restart로 즉시 동기화 가능)
- 외부 통합 etcd의 stale `/apisix/seoul/*` 키는 수동 삭제 (postgresql-ha.md의 etcd cleanup 명령 참고)
### BunnyCDN Pull Zone 매핑
### BunnyCDN Pull Zone 매핑 (2026-04-09 API 실측)
| Zone | ID | Origin | 방향 | 주요 Hostnames |
| Zone | ID | Origin | 방향 | Hostnames (전수) |
|---|---|---|---|---|
| iron-jp | 5555247 | 172.233.93.180 | → 오사카 | inouter.com, n8n.inouter.com, tg.inouter.com, linode.actions.it.com |
| iron-kr | 5555227 | 220.120.65.245 | → 서울 (Traefik) | actions.it.com, gitea.inouter.com, n8n.inouter.com, jarvis.inouter.com, telegram-webhook.inouter.com, vault.inouter.com |
| iron-kr-waf | 5555224 | 220.120.65.245:9443 | → 서울 (APISIX WAF) | juiceshop.keepanker.cv |
| iron-kr | 5555227 | 220.120.65.245 | → 서울 (OpenWrt → Traefik) | `iron-kr.b-cdn.net`, actions.it.com, n8n.inouter.com, jarvis.inouter.com, telegram-webhook.inouter.com, vault.inouter.com, outline.inouter.com (사용자 6 + 시스템 1 = 7) |
| iron-jp | 5555247 | 172.233.93.180 | → 오사카 (osaka-gw APISIX) | `iron-jp.b-cdn.net`, anvil.it.com, n8n.anvil.it.com, tg.anvil.it.com, linode.actions.it.com (사용자 4 + 시스템 1 = 5) |
| iron-kr-waf | 5555224 | 220.120.65.245:9443 | → 서울 (HAProxy :9443 → K3s APISIX SafeLine WAF) | `iron-kr-waf.b-cdn.net`, juiceshop.keepanker.cv |
| iron-git | 5584382 | 220.120.65.245 | → 서울 (gitea, **미들웨어 미장착**) | `iron-git.b-cdn.net`, gitea.inouter.com |
| i-gate | 5557897 | 172.233.93.180 | (미사용 슬롯) | `i-gate.b-cdn.net` |
참고: iron-kr zone은 `DisableCookies: false` (쿠키 허용). Gitea 웹 로그인 세션에 필요.
Edge Script: iron-jp, iron-kr에 CrowdSec bouncer middleware (ID 64811) 연결.
참고:
- iron-kr `IgnoreQueryStrings: true` / iron-jp `IgnoreQueryStrings: false` — 동일 미들웨어 풀존이지만 캐시 키 정책이 다름
- iron-kr / iron-jp `BlockNoneReferrer: true`, iron-git 는 `false` (git smart HTTP 호환)
- 모든 zone `EdgeRules: []` (Edge Rules 미사용, 모든 분기는 미들웨어 64811 안)
- Edge Script 64811 `crowdsec-bouncer-middleware` 는 **iron-jp + iron-kr 두 풀존**에만 attach. iron-git 은 의도적 우회 (git pack 바이너리 보호 불가).
- gitea.inouter.com 은 더 이상 iron-kr 가 아니라 iron-git 풀존 소속 (분리됨)
### DNS 참고

View File

@@ -242,7 +242,7 @@ Kappa 계정용 `cs-cf-worker-bouncer`와 별도 컨테이너로 분리 운영.
| 방식 | LAPI → Bloom filter → BunnyCDN Edge Script 임베딩 → 퍼블리시 |
| Edge Script | ID 64811 (`crowdsec-bouncer-middleware`), FNV-1a bloom filter |
| 차단 시 | Cloudflare Turnstile CAPTCHA + LibSQL verified IP 캐싱(4h) |
| 적용 풀존 | iron-jp (5555247) |
| 적용 풀존 | iron-jp (5555247), iron-kr (5555227) — 두 풀존 모두 `MiddlewareScriptId: 64811` (2026-04-09 실측) |
| API 키 | Vault `secret/infra/crowdsec-bunny-bouncer` |
| 소스 | `~/crowdsec-bunny-bouncer/` |
@@ -277,18 +277,20 @@ Kappa 계정용 `cs-cf-worker-bouncer`와 별도 컨테이너로 분리 운영.
- APISIX 로그: http-logger → `:8085``custom/apisix-json-logs`
- HTTP 시나리오 매칭 → decision → bouncer 피드백
## waf-kr BunnyCDN Pull Zone
## iron-kr-waf BunnyCDN Pull Zone (구 waf-kr)
APISIX SafeLine WAF 전용.
| 항목 | 값 |
|------|-----|
| Zone ID | 5554681 |
| Name | waf-kr |
| Zone ID | 5555224 |
| Name | iron-kr-waf |
| Origin | https://220.120.65.245:9443 |
| 경로 | 인터넷 → BunnyCDN(waf-kr) → HAProxy(:9443) → APISIX(31137) → SafeLine → K3s |
| 경로 | 인터넷 → BunnyCDN(iron-kr-waf) → OpenWrt HAProxy(:9443) → MetalLB 192.168.9.50:443 → APISIX(K3s 서울) → chaitin-waf → SafeLine detector → K3s svc |
등록 호스트: `juiceshop.keepanker.cv` (WAF 테스트용)
등록 호스트: `iron-kr-waf.b-cdn.net`, `juiceshop.keepanker.cv` (WAF 테스트용). ApisixRoute `juiceshop` (chaitin-waf block) → juiceshop:3000.
> 옛 메모의 `waf-kr (5554681)` 는 더 이상 존재하지 않음 — `iron-kr-waf (5555224)` 로 통합·재명명됨.
## 참고

View File

@@ -1,15 +1,18 @@
---
title: BunnyCDN 엣지 보안 (CrowdSec + 국가 차단)
updated: 2026-03-23
updated: 2026-04-09
tags: [cdn, bunnycdn, security, crowdsec, edge-script]
---
## 구성
- 엣지 스크립트: `crowdsec-bouncer-middleware` (ID: 64811)
- 연결된 Pull Zone: inouter (5316471), actions (5330178)
- 관리: cfb-manager (K3s tools ns)
- 소스: [[crowdsec-safeline|CrowdSec]] bloom filter + Cloudflare Turnstile 캡차
- 엣지 스크립트: `crowdsec-bouncer-middleware` (ID: 64811, ScriptType=2 Middleware)
- **연결된 Pull Zone (2026-04-09 실측)**: **iron-kr (5555227)**, **iron-jp (5555247)**`MiddlewareScriptId: 64811`. 두 풀존 모두 동일 미들웨어 공유.
- 미장착 풀존: iron-git (5584382, gitea.inouter.com), iron-kr-waf (5555224, SafeLine 자체 보호), i-gate (5557897, 미사용)
- 관리·동기화: jp1 `infra-tool` 컨테이너 `/opt/crowdsec-bouncer/bouncer.py` (3분 delta + 매시 full sync). cfb-manager 는 **Cloudflare Worker** bouncer 관리이며 BunnyCDN 미들웨어와 무관.
- 소스: [[crowdsec-safeline|CrowdSec]] bloom filter (FNV-1a 임베디드 BLOOM_B64) + Cloudflare Turnstile 캡차
> 옛 메모의 풀존 ID `5316471 (inouter)`, `5330178 (actions)`, `5554681 (waf-kr)` 는 현 계정에 더 이상 존재하지 않음. iron-kr / iron-jp / iron-kr-waf 로 통합·이전됨.
## 동작 순서
@@ -38,16 +41,20 @@ US, CA, GB, DE, FR, IT, ES, NL, BE, AT, CH, SE, NO, DK, FI, PL, CZ, PT, IE, RO,
- 엣지 스크립트의 국가 차단은 `Cdn-RequestCountryCode` 헤더 기반 → CDN 내부 요청(Let's Encrypt, Origin Shield)에는 이 헤더가 없으므로 영향 없음
- Free SSL 자동 발급/갱신 정상 동작
## Pull Zone 설정
## Pull Zone 설정 (2026-04-09)
| Pull Zone | Origin | 비고 |
|-----------|--------|------|
| inouter (5316471) | https://172.233.93.180 (오사카) | |
| actions (5330178) | https://220.120.65.245 (서울) | |
| Pull Zone | ID | Origin | 호스트 수 | 비고 |
|-----------|----|--------|----------|------|
| iron-kr | 5555227 | https://220.120.65.245 (서울) | 사용자 6 + 시스템 1 | actions.it.com / outline / vault / n8n / jarvis / telegram-webhook + iron-kr.b-cdn.net. `IgnoreQueryStrings: true` |
| iron-jp | 5555247 | https://172.233.93.180 (오사카) | 사용자 4 + 시스템 1 | anvil.it.com / n8n.anvil / tg.anvil / linode.actions + iron-jp.b-cdn.net. `IgnoreQueryStrings: false` |
- VerifyOriginSSL: false
- BlockedCountries: 비어있음 (엣지 스크립트에서 처리)
- Origin Shield: 비활성화
공통:
- `VerifyOriginSSL: false`
- `BlockedCountries: []` (엣지 스크립트에서 헤더 기반 처리)
- `EnableOriginShield: false`
- `BlockNoneReferrer: true`
- `MiddlewareScriptId: 64811`
- `EdgeRules: []` (Edge Rules 미사용 — 모든 분기는 미들웨어 코드 안)
## CrowdSec Bouncer 구조