Files
obsidian/history/2026-04-26-bouncer-consolidation.md
kaffa 560dde3f88 cloudflare: Turnstile 위젯 6개 + Edge Script 64811 정리 추기
- Turnstile 4개 (cs-cf-worker-bouncer-widget): 삭제
- Turnstile inouter (legacy orphan): 삭제
- Turnstile inouter-bunny-middleware: 삭제 (BunnyCDN 미들웨어 64811과 함께)
- Edge Script 64811: DELETE /compute/script/64811 HTTP 204
  - 4개 풀존 (iron-jp/iron-kr/iron-kr-waf/iron-git) MiddlewareScriptId null 자동 정리 확인
- 보류: Turnstile crowdsec-captcha (8 도메인 사용처 추적 미완)
- bouncer 단일화 history에 Syn 회신 + Turnstile/Edge Script 추가 정리 결과 추기
2026-04-26 10:27:02 +09:00

125 lines
6.7 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
---
date: 2026-04-26
topic: CrowdSec bouncer 단일화 — netbis-cf-firewall만 유지, 나머지 3종 완전 제거
areas: [infra/security/crowdsec-safeline.md, infra/security/cloudflare.md, services/netbis.md]
tags: [crowdsec, bouncer, cloudflare, bunnycdn, apisix, simplification]
---
## 결정
CrowdSec LAPI 등록 4종 bouncer 중 `cs-cloudflare-bouncer-1777082222` (netbis-cf-firewall) 만 유지하고 나머지 3종 완전 제거.
| 보존 | 폐기 |
|---|---|
| `cs-cloudflare-bouncer-1777082222` (netbis-cf-firewall, 2026-04-25 재구축) | `cs-cf-worker-bouncer` (kappa CF Worker + KV + Turnstile×4) |
| | `apisix-waf-bouncer` (APISIX plugin 0.1) |
| | `bunny-cdn-bouncer` (BunnyCDN Edge Script 64811 bloom filter) |
이유 (kappa 지시):
- 운영 단순화 — 4종 bouncer 동시 관리 부담
- Worker bouncer 비용 + Turnstile 위젯 168h rotation 부담
- BunnyCDN Edge bloom filter 갱신 cron 의존성
- APISIX plugin 0.1 (오래된 패키지)
- netbis-cf-firewall은 origin filter `[crowdsec, cscli]` + Free CF 영역으로 비용 0, 단순
## 영향 (실행 전 사용자 확인 불필요로 진행)
- **enforce 사라진 영역**:
- kappa zone (keepanker.cv, actions.it.com, ironclad.it.com, servidor.it.com) CrowdSec ban → CF에서 관통
- BunnyCDN 풀존 iron-jp(5555247) / iron-kr(5555227) edge bouncer 차단 → 풀존 도착 트래픽이 origin까지 전달
- APISIX 인스턴스 chaitin-waf 보완용 IP ban (어느 인스턴스인지 Syn 확인) → SafeLine WAF만 유지
- **유지되는 enforce**:
- SafeLine WAF (chaitin-waf 플러그인, K3s safeline ns)
- APISIX limit-req
- netbis-cf-firewall (Netbis 6 zone CF Firewall Rule managed_challenge)
- BunnyCDN WAF (OWASP CRS) — bouncer와 별개
## 작업 분담 + 진행
### Heimdall 직접
| 단계 | 결과 |
|---|---|
| `incus stop+delete jp1:cs-cf-worker-bouncer` | ok, 컨테이너 사라짐 확인 |
| `jp1:infra-tool` cron `/etc/cron.d/crowdsec-bunny-bouncer` 삭제 | ok |
| `jp1:infra-tool` `/opt/crowdsec-bouncer/` 디렉토리 + bouncer.py 삭제 | ok |
| `pkill -9 -f bouncer.py` (잔존 프로세스) | ok |
| `cscli bouncers delete cs-cf-worker-bouncer` | deleted successfully |
| `cscli bouncers delete apisix-waf-bouncer` | deleted successfully |
| `cscli bouncers delete bunny-cdn-bouncer` | deleted successfully |
| LAPI 최종 상태 | `cs-cloudflare-bouncer-1777082222` 단일 |
### Syn 위임 (peer 통신, 동시 진행)
heimdall→syn tmux 메시지로 3건 위임:
1. **CF Worker (kappa account)** 정리 — Worker 스크립트 + KV namespace + Turnstile 위젯 4개 (`crowdsec-cloudflare-worker-bouncer-widget`, 적용 zone keepanker/actions/ironclad/servidor) 모두 삭제
2. **BunnyCDN Edge Script 64811** 정리 — iron-jp(5555247) + iron-kr(5555227) 두 풀존에서 `MiddlewareScriptId: 64811` 해제 + 스크립트 자체 삭제
3. **APISIX crowdsec-bouncer 플러그인** 비활성화 — apisix-osaka 추정 (헤임달 검증: K3s 서울 미사용, zlambda 미사용). plugin_metadata/crowdsec-bouncer 삭제 + 사용하는 route/global_rule plugins.crowdsec-bouncer 모두 제거 + config.yaml plugins 목록에서 crowdsec-bouncer 제거 (선택)
> **APISIX는 본래 Syn 영역**(CLAUDE.md 스코프) 이지만 kappa task 에서는 Heimdall 직접으로 명시되어 있었음. 실제로 apisix-osaka admin 권한이 Heimdall ops-agents 키로 없음 → Syn 위임이 자연스러움. 이 경계 deviation 은 작업 효율 우선으로 합리적 판단.
## Vault 시크릿 처리
- `secret/infra/crowdsec-bunny-bouncer`**보존** (별도 폐기 결정)
- `cs-cf-worker-bouncer` 관련 토큰 — **보존** (별도 폐기 결정)
- LAPI api-key 3종 — `cscli bouncers delete` 시점에 자동 무효화
## 검증
```bash
# LAPI bouncers list
incus exec jp1:crowdsec -- cscli bouncers list
# → cs-cloudflare-bouncer-1777082222 단일
# infra-tool cron 사라짐 확인
incus exec jp1:infra-tool -- ls /etc/cron.d/ | grep -i crowdsec
# → (empty)
# cs-cf-worker-bouncer 컨테이너 사라짐
incus list jp1: --all-projects | grep cs-cf-worker-bouncer
# → (empty)
```
### Syn 회신 (DONE 2026-04-26)
| 영역 | 결과 |
|---|---|
| CF Worker 스크립트 + KV namespace | 삭제 완료 |
| **CF Turnstile 위젯 4개** (`crowdsec-cloudflare-worker-bouncer-widget`) | Syn API 권한 부족으로 보류 → kappa가 `global_api_key`로 직접 삭제 (sitekey: `…N-HtUDFAaJ`/`…RrhJUQKfIF`/`…r02LA19njc7`/`…6l0x5reO6ZQ`) |
| BunnyCDN MiddlewareScriptId iron-jp/iron-kr 해제 | 완료 |
| BunnyCDN Edge Script 64811 자체 | Syn 보고 시 orphan 상태 → kappa가 `DELETE /compute/script/64811` HTTP 204로 삭제. iron-jp(5555247)/iron-kr(5555227)/iron-kr-waf(5555224)/iron-git(5584382) 모두 `MiddlewareScriptId: null` 자동 정리 확인 |
| APISIX(osaka) `crowdsec-bouncer` 플러그인 | global_rules + route `tg-webhook` + config.yaml에서 제거 + 재시작 완료 |
### Turnstile 위젯 추가 정리 (kappa, 2026-04-26)
bouncer 단일화 후속으로 같은 날 추가 폐기:
| Sitekey | Name | 폐기 사유 |
|---|---|---|
| `0x4AAAAAACbmaudAjITah7y7` | `inouter` | 이름·도메인 불일치 legacy orphan |
| `0x4AAAAAAC3otPWhldI96Aks` | `inouter-bunny-middleware` | BunnyCDN 미들웨어 64811 폐기와 함께 사용처 사라짐 |
CF Turnstile에 남은 위젯: `crowdsec-captcha` (`0x4AAAAAABvmO8BKc1ss5d-S`, 8 도메인). bouncer 외 사용처(charon.my / n8n.my / subin.my 등) 추적 미완 → 폐기 보류.
## 롤백
각 bouncer 재구성 절차 필요 시 이전 history 참조:
- cs-cf-worker-bouncer: 정본 `gitea.inouter.com/kaffa/k8s` `configs/crowdsec/crowdsec-cloudflare-worker-bouncer.yaml`
- bunny-cdn-bouncer: `gitea.inouter.com/kaffa/crowdsec-bunny-bouncer` (소스 보존)
- apisix-waf-bouncer: `crowdsec-bouncer.lua` 파일 + APISIX config.yaml plugins 등록 + plugin_metadata 설정
## 후속 과제
- [ ] Vault `secret/infra/crowdsec-bunny-bouncer` + cs-cf-worker-bouncer 관련 토큰 폐기 결정 (kappa)
- [ ] Vault `secret/cloud/cloudflare/turnstile-inouter-bunny` 폐기 (위젯 삭제됨)
- [ ] CrowdSec scenarios 다시 검토 — 일반 enforce 경로가 사라졌으니 시나리오 그룹화/조용화 가능
- [ ] kappa zone에 대한 대체 보호 검토 (필요 시 BunnyCDN WAF 강화 / CF Pro 플랜 활용 등)
- [ ] `crowdsec-captcha` Turnstile 위젯 8 도메인 사용처 추적 (charon.my / n8n.my / subin.my 등) → 폐기 가능 여부 결정
- [x] ~~Syn 회신 후 본 history에 CF Worker / KV / Turnstile / BunnyCDN Edge / APISIX plugin 정리 결과 추기~~ — 위 "Syn 회신" 절
## 관련 history
- [[2026-04-23-netbis-bouncer-removal|2026-04-23 Netbis 바운서 전량 제거]] (1차)
- [[2026-04-25-netbis-cf-firewall-rebuild|2026-04-25 netbis-cf-firewall 재구축]] (origin filter 적용)