--- 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 적용)