Files
obsidian/services/bunnycdn-security.md

2.2 KiB

title, updated, tags
title updated tags
BunnyCDN 엣지 보안 (CrowdSec + 국가 차단) 2026-03-23
cdn
bunnycdn
security
crowdsec
edge-script

구성

  • 엣지 스크립트: crowdsec-bouncer-middleware (ID: 64811)
  • 연결된 Pull Zone: inouter (5316471), actions (5330178)
  • 관리: cfb-manager (K3s tools ns)
  • 소스: crowdsec-safeline bloom filter + Cloudflare Turnstile 캡차

동작 순서

요청 → 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 설정

Pull Zone Origin 비고
inouter (5316471) https://172.233.93.180 (오사카)
actions (5330178) https://220.120.65.245 (서울)
  • VerifyOriginSSL: false
  • BlockedCountries: 비어있음 (엣지 스크립트에서 처리)
  • Origin Shield: 비활성화

CrowdSec Bouncer 구조

CrowdSec (jp1 Incus) → 악성 IP 탐지
    ↓
cfb-manager (K3s tools ns) → bloom filter 생성 → BunnyCDN API로 엣지 스크립트 코드에 삽입
    ↓
엣지 스크립트 → 요청 IP를 bloom filter로 체크 → hit 시 캡차/차단

관련 문서