114 lines
5.4 KiB
Markdown
114 lines
5.4 KiB
Markdown
---
|
||
date: 2026-04-23
|
||
topic: Netbis CF 바운서 전량 제거
|
||
areas: [infra/security/crowdsec-safeline.md, services/netbis.md, infra/security/cloudflare.md]
|
||
tags: [crowdsec, cloudflare, netbis, removal, cost-control]
|
||
---
|
||
|
||
## 배경
|
||
|
||
같은 날 [[2026-04-23-netbis-firewall-bouncer-migration|Firewall Rule 바운서 병행 도입]] 직후 재평가 → **두 바운서 모두 제거 결정**.
|
||
|
||
### 재평가 핵심
|
||
|
||
- **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-netbis`의 `api_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 예상)
|
||
|
||
## 관련 문서
|
||
|
||
- [[../infra/security/crowdsec-safeline|crowdsec-safeline]] (섹션 2개 제거됨)
|
||
- [[2026-04-23-netbis-firewall-bouncer-migration|이전 history: Firewall Bouncer 도입]] (같은 날, 역전)
|
||
- [[../services/netbis|netbis]] (방어 구조 재설계 대상)
|