edge: cf-audit-cleanup-2 3차 인시던트 (cron-induced crashloop) + kappa 직접 복구 반영
This commit is contained in:
@@ -1,6 +1,6 @@
|
||||
---
|
||||
title: CrowdSec 및 SafeLine WAF
|
||||
updated: 2026-04-04
|
||||
updated: 2026-04-10
|
||||
---
|
||||
|
||||
## CrowdSec LAPI
|
||||
@@ -163,6 +163,7 @@ ddos-detect AI 분석기 폐기 후 deterministic 패턴 매칭으로 대체.
|
||||
- **2026-04-09 조정**: `high-rate-per-ip` 초기값(capacity 200, leakspeed 300ms) 사용 중 kappa 본인 트래픽이 지속 ≈3.3 req/s 한도를 넘어 오탐 ban 발생 → BunnyCDN 엣지 미들웨어가 캡챠 페이지 반환 → **POST /__captcha/verify 가 BunnyCDN 미들웨어에서 미처리 상태로 origin까지 흘러 404 반환하는 dead-end 버그**와 결합되어 outline/vault/n8n/jarvis/telegram-webhook/actions 전 호스트 접근 불가. 조치: (1) cscli로 ban decision 삭제 + BunnyCDN zone 캐시 퍼지, (2) 시나리오 완화 capacity 200→1000, leakspeed 300ms→100ms (sustained 10 req/s 허용), (3) **BunnyCDN 엣지 스크립트 64811 middleware.ts 수정** — `/__captcha/verify` 라우트를 `isBlocked` 블록 밖으로 끌어올려 bloom filter 업데이트 race와 무관하게 항상 인터셉트하도록 변경. POST는 handleCaptchaVerify, 그 외(method/ip 없음)는 302 to `/`. 소스: [gitea 7da39b2ac](https://gitea.inouter.com/kaffa/crowdsec-bunny-bouncer/commit/7da39b2acb91f5dd65e63b0ec078d37259bb2950).
|
||||
- **2026-04-09 별건**: `cs-cf-worker-bouncer.yaml` line 68-78 (anvil.it.com 블록) 들여쓰기 12칸 오타로 5일간 42,593회 systemd crash loop, Cloudflare Worker KV 동기화 중단. sed로 인덴트 4칸으로 정정, 5일 만에 정상 기동. 별건: K8s `default/cfb-ssh-key` 시크릿의 id_rsa 데이터가 libcrypto parse 실패 상태라 `cfb-manager` → `cs-cf-worker-bouncer` SSH 인증 불가, `/domains` `/status` API가 500 반환. 새 ed25519 키페어 생성·시크릿 교체·authorized_keys 등록·파드 재시작으로 복구.
|
||||
- **2026-04-09 Turnstile sitekey 교체**: BunnyCDN 엣지 스크립트 64811의 `TURNSTILE_SITE_KEY` env 변수가 `0x4AAAAAACbmaudAjITah7y7` (name `inouter`, allowed domain `['anvil.it.com']`)로 설정되어 있어 outline.inouter.com에서 Turnstile 위젯이 "웹 사이트에 연결할 수 없음" 에러. cs-cf-worker-bouncer가 managed 모드로 자동 생성한 `inouter.com` zone 위젯(`0x4AAAAAAC2cntUlRC3KKMKG`, secret `0x4AAAAAAC2cnp9fkaIBt3rixDBalNKfLZQ`)으로 교체. **Turnstile managed 위젯은 zone apex 도메인으로 등록해도 서브도메인을 암묵 허용함**이 확인됨 (outline.inouter.com 정상 동작). 단, iron-kr 풀존에는 `actions.it.com`·`iron-kr.b-cdn.net`도 포함되는데 이들은 inouter.com zone 외부라 캡챠 위젯 로드 불가. iron-jp 풀존(anvil.it.com 등)도 동일 제약. **TODO**: 스크립트를 수정해 `request.hostname`에 따라 zone별 sitekey/secret을 dispatch하거나, CF 대시보드에서 multi-domain 위젯 하나로 통합.
|
||||
- **2026-04-10 cf-audit-cleanup-2 인시던트 (3-incident chain)**: ① Syn 가 cfb-manager API 로 inouter/anvil 를 bouncer 관리에서 제외 시도. cfb-manager 의 DELETE 가 단순 config 항목 제거가 아니라 bouncer restart + destructive widget cleanup 을 트리거 → BunnyCDN 미들웨어 64811 이 baked-in 사용 중이던 inouter Turnstile 위젯 `0x4AAAAAAC2cntUlRC3KKMKG` 가 함께 삭제 (잠재 버그, ban 발동 시 캡차 깨짐). ② kappa 가 jp1 cs-cf-worker-bouncer 의 CF 토큰 (`seUKZID4...`, Turnstile R+W) 을 일시 차용해 새 위젯 `inouter-bunny-middleware` (`0x4AAAAAAC3otPWhldI96Aks`) 직접 생성, Vault `secret/cloud/cloudflare/turnstile-inouter-bunny` 보관, Syn 가 미들웨어 64811 env 갱신 + publish. ③ Syn 의 yaml 수동 fix 가 disk 에 반영되지 않아 (또는 반영 직후 원복) bouncer 가 깨진 yaml 로 crashloop, 4개 zone (keepanker/actions/ironclad/servidor) 의 Worker route 와 widget 도 함께 사라져 CF Worker enforcement 다운. 근본 원인: `/etc/cron.d/cf-zone-sync` 의 `auto-add-cf-zones.sh` 가 매 10분마다 CF API 의 zone 목록을 yaml 에 자동 추가하는데 추가 indent 가 12-space 로 잘못되어 yaml 파괴. 복구: kappa 가 cron 파일을 `cf-zone-sync.disabled.kappa-incident-20260410` 로 rename, yaml 을 `bak.20260410004004` 클린 백업으로 복원, bouncer 재기동 → 4개 zone widget/route 자동 재생성 확인. **결론: cfb-manager API 의 DELETE 는 destructive, cf-zone-sync cron 은 exclusion 미지원**. 둘 다 영구 수정 필요. 인시던트 보고서: Outline doc `8f5c43f8-0b46-4032-b3f6-08106aa1e5e2`.
|
||||
|
||||
### 발견 사항: K3s APISIX 글로벌 limit-req
|
||||
|
||||
@@ -190,8 +191,9 @@ ddos-detect AI 분석기 폐기 후 deterministic 패턴 매칭으로 대체.
|
||||
| 동기화 | 10초 (decision stream polling) |
|
||||
| 방식 | LAPI → bouncer → Cloudflare Worker KV (bloom filter) → Worker에서 차단/captcha |
|
||||
| 보호 zone (현재) | keepanker.cv, actions.it.com, ironclad.it.com, servidor.it.com (4 zone, 2026-04-10 cf-audit-cleanup-2 후) |
|
||||
| 제거된 zone | inouter.com, anvil.it.com — DNS `proxied: false` 라 CF 엣지를 거치지 않아 enforce 안 되던 dead route. 보호는 BunnyCDN 미들웨어 64811 단독. 2026-04-10 cfb-manager DELETE + 002323 단계 destructive cleanup → 003943 수동 YAML 수리 |
|
||||
| Turnstile | bouncer-managed 4개 (rotate 168h), + 별도 수동 위젯 `inouter-bunny-middleware` (`0x4AAAAAAC3otPWhldI96Aks`) — BunnyCDN 미들웨어 64811 전용, bouncer 관리 외 freeze. [[cloudflare#Turnstile 토큰 권한 (2026-04-10 사실)]] |
|
||||
| 제거된 zone | inouter.com, anvil.it.com — DNS `proxied: false` 라 CF 엣지를 거치지 않아 enforce 안 되던 dead route. 보호는 BunnyCDN 미들웨어 64811 단독. 2026-04-10 cfb-manager DELETE + 002323 단계 destructive cleanup → 003943 수동 YAML 수리 → 005203 kappa 긴급 복구 (cron 비활성화 + 백업 복원) |
|
||||
| Turnstile | bouncer-managed 4개 (rotate 168h, 005217 신규 생성: servidor `0x4AAAAAAC3rgjWkt-40fI7d`, actions `0x4AAAAAAC3rg3VTXEllaMhY`, keepanker `0x4AAAAAAC3rhJWcBgQ5aPym`, ironclad `0x4AAAAAAC3rhaCWqBq5Qgza`), + 별도 수동 위젯 `inouter-bunny-middleware` (`0x4AAAAAAC3otPWhldI96Aks`) — BunnyCDN 미들웨어 64811 전용, bouncer 관리 외 freeze. [[cloudflare#Turnstile 토큰 권한 (2026-04-10 사실)]] |
|
||||
| **⚠ cron `cf-zone-sync` 비활성화 상태** | `/etc/cron.d/cf-zone-sync.disabled.kappa-incident-20260410`. 원본 cron 은 매 10분마다 `auto-add-cf-zones.sh` 실행 → CF 의 모든 zone 을 자동으로 yaml 에 추가하는 동작. inouter/anvil 을 의도적으로 제외하려는 cleanup-2 와 정면 충돌해 (1) 깨진 indent 로 yaml 파괴 (2) bouncer crashloop 유발. 영구 수정 필요 — 옵션: 스크립트에 exclusion 리스트 지원 추가, 또는 cron 제거 + 수동 관리 전환. 결정 전까지 비활성화 유지 |
|
||||
|
||||
#### Decision 수동 관리
|
||||
|
||||
|
||||
Reference in New Issue
Block a user