Files
obsidian/services/bunnycdn-security.md
Syn ae696f3e33 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 에서 재명명, 새 경로 표기
2026-04-09 21:05:34 +09:00

3.3 KiB

title, updated, tags
title updated tags
BunnyCDN 엣지 보안 (CrowdSec + 국가 차단) 2026-04-09
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 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 시 캡차/차단

관련 문서