--- title: BunnyCDN 엣지 보안 (CrowdSec + 국가 차단) updated: 2026-04-09 tags: [cdn, bunnycdn, security, crowdsec, edge-script] --- ## 구성 - 엣지 스크립트: `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 로 통합·이전됨. ## 동작 순서 ``` 요청 → BunnyCDN 엣지 1. 국가 차단 (Cdn-RequestCountryCode 헤더) - 차단 시 403 반환 2. CrowdSec bloom filter (악성 IP 판별) - bloom filter hit → 캡차 또는 403 - cfb-manager가 주기적으로 bloom filter 업데이트 3. 캡차 (Cloudflare Turnstile) - bloom hit된 IP에게 캡차 제시 - 통과 시 4시간 허용 (DB + 쿠키) 4. 정상 → Origin으로 전달 ``` ## 차단 국가 US, CA, GB, DE, FR, IT, ES, NL, BE, AT, CH, SE, NO, DK, FI, PL, CZ, PT, IE, RO, HU, BG, HR, SK, SI, LT, LV, EE, LU, MT, CY, GR, IS, UA, RU, BY (북미 + 유럽 + 구소련) ## 주의사항 - **BunnyCDN Traffic Manager 국가 차단은 사용하지 않음** — Let's Encrypt 검증 및 Origin Shield fetch를 막아서 Free SSL 발급 실패 + 500 에러 유발 - 엣지 스크립트의 국가 차단은 `Cdn-RequestCountryCode` 헤더 기반 → CDN 내부 요청(Let's Encrypt, Origin Shield)에는 이 헤더가 없으므로 영향 없음 - Free SSL 자동 발급/갱신 정상 동작 ## Pull Zone 설정 (2026-04-09) | 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: []` (엣지 스크립트에서 헤더 기반 처리) - `EnableOriginShield: false` - `BlockNoneReferrer: true` - `MiddlewareScriptId: 64811` - `EdgeRules: []` (Edge Rules 미사용 — 모든 분기는 미들웨어 코드 안) ## CrowdSec Bouncer 구조 ``` CrowdSec (jp1 Incus) → 악성 IP 탐지 ↓ cfb-manager (K3s tools ns) → bloom filter 생성 → BunnyCDN API로 엣지 스크립트 코드에 삽입 ↓ 엣지 스크립트 → 요청 IP를 bloom filter로 체크 → hit 시 캡차/차단 ``` ## 관련 문서 - [[bunnycdn]] — BunnyCDN API 레퍼런스 - [[crowdsec-safeline]] — CrowdSec 및 SafeLine WAF 설정 - [[cloudflare]] — Cloudflare DNS/CDN (Turnstile 캡차 키 관리)