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:
@@ -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 참고
|
||||
|
||||
|
||||
@@ -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)` 로 통합·재명명됨.
|
||||
|
||||
## 참고
|
||||
|
||||
|
||||
@@ -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 구조
|
||||
|
||||
|
||||
Reference in New Issue
Block a user