KR존 3중 보안 구조 및 공격 테스트 결과 정리
BunnyCDN WAF + SafeLine + CrowdSec 연동 현황, sandbox-tokyo에서 실시한 공격 테스트 결과 기록 Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -1,6 +1,6 @@
|
|||||||
---
|
---
|
||||||
title: CrowdSec 및 SafeLine WAF
|
title: CrowdSec 및 SafeLine WAF
|
||||||
updated: 2026-03-12
|
updated: 2026-03-15
|
||||||
---
|
---
|
||||||
|
|
||||||
## DB 테이블
|
## DB 테이블
|
||||||
@@ -14,3 +14,51 @@ DB 테이블은 blocklist (ip PK, reason, origin, expires_at), verified_ips, met
|
|||||||
## Bouncer
|
## Bouncer
|
||||||
|
|
||||||
Bouncer 목록: [[apisix]]-waf-bouncer, bunny-cdn-bouncer, cs-[[cloudflare|cf]]-worker-bouncer
|
Bouncer 목록: [[apisix]]-waf-bouncer, bunny-cdn-bouncer, cs-[[cloudflare|cf]]-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 매칭 불가
|
||||||
|
|||||||
Reference in New Issue
Block a user