Files
obsidian/infra/crowdsec-safeline.md
kappa 3a0f75ec13 KR존 3중 보안 구조 및 공격 테스트 결과 정리
BunnyCDN WAF + SafeLine + CrowdSec 연동 현황,
sandbox-tokyo에서 실시한 공격 테스트 결과 기록

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-15 10:40:21 +09:00

2.4 KiB

title, updated
title updated
CrowdSec 및 SafeLine WAF 2026-03-15

DB 테이블

DB 테이블은 blocklist (ip PK, reason, origin, expires_at), verified_ips, metadata

시나리오

시나리오: safeline/xml-injection, safeline/command-injection, custom/safeline-waf-blocked (trigger), custom/safeline-waf-repeated (leaky bucket 3+/5min)

Bouncer

Bouncer 목록: apisix-waf-bouncer, bunny-cdn-bouncer, cs-cloudflare-worker-bouncer

3중 보안 구조 (KR존, 2026-03-15)

클라이언트 → BunnyCDN WAF (1차) → APISIX + SafeLine WAF (2차) → CrowdSec (분석/3차)

1차: BunnyCDN WAF (OWASP CRS)

  • 위치: CDN 에지 (오리진 도달 전 차단)
  • 차단: SQLi, XSS, CMDi, SSRF, Shellshock, Log4j
  • 비활성화한 룰: DATA LEAKAGES SQL (id=911) — NocoDB API 응답 오탐 방지
  • 통과: Request Smuggling, NoSQLi, 일반 경로 스캔

2차: SafeLine WAF (chaitin-waf 플러그인)

  • 위치: APISIX 내부 플러그인
  • BunnyCDN을 통과한 공격 차단
  • 글로벌 적용 (global_rules로 chaitin-waf 설정)

3차: CrowdSec (로그 분석)

  • 위치: jp1 CrowdSec (10.253.100.240:8085)
  • APISIX http-logger → CrowdSec HTTP acquisition (global_rules)
  • 파서: custom/apisix-json-logs (APISIX http-logger JSON 파싱)
  • 반복 공격자 패턴 탐지 (시나리오 매칭)
  • 인증: Authorization: apisix-crowdsec-log-2024

공격 테스트 결과 (sandbox-tokyo → nocodb.inouter.com)

공격 결과 차단 위치
SQLi (OR 1=1) 403 BunnyCDN WAF
SQLi (대소문자 혼합) 403 BunnyCDN WAF
SQLi (더블 인코딩) 403 BunnyCDN WAF
SQLi (POST body) 403 BunnyCDN WAF
XSS (<script>) 403 BunnyCDN WAF
XSS (img onerror) 403 BunnyCDN WAF
CMDi 403 BunnyCDN WAF
SSRF 403 BunnyCDN WAF
Shellshock 403 BunnyCDN WAF
Log4j (JNDI) 403 BunnyCDN WAF
Path Traversal 404 경로 정규화 (무해)
Request Smuggling 302 통과 (CDN 정규화로 실제 smuggling 불가)
NoSQLi (JSON) 401 통과 (PostgreSQL이라 무효, 인증에서 차단)
WP scan 404 통과 (존재하지 않는 경로)

참고

  • BunnyCDN WAF 차단 시 오리진에 로그 안 옴 → CrowdSec에 미수신
  • 리얼 IP: 외부 트래픽은 X-Forwarded-For로 정상 전달, LAN은 127.0.0.1
  • OpenWrt에 CrowdSec firewall bouncer 설치 가능하나 DNAT 구조라 리얼 IP 매칭 불가