2.2 KiB
2.2 KiB
title, updated, tags
| title | updated | tags | |||||
|---|---|---|---|---|---|---|---|
| BunnyCDN 엣지 보안 (CrowdSec + 국가 차단) | 2026-03-23 |
|
구성
- 엣지 스크립트:
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 시 캡차/차단
관련 문서
- bunnycdn — BunnyCDN API 레퍼런스
- crowdsec-safeline — CrowdSec 및 SafeLine WAF 설정
- cloudflare — Cloudflare DNS/CDN (Turnstile 캡차 키 관리)