netbis CF firewall bouncer 재구축 (origin filter) + VL acquisition 통합 + sigmatch v2.4
- crowdsec-safeline.md: VL → CrowdSec acquisition 3개(apisix/traefik/npm) → 1개 통합 (victorialogs-nginx.yaml, query OR 결합). Netbis NPM CrowdSec 연동 활성. netbis-cf-firewall 재구축 섹션 추가. - services/netbis.md: bouncer 폐기 → 재구축 정정. firewall_bouncer_token 정보 갱신. Worker bouncer는 트래픽 비례 비용으로 재구축 안 함 명시. - history/2026-04-25-netbis-cf-firewall-rebuild.md: 오늘 작업 종합 (sigmatch v2.4 MP 제거, VL 통합, CrowdSec 연동, CF Firewall bouncer 재구축, origin filter로 10k 한도 회피). origin filter [crowdsec, cscli] 적용으로 2026-04-23 폐기 사유였던 CF IP List 10k 한도 회피. Worker bouncer는 origin filter로 회피 불가 (트래픽 비례 비용) 이라 재구축 안 함.
This commit is contained in:
@@ -33,23 +33,28 @@ Traefik DaemonSet (stdout JSON accessLog)
|
||||
| 인증 | `Authorization: traefik-crowdsec-log-2024` |
|
||||
| 파서 | `crowdsecurity/nginx-logs` (Hub, 표준 nginx combined). Vector에서 모든 로그를 표준 포맷으로 변환 후 VictoriaLogs 저장 |
|
||||
|
||||
### APISIX → VictoriaLogs → CrowdSec (서울+오사카 통합)
|
||||
### APISIX + Traefik + NPM → VictoriaLogs → CrowdSec (통합 acquisition, 2026-04-25)
|
||||
|
||||
```
|
||||
서울 APISIX (K3s) stdout → Vector DaemonSet → VictoriaLogs (ES bulk API)
|
||||
오사카 APISIX (Docker) stdout → Vector (Docker) → VictoriaLogs (ES bulk API)
|
||||
→ CrowdSec victorialogs acquisition (tail 모드, 실시간)
|
||||
→ custom/apisix-json-logs 파서
|
||||
서울 APISIX (K3s) stdout → Vector DaemonSet ─┐
|
||||
오사카 APISIX (Docker) stdout → Vector ────────┤
|
||||
K3s Traefik stdout → Vector DaemonSet ────────┤→ VictoriaLogs (ES bulk API)
|
||||
Netbis NPM 6대 nginx file → Vector → zlambda─┘
|
||||
↓
|
||||
CrowdSec victorialogs acquisition (tail, 실시간, 단일 query OR로 통합)
|
||||
→ custom/apisix-json-logs 파서 + crowdsecurity/nginx-logs (NPM 호환)
|
||||
+ anomaly-detect (5분 폴링, AI 분석)
|
||||
```
|
||||
|
||||
| 항목 | 값 |
|
||||
|------|-----|
|
||||
| VictoriaLogs | `vl.inouter.com` (K3s logging ns, Traefik IngressRoute) |
|
||||
| CrowdSec acquisition | `/etc/crowdsec/acquis.d/victorialogs-apisix.yaml` (`source: victorialogs`, `mode: tail`, `query: program:apisix log_type:access`) |
|
||||
| 서울 Vector | K3s DaemonSet (Helm `vector/vector`), `parse_apisix` transform → `vlogs` ES sink |
|
||||
| 오사카 Vector | Docker `timberio/vector:0.45.0-debian`, `/etc/vector/vector.yaml`, `docker_logs` source → `parse_apisix` → `vlogs` ES sink. `location: osaka` 필드 추가 |
|
||||
| 파서 | `crowdsecurity/nginx-logs` (Vector가 표준 nginx combined로 변환) |
|
||||
| 통합 acquisition | `/etc/crowdsec/acquis.d/victorialogs-nginx.yaml` (`source: victorialogs`, query: `(program:apisix AND log_type:access) OR program:traefik OR (program:npm AND log_type:access)`, `labels: type: nginx`) |
|
||||
| 이전 분리 파일 | `victorialogs-apisix.yaml.bak`, `victorialogs-traefik.yaml.bak`, `victorialogs-npm-netbis.yaml.bak` (롤백용 보존) |
|
||||
| 서울 Vector | K3s DaemonSet (Helm `vector/vector`), `parse_apisix` / `parse_traefik` transform → `vlogs` ES sink |
|
||||
| 오사카 Vector | Docker `timberio/vector:0.45.0-debian`, `parse_apisix` → `vlogs`. `location: osaka` 필드 추가 |
|
||||
| Netbis NPM 경로 | NPM 호스트 Vector → zlambda vector-relay → VL `npm-netbis` 인덱스. nginx-logs parser가 NPM proxy format 호환 (cscli explain 검증) |
|
||||
| 파서 | `crowdsecurity/nginx-logs` (Vector가 표준 nginx combined로 변환). NPM은 raw proxy format도 grok으로 핵심 필드 추출 정상 |
|
||||
|
||||
### APISIX → log-collector → CrowdSec (sandbox-tokyo)
|
||||
|
||||
@@ -69,17 +74,19 @@ sandbox-tokyo APISIX http-logger
|
||||
| SQLite | `/var/lib/log-collector/requests.db` |
|
||||
| 기능 | APISIX 로그 수신 → SQLite 저장 → CrowdSec 포워딩, 타임스탬프 밀리초 보정 |
|
||||
|
||||
### Netbis NPM → zlambda → VictoriaLogs (6대 오리진, 2026-04-23)
|
||||
### Netbis NPM → zlambda → VictoriaLogs (6대 오리진, 2026-04-23 수집 / 2026-04-25 CrowdSec 연동)
|
||||
|
||||
```
|
||||
NPM-1..6 (Linode Tokyo public) Vector 0.55 file→http
|
||||
→ zlambda(Tailscale+public) Vector-relay 0.45 http_server→elasticsearch
|
||||
→ vl.inouter.com (index `npm-netbis`)
|
||||
→ CrowdSec victorialogs acquisition (위 통합 파일에 query OR로 합류, 2026-04-25 연동)
|
||||
→ nginx-logs parser → 시나리오 매칭 → LAPI decision (origin: crowdsec)
|
||||
```
|
||||
|
||||
Netbis 오리진(NPM) nginx access/error 로그 수집. VL 은 LAN-only(192.168.9.53) 이므로 public NPM이 도달할 수 없어 zlambda 를 HTTP 중계로 투입. 상세: [[../../services/netbis#로그-수집-vector-→-zlambda-→-victorialogs|netbis]], [[../../history/2026-04-23-netbis-npm-vl-collection|history]]
|
||||
|
||||
CrowdSec acquisition 쪽 추후 연동 가능 — VL LogsQL `service:npm log_type:access` 에 `victorialogs` acquisition 추가하면 APISIX 파이프라인과 동일하게 처리 가능.
|
||||
**2026-04-25 CrowdSec 연동 완료.** 통합 acquisition `/etc/crowdsec/acquis.d/victorialogs-nginx.yaml` 의 query에 `(program:npm AND log_type:access)` 추가. nginx-logs parser가 NPM proxy format도 호환 처리 (grok이 충분히 lenient하여 핵심 필드 추출). `cscli explain --type nginx` 로 한 줄 시뮬 결과 s00-raw → s01-parse(nginx-logs +22 ~2) → s02-enrich → 시나리오(`custom/apisix-high-rate-per-ip`, `custom/apisix-single-path-flood`) 매칭 확인.
|
||||
|
||||
### SafeLine → CrowdSec (실시간, PG LISTEN/NOTIFY)
|
||||
|
||||
@@ -233,7 +240,33 @@ cat updated-config.yaml | ssh incus-jp1 "incus file push - cs-cf-worker-bouncer/
|
||||
ssh incus-jp1 "incus exec cs-cf-worker-bouncer -- systemctl restart crowdsec-cloudflare-worker-bouncer"
|
||||
```
|
||||
|
||||
> **Netbis CF 바운서 전량 제거 (2026-04-23)** — Worker Bouncer (`netbis-cf`) + Firewall Rule Bouncer (`netbis-cf-firewall`) 모두 폐기. Worker/KV 비용 구조 + CF IP List 10k 한도의 이중 한계로 두 방식 모두 비용 대비 효과 불충분 판단. 컨테이너·패키지·LAPI 엔트리·CF 리소스(Worker/KV/Routes/Turnstile/Rule List/Firewall Rules)·API 토큰 모두 삭제. 상세: [[../../history/2026-04-23-netbis-bouncer-removal|history]]
|
||||
> **Netbis CF 바운서 (2026-04-23 폐기 → 2026-04-25 Firewall Rule 단독 재구축)**
|
||||
>
|
||||
> 2026-04-23: Worker + Firewall Rule 두 종류 모두 폐기 (Worker/KV 비용 + CF IP List 10k 한도). [[../../history/2026-04-23-netbis-bouncer-removal|history]]
|
||||
>
|
||||
> 2026-04-25: **`netbis-cf-firewall` 만 재구축**. 폐기 사유였던 10k 한도는 **origin filter `[crowdsec, cscli]`** 적용으로 회피 (CAPI/lists 30k+ 무시, 로컬 시나리오 발동만 푸시). Worker bouncer는 트래픽 비례 비용 구조라 origin filter로 회피 불가, **재구축 안 함**.
|
||||
>
|
||||
> 자세한 배경 및 구성: [[../../history/2026-04-25-netbis-cf-firewall-rebuild|history]], [[../../services/netbis#cloudflare-firewall-bouncer-재구축-2026-04-25|netbis 정본]]
|
||||
|
||||
### netbis-cf-firewall (Cloudflare Firewall Rule Bouncer, 재구축 2026-04-25)
|
||||
|
||||
| 항목 | 값 |
|
||||
|------|-----|
|
||||
| 컨테이너 | jp1 incus `crowdsec` (LAPI와 같은 컨테이너에 동거) |
|
||||
| 패키지 | `crowdsec-cloudflare-bouncer 0.3.0` (apt) |
|
||||
| 동작 | LAPI 폴링(10s) → CF Account IP List + Zone Firewall Rule 갱신 |
|
||||
| LAPI bouncer 이름 | `cs-cloudflare-bouncer-1777082222` (자동 생성, rename 보류) |
|
||||
| **origin filter** | `only_include_decisions_from: [crowdsec, cscli]` (CAPI/lists 30k+ 무시 → CF List 10k 한도 회피) |
|
||||
| CF 리소스 | IP List `crowdsec_managed_challenge` (`f728ad9d4653467396d32466902c9e52`), 6 zone × Firewall Rule (managed_challenge 액션) 자동 생성 |
|
||||
| 적용 zone | fall-vip / fall-mvp / fall-vip7 / psd777 / rss-555 / rss-7790 (Account ID `8fcf3c7876332aba33e974cbbfdad951`) |
|
||||
| API token | Vault `secret/cloud/cloudflare-netbis` (`firewall_bouncer_token`, `firewall_bouncer_token_id`). 권한: Account Firewall Access Rules Write + Account Rule Lists Write + Zone Firewall Services Write |
|
||||
| 인증 방식 | Bearer (`Authorization: Bearer cfut_...`). global_api_key는 `Invalid request headers (6003)` 라 **사용 불가** — 신규 token 발급 필수 |
|
||||
| config | `/etc/crowdsec/bouncers/crowdsec-cloudflare-bouncer.yaml` |
|
||||
| systemd | `crowdsec-cloudflare-bouncer.service` |
|
||||
| 비용 | $0 (Free plan 영역, IP List + Firewall Rule). Worker bouncer 대비 비용 구조 우월 |
|
||||
| 한계 | CF 공식 deprecation 표기 ("isn't actively supported anymore"). 동작은 정상이나 향후 호환성 변화 가능 |
|
||||
|
||||
cs-cf-worker-bouncer (kappa 계정용)는 별도 컨테이너에서 그대로 운영. netbis는 비용 구조 차이로 firewall bouncer만 사용.
|
||||
|
||||
### bunny-cdn-bouncer (BunnyCDN Edge Script)
|
||||
|
||||
|
||||
Reference in New Issue
Block a user