bouncer 단일화: netbis-cf-firewall만 유지, 나머지 3종(cs-cf-worker/apisix-waf/bunny-cdn) 폐기
This commit is contained in:
@@ -231,46 +231,16 @@ CrowdSec 공식 가이드 명시 사항 ([blog](https://www.crowdsec.net/blog/mi
|
||||
|
||||
## Bouncer
|
||||
|
||||
### cs-cf-worker-bouncer (Cloudflare Worker)
|
||||
> [!note] Bouncer 단일화 (2026-04-26)
|
||||
> CrowdSec bouncer를 `netbis-cf-firewall` 단일로 통합. 아래 ~~strikethrough~~ 항목 3종 (cs-cf-worker-bouncer / apisix-waf-bouncer / bunny-cdn-bouncer) 모두 폐기. 사유: 운영 단순화 + 비용 구조 비효율 + Worker bouncer Turnstile 위젯 168h rotation 부담. SafeLine WAF / APISIX limit-req / netbis-cf-firewall 보호는 그대로 유지.
|
||||
>
|
||||
> **사라진 enforce 영역**: kappa zone(keepanker.cv, actions.it.com, ironclad.it.com, servidor.it.com) CrowdSec ban / BunnyCDN 풀존(iron-jp, iron-kr) 엣지 차단 / APISIX 인스턴스 chaitin-waf 보완용 IP ban.
|
||||
>
|
||||
> 상세: [[../../history/2026-04-26-bouncer-consolidation|history]]
|
||||
|
||||
| 항목 | 값 |
|
||||
|------|-----|
|
||||
| 위치 | jp1 Incus `cs-cf-worker-bouncer` 컨테이너 |
|
||||
| 설정 | `/etc/crowdsec/bouncers/crowdsec-cloudflare-worker-bouncer.yaml` |
|
||||
| 정본 | `gitea.inouter.com/kaffa/k8s` → `configs/crowdsec/crowdsec-cloudflare-worker-bouncer.yaml` |
|
||||
| 동기화 | 10초 (decision stream polling) |
|
||||
| 방식 | LAPI → bouncer → Cloudflare Worker KV (bloom filter) → Worker에서 차단/captcha |
|
||||
| **액션 매핑** | `default_action: captcha` (Turnstile). LAPI decision type이 ban이든 captcha든 모두 Turnstile 페이지로 처리됨 |
|
||||
| 보호 zone | keepanker.cv, actions.it.com, ironclad.it.com, servidor.it.com |
|
||||
| 비보호 zone | inouter.com, anvil.it.com — DNS `proxied: false` 라 CF 엣지를 거치지 않아 bouncer 라우트가 enforce 되지 않음. 보호는 BunnyCDN 미들웨어 64811 단독 |
|
||||
| Turnstile 위젯 | 4개 bouncer-managed (`crowdsec-cloudflare-worker-bouncer-widget` 이름, 168h rotation). BunnyCDN 미들웨어용 `inouter-bunny-middleware` 는 별도 수동 관리 — [[cloudflare#Turnstile 위젯]] |
|
||||
| yaml writer | `cfb-manager` 단일 (K8s `default/cfb-manager` REST API). 과거 `/etc/cron.d/cf-zone-sync` + `auto-add-cf-zones.sh` 자동 쓰기는 coordination 문제로 제거됨 — 신규 zone 추가는 `cfb-manager POST /domains` 또는 수동 yaml edit + systemctl restart |
|
||||
### ~~cs-cf-worker-bouncer (Cloudflare Worker)~~ — 폐기 (2026-04-26)
|
||||
|
||||
#### Decision 수동 관리
|
||||
|
||||
bouncer의 `lapi_key`는 **읽기 전용**. decision 추가/삭제는 `crowdsec` 컨테이너에서 `cscli`로:
|
||||
|
||||
```bash
|
||||
# ban 추가
|
||||
ssh incus-jp1 "incus exec crowdsec -- cscli decisions add --ip 1.2.3.4 --duration 2m --reason 'manual ban' --type ban"
|
||||
|
||||
# 확인
|
||||
ssh incus-jp1 "incus exec crowdsec -- cscli decisions list --ip 1.2.3.4"
|
||||
|
||||
# 삭제
|
||||
ssh incus-jp1 "incus exec crowdsec -- cscli decisions delete --ip 1.2.3.4"
|
||||
```
|
||||
|
||||
bouncer 컨테이너에서 `curl POST /v1/decisions`로 직접 넣으면 등록 안 됨 — API 키 권한 제한.
|
||||
|
||||
#### 설정 변경 시 주의
|
||||
|
||||
**`sed -i` 사용 금지** — Incus 컨테이너 내에서 `sed -i`로 수정 시 이전 내용이 파일 끝에 남아 YAML 깨짐. 반드시 전체 파일 덮어쓰기:
|
||||
|
||||
```bash
|
||||
cat updated-config.yaml | ssh incus-jp1 "incus file push - cs-cf-worker-bouncer/etc/crowdsec/bouncers/crowdsec-cloudflare-worker-bouncer.yaml"
|
||||
ssh incus-jp1 "incus exec cs-cf-worker-bouncer -- systemctl restart crowdsec-cloudflare-worker-bouncer"
|
||||
```
|
||||
[[../../history/2026-04-26-bouncer-consolidation|history]] 참조. jp1 incus `cs-cf-worker-bouncer` 컨테이너 + 설정 파일 + LAPI 등록 모두 제거. CF Worker 스크립트 / KV namespace / Turnstile 위젯 4개 (`crowdsec-cloudflare-worker-bouncer-widget`)는 Syn에 위임 정리.
|
||||
|
||||
> **Netbis CF 바운서 (2026-04-23 폐기 → 2026-04-25 Firewall Rule 단독 재구축)**
|
||||
>
|
||||
@@ -301,31 +271,24 @@ ssh incus-jp1 "incus exec cs-cf-worker-bouncer -- systemctl restart crowdsec-clo
|
||||
|
||||
cs-cf-worker-bouncer (kappa 계정용)는 별도 컨테이너에서 그대로 운영. netbis는 비용 구조 차이로 firewall bouncer만 사용.
|
||||
|
||||
### bunny-cdn-bouncer (BunnyCDN Edge Script)
|
||||
### ~~bunny-cdn-bouncer (BunnyCDN Edge Script)~~ — 폐기 (2026-04-26)
|
||||
|
||||
| 항목 | 값 |
|
||||
|------|-----|
|
||||
| 동기화 | jp1 `infra-tool` 컨테이너, `/opt/crowdsec-bouncer/bouncer.py` |
|
||||
| 크론 | 3분 delta sync, 매시 full sync |
|
||||
| 방식 | 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-kr (5555227) — 두 풀존 모두 `MiddlewareScriptId: 64811` |
|
||||
| API 키 | Vault `secret/infra/crowdsec-bunny-bouncer` |
|
||||
| 소스 | `~/crowdsec-bunny-bouncer/` |
|
||||
[[../../history/2026-04-26-bouncer-consolidation|history]] 참조. jp1 `infra-tool` 컨테이너 cron + `/opt/crowdsec-bouncer/bouncer.py` 제거. LAPI 등록 삭제. BunnyCDN Edge Script 64811 (`crowdsec-bouncer-middleware`) 두 풀존(iron-jp 5555247 / iron-kr 5555227) middleware 해제 + 스크립트 삭제는 Syn 위임. Vault `secret/infra/crowdsec-bunny-bouncer` 시크릿 보존(별도 폐기 결정).
|
||||
|
||||
## 보안 구조
|
||||
### ~~apisix-waf-bouncer (APISIX plugin)~~ — 폐기 (2026-04-26)
|
||||
|
||||
`apisix-plugin-crowdsec-bouncer 0.1` — APISIX 인스턴스(가능성: apisix-osaka)의 chaitin-waf 보완용 IP ban 플러그인. LAPI 등록 삭제 완료. APISIX plugin 비활성화 + plugin_metadata/route 정리는 Syn 위임. K3s 서울 / zlambda APISIX 는 미사용 확인 완료. 상세: [[../../history/2026-04-26-bouncer-consolidation|history]]
|
||||
|
||||
## 보안 구조 (2026-04-26 bouncer 단일화 이후)
|
||||
|
||||
```
|
||||
클라이언트 → BunnyCDN Edge Script (CrowdSec bouncer, 0차)
|
||||
→ BunnyCDN WAF (OWASP CRS, 1차)
|
||||
클라이언트 → BunnyCDN WAF (OWASP CRS, 1차) — 일반 도메인 경로
|
||||
→ Traefik / APISIX + SafeLine WAF (2차)
|
||||
→ CrowdSec 로그 분석 (3차) → bouncer 피드백 루프
|
||||
```
|
||||
→ CrowdSec 로그 분석 (3차) → netbis-cf-firewall (Netbis 6 zone CF Firewall Rule 피드백 루프)
|
||||
|
||||
### 0차: BunnyCDN Edge Script (CrowdSec bouncer)
|
||||
- Bloom filter로 악성 IP 즉시 차단
|
||||
- false positive 시 Turnstile CAPTCHA로 구제
|
||||
netbis 전용 enforce: CF Account IP List + 6 zone Firewall Rule managed_challenge (netbis-cf-firewall)
|
||||
일반 zone enforce 사라짐 — kappa zone CrowdSec ban 미적용. BunnyCDN Edge bouncer / Worker bouncer / APISIX bouncer 모두 폐기 (2026-04-26)
|
||||
```
|
||||
|
||||
### 1차: BunnyCDN WAF (OWASP CRS)
|
||||
- CDN 에지에서 오리진 도달 전 차단
|
||||
|
||||
Reference in New Issue
Block a user