- ethtool: 2500 Mb/s Full Duplex 정상 협상
- iperf v2 (MTU 9000): TX 2.26 Gbit/s, RX 2.45 Gbit/s (이론 91%/98%)
- DSM ifcfg가 슬롯 기반으로 eth2 자리 자동 매핑 → 이름/IP/MTU 승계
- watchdog 그대로 유효, 새 카드도 RTL8157 계열이므로 LPM 재발 모니터링 대상
incus-kr2 freeze 사건 분석으로 확정된 IOMMU 부분 hang 메커니즘과
운영 규칙(`iommu=pt` 선제 적용)을 별도 reference 문서로 분리.
호스트 사연(history)과 메커니즘(reference)을 분리해 다른 AMD Ryzen
호스트 도입 시 재사용 가능한 정본으로 정리.
- infra/compute/amd-vi-iommu.md 신규 (메커니즘 + 차단 + 운영 규칙)
- compute _index.md, hosts/incus-kr2.md, history 문서에 링크
GL.iNet 4.8.1 기본 설정에서 fw3 tailscale0 zone에 masq 옵션이
누락되어 LAN→tailnet forward 시 SNAT가 안 되는 문제와, dnsmasq
ts.net split-forward 미설정으로 MagicDNS 동작 안 하는 문제를
정리. 영구 UCI 설정과 Mac 측 /etc/resolver/ts.net + search domain
보정까지 포함.
- infra/domain-boundaries.md 신규 — 두 영역 자산/계정/책임 분리 + cyclic 데이터 흐름 + 자산 매핑 + 추적 시 주의사항
- infra/_index.md에 도메인 경계 절 추가
- 기존 정본들(services/netbis, infra/security/crowdsec-safeline, services/bunnycdn-security 등)이 흩어져 갖던 cross-domain 정보의 단일 진입점
핵심 사실:
- netbis CF account != kappa CF account (별개)
- NPM 6대 origin은 netbis 자산, vl/CrowdSec/netbis-cf-firewall은 ironclad 인프라
- zlambda는 양 영역 다리 (Tailscale + Linode public IP 보유)
- netbis-cf-firewall은 ironclad 컨테이너 동거하지만 netbis CF API token으로 push
- profile.yaml is ban-only — captcha/throttle decision은 emit 안 됨
- Hub 분산 DDoS 시나리오 (http-ddos-by-ASN/cn) 도입 시 profile 분기 필수
- cs-cf-worker-bouncer: default_action captcha (Turnstile)
- netbis-cf-firewall: default_action managed_challenge (6 zone)
- 두 bouncer 모두 LAPI decision type 무관하게 캡챠 페이지로 응답
18h DRY 가동 결과 99 distinct IP 차단 누적. attack_contributor 2,668건 중
97.5%가 MP only 시그널 발동. MP threshold p99 (1% 오탐) × 매 5분 사이클 평가
= 누적 폭주. attack_contributor의 단순 volume top이 webhook + heavy normal
user 항상 잡음.
LIVE였으면 베팅 콜백 4~5개 차단 + KR 활발 유저 + IPv6 모바일 240/4 가짜 IP
99개 차단 = 서비스 사고.
matrix_profile.py 모듈은 보존 (관찰/연구용). loop.py에서 호출만 제거.
폐기 사유: MP의 self-similar 시계열 가정이 daily seasonality 있는 트래픽과
안 맞음 + 단일 시그널이 contributor 단계로 무차별 차단 증폭
products/ironclad-website.md: 배포 표에 라우팅 방식 컬럼 추가.
production만 zone route 방식(custom_domain 대신 zone_name + /*)을 써서
기존 APISIX A record를 건드리지 않고 Cloudflare 엣지에서 Worker가
매칭 요청을 가로채는 구조. 전제 조건(crowdsec bouncer wildcard가
apex를 가로채지 않도록 *.ironclad.it.com/* 수정) 명시.
history/2026-04-21: 3차에 걸친 cutover 경로(DNS 충돌 → route 전환 →
crowdsec wildcard dot 누락 수정) + 현재 prod 상태 + 후속 정리 항목.
기존 Astro+Stitch 계획을 실제 구현(Next.js 16 App Router, opennextjs-cloudflare,
독자 Worker 3환경) 기준으로 갱신. 보안서비스 페이지 섹션별 콘텐츠 규칙 정리.
anvil-hosting(hosting.inouter.com)은 폐기된 실험으로 명시.
history/2026-04-21: Claude Design 도입 + /ko/security 본체 교체 경위 기록.
outline.inouter.com 을 Traefik 에서 APISIX 경유로 전환하고
chaitin-waf plugin 부착. CRD (ApisixTls + ApisixRoute,
ingressClassName=apisix) 로 관리. 정상 pass, SQLi 403 reject 검증.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Switched Bunny iron-kr-nowaf origin from :443 (Traefik) to :9443 (APISIX,
no SafeLine plugin) since APISIX plugins are per-route. Used existing
:9443 path (juiceshop already there) instead of opening a new OpenWrt
port. Outline route managed via ApisixTls + ApisixRoute CRDs because
admin-API direct PUTs get swept by apisix-ingress-controller as orphans.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
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>
Ties the existing /etc/rancher/k3s/config.yaml kubelet-arg (system-reserved=8Gi,
eviction-hard<2Gi) to the 2026-04-19 OOM freeze incident so it won't be
flagged as mystery asymmetry in future audits. Closes item 6 of 2026-04-20
K3s improvements.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>