openclaw onboard --install-daemon, Port 18789, optionale OPENCLAW_HOME-Mehrfachinstanzen. Mehr: Gateway-Härtung, Skills / doctor, CI-Gate. Konsole für Kurzblick; Preise, Kaufen, Hilfe ohne Login-Pflicht.
① Topologie und Least-Privilege-Prinzipien
OpenClaw-Daemon unter eigenem macOS-Benutzer; SSH getrennt; Modell-Egress nur über WireGuard — kleine Firewall- und Proxy-Regeln.
| Schicht | Empfohlene Massnahme | Sicherheitsnutzen |
|---|---|---|
| Steuerpfad | CI-Webhooks über Reverse-Proxy oder SSH-Tunnel auf 127.0.0.1 |
Kein sensibles JSON direkt am LAN |
| Datenpfad | Default-deny egress; nur Resolver, NTP, Modell-FQDNs, npm-Registry falls Skills es brauchen | Weniger Exfiltration und Zufalls-Downloads |
| Geheimnisse | openclaw.json und .env.gateway mit chmod 600; Rotation an HR-Prozesse koppeln |
Auditierbare Kette |
- Split-Control-Plane: Admin-SSH getrennt vom Dienstkonto, das
launchdstartet. - Keine breiten Tunnels ohne Not: Volltunnel nur bei harten Compliance-Vorgaben.
- Logging:
wg-Handshake-Alter und letzte erfolgreiche Modell-HEAD-Antwort in einer Zeile protokollieren. - Outbound-Review: Jede neue Skill-URL vor Freigabe in die Firewall-Whitelist aufnehmen und im Ticket verlinken.
② Offizielle Installation und doctor-Validierung
Node 22 LTS oder 24 pinnen; CLI per Release-curl-Einzeiler; openclaw onboard --install-daemon für LaunchAgent nach Logout.
node -v # Erwartung: v22.x oder v24.x # curl-Einzeiler aus der offiziellen OpenClaw-Installationsseite (URL je Release) openclaw onboard --install-daemon openclaw doctor openclaw gateway status --deep 2>/dev/null || openclaw gateway status
Nach dem ersten erfolgreichen doctor-Lauf die Ausgabe archivieren; bei Minor-Upgrades dient sie als Diff-Baseline für Provider-Keys und Bind-Parameter.
Zwei Instanzen: vor onboard jeweils OPENCLAW_HOME setzen (siehe CI-Gate).
- Global installiertes
openclawgehört demselben Unix-Benutzer wie dielaunchd-Label. openclaw doctorim Daemon-Kontext ohne Shell-Abweichung.- Port 18789 ist frei oder bewusst per Portweiterleitung geführt; nach Upgrades kein doppelter Listener.
③ WireGuard-Routing und DNS-Split
Enge AllowedIPs (Anbieter-CIDRs); Split-DNS nur für Modell-FQDNs — Git/CDN bleiben ausserhalb des Tunnels, damit CI nicht bremst.
sudo wg-quick up wg0 sudo wg show scutil --dns | head -n 80 curl -4sv --max-time 20 https://api.openai.com/v1/models \ -H "Authorization: Bearer $OPENAI_API_KEY" -o /dev/null
| Muster | Wann sinnvoll | Risiko bei Missachtung |
|---|---|---|
| Split-Tunnel + Split-DNS | Anbieter verlangen feste Egress-IPs; Git bleibt direkt | CI-Züge laufen unnötig über den Peer |
| Volltunnel | Strikte Enklaven | Höhere Reconnect-Sensitivität; Single Point of Failure |
| Statische IP nur am WG-Peer | IP-Allowlists beim Modellbetreiber | NAT-Drift bricht lange Agent-Läufe mitten in der Session |
④ Gateway-Bindung, Token und Domänen-Whitelist
Gateway an 127.0.0.1:18789, TLS am Rand. Bearer in Keychain oder Env laut Plist. Ausgehende Domänen wie in Gateway-Härtung — nur Modell/Tool/npm falls nötig.
export OPENCLAW_GATEWAY_TOKEN="$(openssl rand -hex 32)"
OC_PORT=$(jq -r '.gateway.port // 18789' "$HOME/.openclaw/openclaw.json" 2>/dev/null || echo 18789)
curl -sS -H "Authorization: Bearer $OPENCLAW_GATEWAY_TOKEN" \
"http://127.0.0.1:${OC_PORT}/health" || curl -sS "http://127.0.0.1:${OC_PORT}/"
⑤ Abbruch, Wiederverbindung und Health-Probes
Nach WG-Aussetzern: wg-quick hoch, dann Daemon neu starten (DNS-Cache). Minütliche curl-Probe per launchd; zwei Fehler hintereinander eskalieren.
ThrottleIntervalin der Plist gegen enge Neustart-Schleifen nach Provider-Timeouts.- Tarball der letzten funktionierenden
openclaw.jsonvor Routing-Experimenten — Rollback siehe Skills / Rollback / doctor.
⑥ CI-Webhook-Beispiel: fehlgeschlagene Schritte zusammenfassen
Fehlerzeilen aus Logs bündeln (<~4 KiB), sort -u, ein JSON mit job_id, commit_sha, summary_text. Backoff 2/4/8 s wie bei Argo-Webhook-Summary.
FAIL_LINES=$(grep -hEi 'error|fatal|invalid-key' "$CI_LOG_DIR"/*.log | tail -n 48 | sort -u)
curl -fsS -X POST "https://edge.example/v1/webhooks/ci" \
-H "Authorization: Bearer $OPENCLAW_GATEWAY_TOKEN" \
-H "Content-Type: application/json" \
-d "$(jq -n --arg t "$FAIL_LINES" --arg j "$CI_JOB_ID" --arg c "${CI_COMMIT_SHA:-}" \
'{summary_text:$t,job_id:$j,commit_sha:$c}')"
- Standard-Port
18789— perjqausopenclaw.jsonlesen, nicht hart im Skript duplizieren. - Backoff
2 / 4 / 8 s nach Konfigurationsänderungen und vor Health-Reads. - DNS-Check:
scutil --dnsund gezielterdig @resolverfür Anbieter-Hostnamen. - Handshake:
wg show wg0 latest-handshakesnach Reconnect mit Gateway-Logs korrelieren.
FAQ: typische Fehler
Uhrzeit-Drift oder CA-Bundle — doctor als Dienstbenutzer.
OPENCLAW_HOME/HTTP_PROXY in Plist vs. Shell vergleichen (launchctl print).
Proxy und Bearer atomar rotieren, dann ein Dienst-Restart.
Fazit und nächste Schritte
Remote-Mac für OpenClaw & WireGuard-Labore
Dedizierte Apple-Silicon-Knoten mit sauberem APFS und schnellen Neuinstallationen für Gateway-Nachweise. Preise und Checkout ohne Login-Pflicht; in der Konsole erhalten Sie einen begrenzten Gratis-Blick auf verfügbare Maschinen.