outline: split to iron-kr-nowaf pull zone, restore iron-kr WAF rules
Created new Bunny pull zone iron-kr-nowaf (ID 5720695) without Shield to host outline.inouter.com exclusively. Uploaded *.inouter.com wildcard cert from cert-manager since Bunny LE auto-provision kept returning invalid. Restored 7 CRS rules (942100,932230/235/260/370/380,933160) on iron-kr Shield so vault/n8n/telegram-webhook/jarvis regain protection. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
68
history/2026-04-21-outline-bunny-nowaf-migration.md
Normal file
68
history/2026-04-21-outline-bunny-nowaf-migration.md
Normal file
@@ -0,0 +1,68 @@
|
||||
---
|
||||
date: 2026-04-21
|
||||
topic: Outline을 WAF 없는 전용 Bunny 풀존(iron-kr-nowaf)으로 분리
|
||||
areas:
|
||||
- infra/platform/outline
|
||||
- services/bunnycdn-security
|
||||
---
|
||||
|
||||
# 2026-04-21 Outline Bunny 풀존 분리
|
||||
|
||||
`outline.inouter.com`을 WAF 없는 신규 풀존 `iron-kr-nowaf`로 이전. iron-kr의 7개 CRS 룰 복원.
|
||||
|
||||
## 배경
|
||||
|
||||
2026-04-13 iron-kr Shield learning mode 종료 후 CRS 룰이 enforce로 전환되면서 Outline API JSON 요청에 다수 오탐 누적:
|
||||
|
||||
| 룰 | 오탐 경로 | 누적 |
|
||||
|---|---|---|
|
||||
| 942100 libinjection SQLi | `api/*.list`, `api/collections.list` | 9 |
|
||||
| 932235 Unix CMD Injection | `api/documents.create` | 3 |
|
||||
| 932370 Windows CMD Injection | `api/documents.create` | 2 |
|
||||
| 930130 Restricted File Access | `api/*` | 2 |
|
||||
| 932230 Unix CMD Injection (2-3 chars) | `api/documents.create` | 1 |
|
||||
| 933160 PHP Injection | `api/documents.create` | 1 |
|
||||
|
||||
Outline API는 Bearer 토큰 강제 인증 — WAF가 추가 보호 거의 없고 오탐만 생성.
|
||||
|
||||
Basic plan 한계로 host-per-path 커스텀 룰 불가, 따라서 **전용 풀존 분리** 채택.
|
||||
|
||||
## 변경 내역
|
||||
|
||||
### Bunny
|
||||
|
||||
| 항목 | 이전 | 이후 |
|
||||
|---|---|---|
|
||||
| Pull Zone | iron-kr (ID 5555227) | **iron-kr-nowaf** (ID 5720695, 신규) |
|
||||
| Shield | iron-kr Shield 101015 (CRS 활성) | Shield 없음 |
|
||||
| 국가차단 | middleware 64811 | middleware 64811 (동일) |
|
||||
| OriginUrl | https://220.120.65.245 | https://220.120.65.245 (동일) |
|
||||
| AddHostHeader | true | true |
|
||||
| VerifyOriginSSL | false | false |
|
||||
| EnableWebSockets | true | true |
|
||||
| TLS 인증서 | LE 자동 | `*.inouter.com` wildcard (cert-manager 수동 업로드) |
|
||||
|
||||
### DNS
|
||||
|
||||
```
|
||||
outline.inouter.com CNAME iron-kr.b-cdn.net → iron-kr-nowaf.b-cdn.net
|
||||
```
|
||||
|
||||
Cloudflare zone `inouter.com` (id cd84743d9c61b97bada5ce903a29ae2b), record id cb8fd1cf67b872e52600e4f868a2a992.
|
||||
|
||||
### iron-kr Shield 복원
|
||||
|
||||
임시 적용했던 `wafDisabledRules: [942100, 932230, 932235, 932260, 932370, 932380, 933160]` 전부 해제 → vault/n8n/telegram-webhook/jarvis 호스트 보호 원상복구.
|
||||
|
||||
## 검증
|
||||
|
||||
- `list_collections` MCP 호출 200 OK (이전 942100 차단)
|
||||
- `create_document` 성공 (doc id `4bfff4c7-2fd3-478e-af00-2e25301da781` YouTube 요약)
|
||||
- TLS cert SAN: `DNS:inouter.com, DNS:*.inouter.com` (GTS WR1, 만료 2026-06-21)
|
||||
- HTTP/2 200, `cdn-pullzone: 5720695` 응답 헤더 확인
|
||||
|
||||
## 미해결 / 후속
|
||||
|
||||
- **Bunny LE 자동 발급 실패** — `POST /pullzone/loadFreeCertificate?hostname=outline.inouter.com`가 `The request is invalid` 반환 (원인 불명). 현재 *.inouter.com wildcard로 우회했지만 LE 자동 갱신 체계 구축하려면 재조사 필요. cert-manager 와일드카드 갱신이 2026-06-21 전에 Bunny에 재업로드 필요 — 자동화 스크립트 또는 cert-manager webhook 연동 검토
|
||||
- Advanced plan 업그레이드 시 iron-kr에서 host-per-path 커스텀 룰로 통합 관리 가능 (현재는 풀존 2개 운영)
|
||||
- 이번 이슈 원인 분석과 932380 n8n/vault 21건 실제 공격 건은 별도 Outline 문서로 보존: doc `ac429f1b-...`, doc `7ac9ec42-...`
|
||||
@@ -24,9 +24,9 @@ Outline은 팀 위키/문서 관리 플랫폼. K3s 클러스터에 배포.
|
||||
| Redis | outline-redis (outline 네임스페이스 내 전용) |
|
||||
| 파일 저장소 | 로컬 (Longhorn PVC 5Gi, `/var/lib/outline/data`) |
|
||||
| TLS (Traefik) | wildcard-inouter-tls (*.inouter.com) |
|
||||
| TLS (CDN) | Let's Encrypt via BunnyCDN |
|
||||
| CDN | BunnyCDN iron-kr 존 (ID 5555227, 쿠키 허용) |
|
||||
| DNS | outline.inouter.com CNAME → iron-kr.b-cdn.net (Cloudflare, proxied OFF) |
|
||||
| TLS (CDN) | *.inouter.com wildcard (cert-manager, GTS WR1 발급) 수동 업로드 |
|
||||
| CDN | BunnyCDN **iron-kr-nowaf** 존 (ID 5720695, WAF 없음, 쿠키 허용) — 2026-04-21 iron-kr에서 분리 이전 |
|
||||
| DNS | outline.inouter.com CNAME → iron-kr-nowaf.b-cdn.net (Cloudflare, proxied OFF) |
|
||||
| Ingress | Traefik IngressRoute (CRD) |
|
||||
|
||||
## 인증 (Gitea OAuth2)
|
||||
|
||||
@@ -63,7 +63,8 @@ tags: [cdn, bunnycdn, security, crowdsec, edge-script]
|
||||
| iron-kr | `jarvis.inouter.com` | |
|
||||
| iron-kr | `telegram-webhook.inouter.com` | |
|
||||
| iron-kr | `vault.inouter.com` | |
|
||||
| iron-kr | `outline.inouter.com` | |
|
||||
| iron-kr-nowaf | `iron-kr-nowaf.b-cdn.net` | ✅ |
|
||||
| iron-kr-nowaf | `outline.inouter.com` | (WAF 제외용, 2026-04-21 이전) |
|
||||
| iron-jp | `iron-jp.b-cdn.net` | ✅ (시스템만 남음, 사용자 호스트 전부 제거 2026-04-17) |
|
||||
| iron-kr-waf | `iron-kr-waf.b-cdn.net` | ✅ |
|
||||
| iron-kr-waf | `juiceshop.keepanker.cv` | |
|
||||
|
||||
Reference in New Issue
Block a user