2026 클라우드 Mac에서 OpenClaw Webhook 수신과 TLS 리버스 프록시
OpenClaw를 GitHub, Stripe, 내부 티켓에 연결하는 자동화 엔지니어는 SaaS 벤더가 HTTPS 콜백을 요구한다는 사실을 곧 깨닫습니다. 홍콩이나 싱가포르에 임대한 Mac mini에서 평문 HTTP 엔드포인트는 거절됩니다. 2026년에 통하는 패턴은 리버스 프록시(Caddy 또는 Nginx)에서 TLS를 종료하고 로컬 OpenClaw 리스너로 전달하며, 공유 시크릿이나 HMAC 헤더를 검증하고 macOS launchd로 인증서 갱신을 자동화하는 것입니다. 이 글은 에지 패턴을 비교하고, Caddy 배포 일곱 단계, 시크릿 처리, 실패 모드 목록, 프로세스가 불안정할 때 게이트웨이 트러블슈팅으로 안내합니다.
Webhook 장애는 DNS, 인증서, 방화벽, 상류 큐가 한꺼번에 얽힙니다. 변경마다 「에지 설정 버전」과 「OpenClaw 빌드 버전」 쌍을 남기면 벤더 전달 로그와 로컬 access_log 대조가 빨라집니다. 여러 시간대 온콜이라면 프록시용과 앱용 runbook을 분리해 밤중에 Caddy만 되돌리고 launchd 레이블은 맞지 않는 실수를 줄이세요.
클라우드 Mac에서 Webhook이 TLS를 요구하는 이유
공개 Webhook은 신뢰할 수 없는 네트워크를 지납니다. TLS는 URL에 실린 메타데이터 기밀성을 지키고, 캡티브 포털 등에서 단순 MITM 재전송을 어렵게 하며 벤더 컴플라이언스 체크리스트를 충족합니다. MacLogin 노드에서는 대개 스택을 직접 관리합니다. 공급자는 SSH와 선택적 VNC를 제공하고, 리스닝 포트와 인증서는 사용자 책임입니다.
벤더는 TLS 1.2 이상과 최신 암호 스위트를 요구하는 경우가 많습니다. 서버 간 콜백에서는 SNI 없는 레거시 클라이언트가 드물지만, 온프레미스 구 시스템이 있으면 예외로 문서화하세요.
무엇이든 노출하기 전에 게이트웨이 데몬 트러블슈팅 가이드로 OpenClaw 게이트웨이를 안정화하세요. 프로세스가 깜빡이면 원인이 Node나 plist에 있어도 먼저 의심받는 것은 리버스 프록시입니다.
에지 패턴 비교: 인바운드 443, 터널, 기업 LB
| 패턴 | 선택 시점 | 운영 비용 | TLS 소유 |
|---|---|---|---|
| Mac 호스트 공개 443 | DNS와 인바운드 방화벽을 직접 제어 | 중간——패치와 ACME 갱신 | 귀하(Let’s Encrypt ACME) |
| Cloudflare / ngrok 스타일 터널 | 인바운드 포트 불가 | 설정은 낮지만 터널 요금이 있을 수 있음 | 대개 커넥터 에지 |
| 기업 로드 밸런서 | 트래픽이 온프레 DMZ에 먼저 와야 함 | 높음——네트워크 팀 조율 | 사내 PKI 또는 공인 CA |
OpenClaw용 Caddy 리버스 프록시: 일곱 단계
- 리스너 포트 읽기: OpenClaw 설정에서 루프백 주소와 포트 확인(보통
127.0.0.1과 환경별 포트). - Homebrew로 Caddy: 버전 고정, 업그레이드는 변경 창에서.
- Caddyfile: 공개 호스트명, 자동 HTTPS,
reverse_proxy 127.0.0.1:PORT, Webhook POST 버스트용 플러시 간격. - DNS A/AAAA: 인스턴스 공인 IP를 가리킴. 전환 중 TTL 300초.
- 방화벽: 인터넷 또는 터널 피어만 443/tcp. 22/tcp는 SSH 정책대로 제한.
- launchd로 Caddy: 서비스 사용자 LaunchDaemon/Agent.
sudo launchctl bootstrap검증. - 벤더 스모크: 문서에 맞는 서명 헤더로 샘플 POST(예: curl과
X-Signature). OpenClaw 로그가 LAN 전달 경로에서 중앙값 200 ms 안에 구조화된 수락을 내는지 확인.
팀이 Nginx를 쓰면 proxy_pass와 certbot 훅에 일대일 대응시키면 됩니다.
지속 부하에서는 상류 keepalive 풀을 조정해 벤더 재시도마다 새 TLS를 열지 않게 하세요. 시작점은 워커당 유휴 연결 32, 유휴 60초, 이후 피크 p95로 조정. GitHub나 Stripe가 1초에 50건을내면 OpenClaw 큐 깊이와 프록시 본문 한도를 문서 최대 페이로드에 맞춰 413을 피합니다. Caddy는 request_body, Nginx는 client_max_body_size를 사용합니다.
마지막으로 프록시 계층에 앱 로그와 별도의 구조화 access 로그를 두세요. 벤더 전달 ID를 양쪽에 남기면 「도착 안 함」 주장인데 에지가 실제로는 401(예: 16:00 UTC 키 로테이션)을 준 경우를 빠르게 가릴 수 있습니다.
시크릿 헤더, HMAC 검증, 재생 허용 시간
URL 비밀만으로는 부족합니다. Webhook 시크릿은 macOS 키체인 또는 모드 0600 파일에. 타임스탬프 스큐는 벤더 문서가 없으면 300초 이내를 권장. 분기마다와 엔지니어 퇴사 후 로테이션.
OpenClaw가 자식 프로세스를 띄울 때는 해당 워커 수명 동안만 환경 변수로 시크릿을 주입하고 전역 읽기 가능 셸 기록에 쓰지 마세요. 서명 검증 실패 로깅 시 예상 다이제스트는 가리고 KMS가 노출하는 키 버전 ID만 출력합니다.
Webhook 실패 모드 표
| 증상 | 유력한 원인 | 첫 조치 |
|---|---|---|
| 에지 HTTP 502 | OpenClaw 리스너 다운 | 게이트웨이 데몬 로그 확인, launchctl 재시작 |
| TLS 핸드셰이크 오류 | 만료된 인증서 또는 잘못된 SNI | caddy validate 및 ACME 로그 |
| 200 OK인데 에이전트 동작 없음 | 서명 불일치 | 벤더 대시보드의 시크릿 버전 대조 |
| 미국 SaaS에서만 타임아웃 | APAC 호스트까지 긴 RTT | 수신기를 가깝게 옮기거나 미국 MacLogin 리전 추가 |
자주 묻는 질문
OpenClaw를 0.0.0.0에 바인딩해야 하나요? 강한 이유가 없으면 루프백+프록시를 권장. pf 규칙이 어긋날 때의 실수 노출을 줄입니다.
같은 인증서를 SSH에 재사용? 실질적 연관 없음. SSH는 호스트 키, HTTPS는 X.509. 독립 로테이션.
IPv6는? AAAA가 있으면 Caddy가 듀얼 스택으로 듣는지, 방화벽도 IPv6에 맞는지 확인.
프로덕션 DNS 전에 테스트하려면? 스플릿 DNS 또는 curl --resolve로 스테이징 중 공개 vhost에 맞춘 뒤 녹색이면 TTL 조정.
Mac mini M4 on MacLogin이 Webhook 에지에 맞는 이유
Webhook는 급격합니다. TLS, JSON 파싱, 에이전트 분산이 같은 초에 겹칩니다. Mac mini M4 통합 메모리는 동시 TLS 세션과 Node 워커를 스왑 적게 상주시키기 좋습니다. 홍콩·일본·한국·싱가포르·미국 호스팅으로 개발자와 주요 SaaS 이그레스를 함께 맞출 수 있습니다.
Webhook 전용 호스트와 대화형 Xcode 작업을 분리하면 인증서 실수가 빌드를 막기 어렵습니다. 예상 RPS에 맞춰 코어·RAM을 요금 페이지에서 고르고, SSH와 선택적 VNC를 도움말에 적어 여러 시간대 운영자가 따라가게 하세요.
Webhook 소스 가까이에 OpenClaw 두기
HK·JP·KR·SG·US 전용 Apple Silicon——SSH로 들어가 TLS 종료·자동화.