Security ops · 2026.4.x

OpenClaw MeshMac 실전: 다중 노드 게이트웨이 fail-closed 프록시·패치 화이트리스트·validate JSON으로 드리프트를 끊기

2026.04.25 Meshmac Team 8분 읽기

MeshMac 풀에서 OpenClaw 게이트웨이를 여러 대 두면 한 노드만 프록시 런타임 핫 리로드를 넓히고 동료 노드는 엄격한 채로 남는 전형이 반복됩니다. 2026.4.x는 모호한 런타임 변경을 fail-closed로 두고 패치·상향 화이트리스트doctor·validate JSON으로만 완화하라는 방향입니다. Node LTS·동일 설치·스냅샷·JSON·jq diff·롤백을 한 런북에 묶어 설정 드리프트를 줄입니다. 풀 전체 동기는 클러스터 설치·설정 동기화와 같이 보세요.

왜 다중 노드에서 정책이 갈라지나

  1. 단일 진실 부재. 한 호스트만 gateway.proxy.yaml을 고치고 풀 전체에 승격하지 않습니다.
  2. Git 밖 덮어쓰기. LaunchAgent·셸 프로파일이 리뷰 밖 프록시를 주입합니다.
  3. 조용한 부분 실패. 검증 실패 노드가 트래픽을 받으면 403·502가 상향 장애처럼 보입니다.

프록시 런타임 자세 결정표

접근 맞는 때 MeshMac 공유 풀 리스크
fail-open 리로드 단일 랩 오타가 풀 전체 출구를 넓힙니다.
fail-closed + 패치 화이트리스트 프로덕션 메시·CI·콜백 승격·JSON 점검은 필요, 폭발 반경은 작음.
파일만·런타임 미결합 문서용 프로세스는 옛 메모리 프록시를 씁니다.

재현 절차·명령

1) Node 핀. 각 호스트에서 node -v를 기록하고 22.x 또는 20.x LTS 한 줄로 통일합니다. 메이저 혼합은 TLS·OTel 기본값 차이로 드리프트처럼 보입니다.

2) 동일 빌드. 내부 채널·tarball 다이제스트를 고정하고 openclaw version을 티켓에 남깁니다.

3) 체크포인트 A(편집 전).

mkdir -p .meshmac-checkpoints/2026-04-25-gateway
cp gateway.proxy.yaml .meshmac-checkpoints/2026-04-25-gateway/
cp com.openclaw.gateway.plist .meshmac-checkpoints/2026-04-25-gateway/ 2>/dev/null || true

4) fail-closed 블록. proxy.runtime.fail_closed: trueallowed_patch_channels·allowed_upstream_hosts만 허용하고 와일드카드 리로드 URI는 끕니다. 미지의 키·파싱 오류는 시작 거부입니다. 토큰·포트는 IM·토큰 로테와 맞춥니다.

5) doctor → strict validate.

openclaw gateway doctor --json | tee /tmp/gw-doctor.json
openclaw gateway validate --config ./gateway.proxy.yaml --strict --json | tee /tmp/gw-validate.json

6) 포트·토큰. 관리 인트로스펙션은 127.0.0.1, 웹훅은 ACL 뒤 별 포트. 베어러는 키체인·시크릿 핸들만, YAML 평문 금지.

기대 JSON·노드 diff

ok: true는 게이트 전부 통과 시에만. 예시:

{
  "ok": true,
  "mesh_node_id": "meshmac-pool-7",
  "policy_revision": "gateway-proxy@2026-04-25.3",
  "fail_closed": true,
  "allowed_upstream_hosts": ["api.meshmac.internal", "hooks.slack.com"],
  "deny_reason": null
}

다중 노드는 jq로 정렬한 뒤 diff합니다.

for id in gw-a gw-b gw-c; do
  ssh "$id" 'openclaw gateway validate --config /etc/openclaw/gateway.proxy.yaml --strict --json'
done | jq -s 'sort_by(.mesh_node_id)' > /tmp/all-gw.json
jq -c '.[] | {mesh_node_id, policy_revision, fail_closed}' /tmp/all-gw.json

롤백 체크포인트

체크포인트 B: 카나리 validate 직후 YAML을 .ok로 한 벌 더 복사합니다. 이상 시 롤백: A 복원 → 유닛 리로드 → 전 노드 validate --strict --jsonok → 인바운드는 LB·페일오버 순서로. 티켓·실행자를 로그에 남깁니다.

런북에 붙일 상수

  • 검증 JSON에 mesh_node_id·policy_revision·fail_closed를 필수로 둡니다.
  • Node LTS 불일치는 OpenSSL·암호 스위트 차이로 MITM 진단을 흔들게 합니다.
  • 패치 아티팩트는 semver·다이제스트 핀, latest 금지.

더 읽기: 플러그인 fail-closed, 속도·세션 FAQ.

다음 단계·CTA

도움말··플랜(로그인 불필요). 클러스터 팀은 설치·동기화·OpenClaw 허브로 정책 리비전을 맞추세요.

드리프트를 끊은 뒤에도 메시를 한 줄로 유지하세요

JSON 검증·jq diff·체크포인트를 런북에 박고, 플랜·도움말·홈에서 노드와 액세스 방식을 이어갑니다.