obsidian: 정본 문서에서 히스토리/인시던트 분리 완료

15개 정본 문서에서 날짜별 변경이력, 인시던트 기록, 폐기된 구현 상세를
history/ 디렉토리로 분리. 정본은 현재 상태만 기술하는 백서 형태로 정리.
각 정본에 history 위키링크 추가.

분리된 history 파일 12건:
- apisix git push 500, k3s postgresql migration, apisix→traefik 전환
- netbis DDoS 공격, gitea 이전/분리, usb 2.5g hang + NFS hard mount
- supabase→patroni, apisix etcd 통합/분리, anomaly-detect 재설계
- patroni failover incident, zlambda nixos migration, ops-agents setup

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
kappa
2026-04-10 12:09:21 +09:00
parent 72750cfc9d
commit 2356b86d36
27 changed files with 554 additions and 514 deletions

View File

@@ -27,9 +27,6 @@ K3s 클러스터에서 Helm 차트(gitea/gitea 12.5.0)로 운영. 네임스페
helm upgrade gitea gitea/gitea -n gitea -f ~/k8s/gitea/values.yaml
```
### 이전 (Synology)
2026-03-15 Synology NAS(192.168.9.100, SQLite)에서 K3s(PostgreSQL)로 이전 완료. Synology 패키지 중지됨 (데이터 보존 중).
## 이미지 레지스트리
@@ -47,9 +44,6 @@ helm upgrade gitea gitea/gitea -n gitea -f ~/k8s/gitea/values.yaml
R2에 저장되는 데이터: packages, lfs, attachments, avatars, repo-avatars, repo-archive, actions_log, actions_artifacts
### BunnyCDN Pull Zone 분리 (2026-03-27)
Gitea는 iron-kr에서 **iron-git** (ID 5584382)으로 분리. 이유: iron-kr의 `BlockNoneReferrer: true`가 git 클라이언트(Referrer 없음)를 차단하여 git push/pull 403 에러 발생. iron-git은 `BlockNoneReferrer: false`로 설정.
## 컨테이너 레지스트리
@@ -103,19 +97,7 @@ K8s CronJob `gitea-backup` (매일 03:00 UTC):
- 7일 보존, Longhorn PVC 10Gi
- 매니페스트: `~/k8s/gitea/backup-cronjob.yaml`
## 도메인 이전 (2026-03-28)
기존 `gitea.anvil.it.com` 도메인을 `gitea.inouter.com`으로 완전 교체.
변경 항목:
- DNS: Cloudflare CNAME → iron-git.b-cdn.net + BunnyCDN Free SSL
- K8s: HTTPRoute, Helm values (DOMAIN, ROOT_URL), CoreDNS 헤어핀 rewrite
- ArgoCD: 4개 앱 repoURL + 8개 repo secret
- Gitea Runner: `.runner`, `.docker/config.json`, `/etc/hosts`
- Mailgun: 기존 `gitea@anvil.it.com``gitea@inouter.com` credential 교체
- 4개 repo CI workflow 이미지 경로 수정
- 컨테이너 이미지 경로: 5개 Deployment
- 로컬 git remote 6개, Obsidian 문서 7개, CLAUDE.md, Vault secret
이전/분리/도메인 변경 이력: [[../history/2026-03-various-gitea-changes|history]]
## 트러블슈팅
@@ -129,4 +111,3 @@ curl -s -X PATCH "https://gitea.inouter.com/api/v1/admin/users/kaffa" \
```
- API 토큰, 비밀번호: Vault `secret/apps/gitea`
- 2026-03-17 웹 로그인 불가 → API로 비밀번호 리셋하여 해결

View File

@@ -11,7 +11,7 @@ Netbis 팀 도메인의 예비(DR) 리버스 프록시 서버. 평소에는 트
기존 Ironclad 인프라([[apisix]], [[crowdsec-safeline]])와는 별도 구성.
> **2026-04-08 상태**: Debian 12 → **NixOS 25.05** 전환 후 APISIX/etcd NixOS `virtualisation.oci-containers`로 재선언하여 기동 완료. 설정은 [[zlambda|kaffa/nixos-infra]] flake의 `apisix.nix` 모듈에 있음. 컨테이너는 구동되지만 **라우트/SSL은 비어 있으므로 DR 역할 부트스트랩은 별도 작업** (acme.sh 재발급 → admin API로 라우트/업스트림/SSL 등록).
APISIX/etcd NixOS `virtualisation.oci-containers`로 기동 완료. 설정은 [[zlambda|kaffa/nixos-infra]] flake의 `apisix.nix` 모듈. **라우트/SSL은 비어 있으므로 DR 역할 부트스트랩은 별도 작업** 필요.
## 서버 정보
@@ -141,7 +141,7 @@ APISIX global_rule로 모든 요청 로그를 CrowdSec(jp1)로 전송.
## Cloudflare 보안 설정
### Rate Limiting (2026-04-05 변경: 600→120/분)
### Rate Limiting (120/분)
| Zone | 제한 | 액션 | 차단시간 |
|------|------|------|---------|
@@ -154,7 +154,7 @@ APISIX global_rule로 모든 요청 로그를 CrowdSec(jp1)로 전송.
정상 사용자 IP당 ~10 req/분 기준, 12배 여유. 공격 IP(230+/분)는 확실히 차단.
### Super Bot Fight Mode (2026-04-03 설정)
### Super Bot Fight Mode
Pro zone 4개(fall-vip.com, psd777.com, rss-555.com, rss-7790.com)에 적용:
- Definitely automated → **managed_challenge**
@@ -167,25 +167,12 @@ Free zone(fall-mvp.com, fall-vip7.com)은 미적용.
기본 활성화 상태 (Cloudflare managed ruleset). 감도는 기본값(Medium).
## 공격 이력
### 2026-03-31 ~ 04-01 대규모 봇 공격
| 도메인 | 3/31 요청 | 4/1 요청 | 출처 |
|--------|----------|---------|------|
| rss-555.com | 3050만 (threats 1700만) | 3000만 (threats 2300만) | JP 99% |
| fall-vip.com | 2560만 (threats 1160만) | 1540만 (threats 1000만) | JP 99% |
| fall-mvp.com | 정상 | 738만 (threats 340만) | JP |
- 일본 IP에서 집중된 L7 DDoS 공격
- Cloudflare가 threat으로 분류했으나 완전 차단하지 않음
- 정상 트래픽 일 130~180만 대비 30배 이상 폭주
- 대응: Rate Limiting + SBFM 사후 설정
### 정상 트래픽 기준 (30일 평균)
## 트래픽 기준
일 평균 약 140만 요청. 월 환산 약 4200만.
공격 이력: [[../history/2026-03-31-netbis-ddos-attack|2026-03-31 대규모 봇 공격]]
## 로그 분석
### 사용 가능
@@ -230,10 +217,10 @@ Workers Paid에 포함. CrowdSec Worker Bouncer 요청 로그를 R2에 저장
- TCP BBR, conntrack 262144, fin_timeout 10s, keepalive 300s, port range 1024-65535
- limits.conf nofile 655360 (Docker 컨테이너 반영은 compose ulimits 추가 필요, 서비스 중이라 미적용)
### NPM-4 추가 튜닝 (2026-04-05)
### NPM-4 추가 튜닝
- 커널: tcp_tw_reuse=1, rmem_max/wmem_max 16MB, tcp_max_tw_buckets 131072, tcp_max_orphans 32768
- Nginx: worker_connections 10240, proxy_buffers 16 32k, keepalive_requests 1000, open_file_cache
- real_ip_header: X-Real-IP → CF-Connecting-IP (컨테이너 내 sed, 재시작 시 초기화 주의)
- real_ip_header: CF-Connecting-IP (컨테이너 내 sed, 재시작 시 초기화 주의)
## 유사시 전환 절차
@@ -241,18 +228,7 @@ Workers Paid에 포함. CrowdSec Worker Bouncer 요청 로그를 R2에 저장
2. APISIX 라우트/SSL 사전 등록 완료 상태이므로 즉시 서비스 가능
3. 전환 후 CrowdSec 로그 수신 및 바운서 차단 자동 동작 확인
## 이전에 운영했던 서비스 (제거됨)
sandbox-tokyo에서 기존 운영하던 아래 서비스는 2026-04-03 중지, 2026-04-08 NixOS 전환으로 제거:
- ~~APISIX 3.15.0 + apisix-etcd (Docker Compose)~~ → **2026-04-08 NixOS oci-containers로 재가동**
- vault-prod (HashiCorp Vault)
- wg-easy (WireGuard VPN)
- nginx-tcp-proxy
- socks5-v4 (microsocks) — [[searxng]]가 사용 중이었음
- tlsproxy
- Caddy (systemd, disabled)
재구성 시 참고: NixOS 모듈로 선언하는 패턴은 `apisix.nix` 참조. 간단한 외부 이미지 컨테이너는 `virtualisation.oci-containers.containers.<name>` 블록 하나 + 필요 시 docker network 생성용 systemd oneshot만 있으면 된다.
이전 서비스 제거 이력: [[../history/2026-04-08-zlambda-nixos-migration|history]]
## 부트스트랩 체크리스트 (재가동 시)