Files
obsidian/history/2026-04-23-netbis-bouncer-removal.md

5.4 KiB
Raw Permalink Blame History

date, topic, areas, tags
date topic areas tags
2026-04-23 Netbis CF 바운서 전량 제거
infra/security/crowdsec-safeline.md
services/netbis.md
infra/security/cloudflare.md
crowdsec
cloudflare
netbis
removal
cost-control

배경

같은 날 2026-04-23-netbis-firewall-bouncer-migration 직후 재평가 → 두 바운서 모두 제거 결정.

재평가 핵심

  • Worker Bouncer (netbis-cf): KV.get 구조. 2026-04 청구서 $100 중 82%가 KV read 오버. Worker 실행 자체가 과금 유발
  • Firewall Rule Bouncer (netbis-cf-firewall): CF Rule List 용량 10,000 (Pro). LAPI 전체 decision ~29k 중 67% 초과분은 CF에 동기화 불가. 우선순위 선별이지만 실제 공격자 IP 누락 가능성 + CF API rate limit(10040) 만성
  • 결론: 두 방식 모두 현재 Netbis 트래픽 규모와 비용 모델에 적합하지 않음. 더 적절한 방어 수단 재설계 필요 (후속 과제)

제거 범위

netbis-cf-firewall (Firewall Rule Bouncer)

리소스 상태
systemd service crowdsec-cloudflare-bouncer.service disable + stop
패키지 crowdsec-cloudflare-bouncer (0.3.0) apt purge
LAPI bouncer 엔트리 netbis-cf-firewall cscli bouncers delete
CF Rule List crowdsec_block (id b14745a3306a4f81b46d96593135f78b, 10,000 items) DELETE
CF Firewall Rules (6 zones) + companion filters 각 zone DELETE
CF scoped API token crowdsec-cloudflare-bouncer-netbis (id 2196850b050493d01e0ab9ec0cde3e15) DELETE
Vault secret/cloud/cloudflare-netbis api_token 필드 kappa 경유 제거 예정

netbis-cf (Worker Bouncer)

리소스 상태
systemd service crowdsec-cloudflare-worker-bouncer.service disable + stop
패키지 crowdsec-cloudflare-worker-bouncer (0.0.14) apt purge
LAPI bouncer 엔트리 netbis-cf cscli bouncers delete
CF Worker Script crowdsec-cloudflare-worker-bouncer DELETE
CF KV Namespace CROWDSECCFBOUNCERNS (id 8cb07c1cb7784a4ca533f319bf66aa64) DELETE
CF Worker Routes (6 zones, pattern *<zone>/*) 각 zone DELETE
CF Turnstile widgets (6개 crowdsec-cloudflare-worker-bouncer-widget) DELETE
CF User API Token crowdsec-cf-bouncer-netbis (cfut_239XYQ...cf7c816, id d06694e98a2e58bfe9e0c338711b3aba) DELETE

컨테이너 자체

리소스 상태
jp1 Incus 컨테이너 netbis-cf-bouncer (10.253.103.33) incus delete --force
OpenTofu 정의 탐색 결과 없음 (heimdall ~/kaffa/ops-agents-tofu/, kappa Mac 모두 미발견). destroy 대상 없음

6개 보호 zone (변경 영향)

fall-vip.com, fall-mvp.com, fall-vip7.com, psd777.com, rss-555.com, rss-7790.com — CrowdSec 기반 CF 엣지 차단 일시 해제. 다른 계층(SafeLine WAF, BunnyCDN middleware 등)이 있다면 그쪽은 무변경.

실행 순서

1. systemctl disable --now crowdsec-cloudflare-bouncer crowdsec-cloudflare-worker-bouncer   (jp1:netbis-cf-bouncer)
2. cscli bouncers delete netbis-cf-firewall netbis-cf                                        (jp1:crowdsec)
3. apt purge crowdsec-cloudflare-bouncer crowdsec-cloudflare-worker-bouncer                  (jp1:netbis-cf-bouncer)
4. CF API (cfut token): Worker Routes × 6 DELETE → Worker Script DELETE → KV Namespace DELETE → Turnstile widgets × 6 DELETE
5. CF API (global_api_key): Firewall Rules × 6 DELETE + Filters × 6 DELETE → IP List DELETE → scoped api_token DELETE → cfut User Token DELETE
6. 컨테이너 내부 잔존 config 백업·log shred → /etc/crowdsec 삭제 → systemctl reset-failed
7. incus delete --force jp1:netbis-cf-bouncer
8. tmux → kappa: Vault api_token 필드 제거 요청 (global_api_key/email/account_id 보존)

검증

제거 후 CF 상태 (global_api_key X-Auth 조회):

지표
Netbis Workers Scripts 0
Netbis KV Namespaces 0
6 zones Worker Routes 0 각각
6 zones CrowdSec firewall rules 0 각각
crowdsec* IP Lists 0
bouncer* Turnstile widgets 0
scoped api_token verify Invalid API Token
cfut User Token verify Invalid API Token

LAPI (jp1:crowdsec):

cscli bouncers list  # netbis-cf, netbis-cf-firewall 둘 다 없음

Incus (jp1):

incus list --all-projects jp1: | grep netbis  # (empty)

롤백 불가 영역

  • 제거된 API 토큰 2개: 값 복구 불가. 필요시 global_api_key로 재발급
  • 삭제된 IP List의 10,000 IP 항목: 재생성 시 LAPI에서 다시 sync (바운서 재설치 필요)
  • 삭제된 Turnstile widgets: secret key 포함 완전 파기. 재설치 시 새 widget/secret 발급
  • Worker Script/KV: 재배포로 재생성 가능

후속 과제

  • Vault secret/cloud/cloudflare-netbisapi_token 필드 제거 — kappa 경유 (다른 필드 보존)
  • Netbis 방어 수단 재설계: CF 비용 + 차단 범위 트레이드오프 분석 후 대체 구조 결정 (예: BunnyCDN Edge + SafeLine WAF 조합, CrowdSec → CF Account Rule Lists 단독, CF Custom Ruleset 등)
  • 2026-05 CF 청구서에서 Netbis 요금 감소 확인 (Worker 호출 0 + KV read 0 예상)

관련 문서