OpenClaw sicher auf einem VPS bereitstellen

14 Min. Lesezeit·Matthieu·openclawdockersecuritynginxsystemdfirewall|

OpenClaw auf einem VPS installieren und absichern: Gateway-Authentifizierung, TLS-Reverse-Proxy, Docker-Sandboxing, Firewall-Härtung und systemd-Isolation. Jeder Schritt mit Prüfbefehl.

OpenClaw ist ein quelloffener, selbst gehosteter KI-Assistent, der sich mit Messaging-Apps (WhatsApp, Telegram, Discord, Slack, Signal) und KI-Modellanbietern verbindet. Er führt einen Gateway-Prozess auf Ihrem Server aus, empfängt Nachrichten, führt Agenten-Aktionen mit Tools aus und sendet Antworten. Alle Daten bleiben auf Ihrer Infrastruktur.

Diese Anleitung führt durch eine sicherheitsorientierte Bereitstellung auf einem VPS mit Ubuntu 24.04. Sie werden das Betriebssystem härten, OpenClaw installieren, die Gateway-Authentifizierung konfigurieren, Nginx mit TLS als Reverse Proxy einrichten, den Docker/UFW-Firewall-Bypass beheben, Docker-Sandboxing aktivieren, die Tool-Richtlinie einschränken und das Gateway als gehärteten systemd-Dienst betreiben.

Warum ist die Sicherheit von OpenClaw auf einem VPS wichtig?

OpenClaw führt KI-Agenten aus, die Shell-Befehle ausführen, Dateien lesen und im Web surfen können. Eine fehlkonfigurierte Instanz gibt Angreifern dieselben Fähigkeiten. Das ist nicht theoretisch.

Anfang 2026 fanden Forscher über 42.000 öffentlich erreichbare OpenClaw-Instanzen im Internet. 63% waren für Remote-Ausnutzung anfällig. CVE-2026-25253 (CVSS 8.8) ermöglichte Remote Code Execution mit einem Klick durch Exfiltration des Auth-Tokens über einen böswilligen Link. Der Angreifer konnte das Gateway-Token stehlen, sich per WebSocket verbinden, Bestätigungsaufforderungen deaktivieren, das Docker-Sandboxing umgehen und beliebige Befehle ausführen.

Der Fix wurde in Version 2026.1.29 veröffentlicht, aber Patches allein reichen nicht aus. Sicherheit erfordert Schichten: Netzwerkisolation, Authentifizierung, TLS, Sandboxing und Tool-Einschränkungen müssen zusammenwirken. Eine einzige fehlende Schicht (z.B. Gateway-Auth ohne Firewall) hinterlässt einen direkten Weg zur Kompromittierung.

Was brauchen Sie vor dem Start?

Voraussetzung Details
VPS Ubuntu 24.04, mindestens 4 vCPU, 8 GB RAM
Domainname A-Record, der auf Ihre VPS-IP zeigt (z.B. openclaw.example.com)
SSH-Zugang Schlüsselbasierte Authentifizierung konfiguriert
KI-Anbieter-API-Key Anthropic, OpenAI oder Google Gemini
Node.js Version 22 oder neuer
Docker Engine 20+ mit Compose-Plugin

Wenn Sie Hilfe bei der Bereitstellung eines VPS oder der Einrichtung von SSH-Schlüsseln brauchen, lesen Sie Linux VPS Security: Bedrohungen, Schutzschichten und Hardening-Guide.

Wie härten Sie den VPS vor der Installation von OpenClaw?

Bevor Sie etwas installieren, sichern Sie das Betriebssystem ab. Wenn Sie bereits Linux VPS Security: Bedrohungen, Schutzschichten und Hardening-Guide und SSH-Härtung auf einem Linux-VPS: sshd_config Sicherheitsanleitung befolgt haben, springen Sie zum nächsten Abschnitt.

Dedizierten Benutzer erstellen

Dienste als root auszuführen ist ein unnötiges Risiko. Erstellen Sie einen openclaw-Systembenutzer:

sudo useradd -r -m -s /bin/bash openclaw

Das erstellt ein Systemkonto mit Home-Verzeichnis. OpenClaw speichert seine Konfiguration in ~/.openclaw, daher ist das Home-Verzeichnis erforderlich.

UFW konfigurieren

Installieren und aktivieren Sie die Firewall, bevor Sie Dienste freigeben:

sudo apt update && sudo apt install -y ufw
sudo ufw default deny incoming
sudo ufw default allow outgoing
sudo ufw allow 22/tcp comment 'SSH'
sudo ufw allow 80/tcp comment 'HTTP'
sudo ufw allow 443/tcp comment 'HTTPS'
sudo ufw enable

Regeln prüfen:

sudo ufw status verbose

Sie sollten die drei erlaubten Ports und eine Standard-Deny-Richtlinie für eingehenden Verkehr sehen. Port 18789 (das OpenClaw-Gateway) fehlt absichtlich. Das Gateway bindet nur an localhost und sitzt hinter Nginx.

fail2ban installieren

sudo apt update && sudo apt install -y fail2ban
sudo systemctl enable --now fail2ban

Prüfen Sie, ob es läuft:

sudo systemctl status fail2ban

Die Ausgabe sollte active (running) zeigen. fail2ban überwacht SSH-Logs und sperrt IPs nach wiederholten fehlgeschlagenen Anmeldeversuchen.

Wie installieren Sie OpenClaw auf Ubuntu?

OpenClaw unterstützt zwei Installationsmethoden: npm (direkt) und Docker. Beide werden unten behandelt. Wählen Sie eine. Docker wird für VPS-Bereitstellungen empfohlen, da die Container-Isolation den Schadensradius begrenzt, falls der Agenten-Prozess kompromittiert wird.

Option A: Docker-Installation (empfohlen)

Installieren Sie Docker, falls noch nicht vorhanden:

sudo apt install -y ca-certificates curl gnupg
sudo install -m 0755 -d /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
sudo chmod a+r /etc/apt/keyrings/docker.gpg
echo "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu $(. /etc/os-release && echo "$VERSION_CODENAME") stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
sudo apt update
sudo apt install -y docker-ce docker-ce-cli containerd.io docker-compose-plugin

Fügen Sie den openclaw-Benutzer zur Docker-Gruppe hinzu:

sudo usermod -aG docker openclaw

Hinweis: Die Mitgliedschaft in der Docker-Gruppe gewährt das Äquivalent von Root-Zugriff auf dem Host. Das ist für die Docker-Funktionalität von OpenClaw erforderlich, aber es bedeutet, dass der openclaw-Benutzer alle Container auf dem System steuern kann. Die systemd-Härtung und Sandbox-Isolation weiter unten begrenzen, was der OpenClaw-Prozess tatsächlich tun kann.

Wechseln Sie zum openclaw-Benutzer und richten Sie OpenClaw ein:

sudo -u openclaw -i

Klonen Sie das Repository und führen Sie das Setup mit dem offiziellen vorgebauten Image aus:

git clone https://github.com/openclaw/openclaw.git ~/openclaw-src
cd ~/openclaw-src
OPENCLAW_IMAGE=ghcr.io/openclaw/openclaw:latest ./docker-setup.sh

Die Variable OPENCLAW_IMAGE weist das Skript an, das vorgebaute Image aus der GitHub Container Registry zu ziehen, statt aus dem Quellcode zu bauen. Das Skript führt das Onboarding durch und startet das Gateway über Docker Compose.

Das Gateway im Container bindet standardmäßig an alle Interfaces (lan-Modus). Das ist bei Docker-Bereitstellungen korrekt, da Dockers Port-Mapping das Gateway im Container erreichen muss. Externer Zugriff wird auf Host-Ebene durch DOCKER-USER-iptables-Regeln blockiert (weiter unten behandelt).

Prüfen Sie, ob das Gateway läuft:

curl -fsS http://127.0.0.1:18789/healthz

Eine 200 OK-Antwort bestätigt, dass das Gateway aktiv ist. Der /readyz-Endpoint bestätigt, dass es bereit ist, Verbindungen anzunehmen:

curl -fsS http://127.0.0.1:18789/readyz

Option B: npm-Installation

Installieren Sie Node.js 22 über NodeSource:

curl -fsSL https://deb.nodesource.com/setup_22.x | sudo -E bash -
sudo apt install -y nodejs

Prüfen Sie die Version:

node --version

Die Ausgabe sollte v22.x.x oder neuer zeigen.

Wechseln Sie zum openclaw-Benutzer und installieren Sie:

sudo -u openclaw -i
npm install -g openclaw@latest

Führen Sie das Onboarding aus:

openclaw onboard

Wählen Sie loopback für den Bind-Modus. Der Onboarding-Assistent generiert ein Gateway-Auth-Token und speichert es in ~/.openclaw/openclaw.json.

Starten Sie das Gateway:

openclaw gateway start

Prüfen:

curl -fsS http://127.0.0.1:18789/healthz

Gateway-Binding prüfen

Prüfen Sie, worauf das Gateway lauscht:

ss -tulpn | grep 18789

Bei npm-Installationen: Die Ausgabe sollte 127.0.0.1:18789 zeigen, nicht 0.0.0.0:18789. Wenn Sie 0.0.0.0 sehen, stoppen Sie das Gateway und setzen Sie gateway.bind auf "loopback" in openclaw.json.

Bei Docker-Installationen: Sie werden 0.0.0.0:18789 vom docker-proxy-Prozess sehen. Das ist normal. Dockers Port-Mapping veröffentlicht den Port auf allen Host-Interfaces, damit localhost-Verkehr den Container erreichen kann. Die DOCKER-USER-iptables-Regeln (weiter unten im Firewall-Abschnitt) blockieren externen Zugriff auf Netzwerkebene.

Dateiberechtigungen einschränken

Die Konfigurationsdatei enthält Ihr Auth-Token und Ihre API-Keys:

chmod 700 /home/openclaw/.openclaw
chmod 600 /home/openclaw/.openclaw/openclaw.json

Prüfen:

ls -la /home/openclaw/.openclaw/openclaw.json

Sie sollten -rw------- sehen. Bei npm-Installationen ist der Eigentümer openclaw. Bei Docker-Installationen kann der Eigentümer als UID 1000 angezeigt werden (der node-Benutzer im Container). Das ist normal und erforderlich, damit der Container die Konfiguration lesen kann.

Wie konfigurieren Sie die Gateway-Authentifizierung?

Das Gateway von OpenClaw erfordert standardmäßig eine Authentifizierung. Wenn kein Token oder Passwort konfiguriert ist, lehnt das Gateway WebSocket-Verbindungen ab (Fail-Closed). Der Onboarding-Assistent generiert automatisch ein Token.

OpenClaw unterstützt drei Authentifizierungsmodi:

Modus Funktionsweise Geeignet für
token Gemeinsames Bearer-Token in jeder Anfrage Einzelbenutzer-VPS (empfohlen)
password Passwortbasierte Authentifizierung Setups mit mehreren Geräten
trusted-proxy Delegiert Auth an einen Reverse Proxy Enterprise/SSO-Setups

Ein starkes Token setzen

Wenn Sie das automatisch generierte Token ersetzen möchten, generieren Sie ein neues:

openssl rand -base64 32

Speichern Sie es als Umgebungsvariable, anstatt es in der Konfigurationsdatei fest zu codieren. Erstellen Sie eine Umgebungsdatei:

sudo mkdir -p /etc/openclaw
sudo tee /etc/openclaw/env > /dev/null << 'EOF'
OPENCLAW_GATEWAY_TOKEN=your-generated-token-here
EOF
sudo chmod 600 /etc/openclaw/env
sudo chown openclaw:openclaw /etc/openclaw/env

Bearbeiten Sie ~/.openclaw/openclaw.json, um die Umgebungsvariable zu referenzieren:

{
  gateway: {
    bind: "loopback",  // use "loopback" for npm, keep default for Docker
    port: 18789,
    auth: {
      mode: "token",
      token: "${OPENCLAW_GATEWAY_TOKEN}"
    }
  }
}

OpenClaw unterstützt ${VARIABLE}-Substitution in seiner JSON5-Konfiguration, sodass das Token beim Start aus der Umgebung gelesen wird. Bei Docker-Installationen setzen Sie die OPENCLAW_GATEWAY_TOKEN-Variable stattdessen in der .env-Datei in Ihrem openclaw-src-Verzeichnis. Das docker-setup.sh-Skript generiert diese Datei automatisch.

Starten Sie das Gateway neu und testen Sie, ob unauthentifizierte Anfragen abgelehnt werden:

curl -s -o /dev/null -w "%{http_code}" http://127.0.0.1:18789/healthz

Der Health-Endpoint gibt 200 ohne Auth zurück (es ist ein Health Check). Um die Auth-Durchsetzung am WebSocket-Endpoint zu testen, prüfen Sie die Gateway-Logs:

Bei systemd/npm-Installationen:

journalctl -u openclaw-gateway --no-pager -n 20

Bei Docker-Installationen:

cd ~/openclaw-src && docker compose logs openclaw-gateway --tail 20

Suchen Sie nach auth required- oder connection rejected-Einträgen, die das Fail-Closed-Verhalten bestätigen.

Wie richten Sie Nginx als TLS-Reverse-Proxy für OpenClaw ein?

Das Gateway bindet an localhost. Nginx sitzt davor, terminiert TLS und leitet WebSocket-Verbindungen an das Gateway weiter. So erhalten Sie verschlüsselte Verbindungen, ohne den Gateway-Port freizugeben.

Hintergrundinformationen zu Nginx-Reverse-Proxys finden Sie unter Nginx als Reverse Proxy konfigurieren. Zur TLS-Einrichtung mit Let's Encrypt lesen Sie Let's Encrypt SSL/TLS für Nginx einrichten auf Debian 12 und Ubuntu 24.04.

Nginx und Certbot installieren

sudo apt install -y nginx certbot python3-certbot-nginx

TLS-Zertifikat beschaffen

sudo certbot --nginx -d openclaw.example.com

Ersetzen Sie openclaw.example.com durch Ihre tatsächliche Domain. Certbot konfiguriert die automatische Erneuerung.

Reverse Proxy konfigurieren

Erstellen Sie den Nginx-Serverblock:

sudo tee /etc/nginx/sites-available/openclaw.conf > /dev/null << 'NGINX'
server {
    listen 443 ssl;
    listen [::]:443 ssl;
    server_name openclaw.example.com;

    ssl_certificate /etc/letsencrypt/live/openclaw.example.com/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/openclaw.example.com/privkey.pem;
    include /etc/letsencrypt/options-ssl-nginx.conf;
    ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem;

    # Hide Nginx version
    server_tokens off;

    # WebSocket proxy to OpenClaw gateway
    location / {
        proxy_pass http://127.0.0.1:18789;

        # WebSocket support
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";

        # Overwrite X-Forwarded-For, do not append
        proxy_set_header X-Forwarded-For $remote_addr;
        proxy_set_header X-Forwarded-Proto $scheme;
        proxy_set_header Host $host;

        # Timeouts for long-running agent sessions
        proxy_read_timeout 86400s;
        proxy_send_timeout 86400s;
    }
}

server {
    listen 80;
    listen [::]:80;
    server_name openclaw.example.com;
    return 301 https://$host$request_uri;
}
NGINX

Beachten Sie: proxy_set_header X-Forwarded-For $remote_addr verwendet $remote_addr (überschreiben), nicht $proxy_add_x_forwarded_for (anhängen). Das ist Absicht. Beim Anhängen können Clients gefälschte IPs in den Header einschleusen. Die OpenClaw-Dokumentation empfiehlt ausdrücklich das Überschreiben.

Aktivieren Sie die Site und testen Sie die Konfiguration:

sudo ln -s /etc/nginx/sites-available/openclaw.conf /etc/nginx/sites-enabled/
sudo nginx -t

Die Ausgabe sollte syntax is ok und test is successful zeigen. Laden Sie Nginx neu:

sudo systemctl reload nginx

OpenClaw so konfigurieren, dass es dem Proxy vertraut

Weisen Sie das Gateway an, den weitergeleiteten Headern von Nginx zu vertrauen, indem Sie trustedProxies zu ~/.openclaw/openclaw.json hinzufügen:

{
  gateway: {
    bind: "loopback",  // use "loopback" for npm, keep default for Docker
    port: 18789,
    trustedProxies: ["127.0.0.1"],
    auth: {
      mode: "token",
      token: "${OPENCLAW_GATEWAY_TOKEN}"
    }
  }
}

Starten Sie das Gateway neu, um die Änderungen zu übernehmen. Prüfen Sie von Ihrem lokalen Rechner (nicht dem Server), ob TLS funktioniert:

curl -I https://openclaw.example.com/healthz

Sie sollten eine 200-Antwort über HTTPS erhalten. Nginx-Sicherheitshärtung unter Ubuntu und DebianWeitere Informationen zur Nginx-Sicherheitshärtung finden Sie im Nginx Security Hardening Guide (in Kürze verfügbar).

Wie beheben Sie den Docker- und UFW-Firewall-Bypass?

Docker manipuliert iptables direkt und umgeht UFW vollständig. Wenn Sie OpenClaw mit Docker ausführen und einen Port veröffentlichen, ist dieser Port aus dem Internet erreichbar, selbst wenn UFW ihn blockiert. Das ist eine der häufigsten Fehlkonfigurationen bei Docker-Bereitstellungen.

Eine vollständige Erklärung dieses Problems finden Sie unter Docker umgeht UFW: 4 getestete Lösungen für Ihren VPS.

Der Fix verwendet die DOCKER-USER-Chain, die Docker verarbeitet, bevor Verkehr an Container weitergeleitet wird.

Gesamten externen Zugriff auf Docker-Ports blockieren

sudo iptables -I DOCKER-USER -i eth0 -j DROP

Das verwirft allen Verkehr vom externen Interface (eth0), den Docker sonst an Container weiterleiten würde. Passen Sie den Interfacenamen an, falls Ihrer abweicht (prüfen mit ip link show).

Loopback-Verkehr erlauben

Nginx auf demselben Host muss den Gateway-Container über localhost erreichen:

sudo iptables -I DOCKER-USER -i lo -j ACCEPT

Bestehende Verbindungen erlauben

sudo iptables -I DOCKER-USER -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT

Regeln persistent machen

sudo apt install -y iptables-persistent
sudo netfilter-persistent save

Regeln prüfen

sudo iptables -L DOCKER-USER -n -v

Sie sollten die ACCEPT-Regeln für Loopback und bestehende Verbindungen über der DROP-Regel für eth0 sehen. Die Reihenfolge ist wichtig: iptables verarbeitet Regeln von oben nach unten.

Testen Sie von einem externen Rechner, ob der Gateway-Port nicht erreichbar ist:

nmap -p 18789 your-server-ip

Port 18789 sollte filtered oder closed anzeigen, nicht open.

Wie aktivieren Sie Docker-Sandboxing für OpenClaw?

Docker-Sandboxing führt Agenten-Tool-Ausführungen in isolierten Containern aus. Wenn ein Agent einen Shell-Befehl ausführt oder eine Datei schreibt, geschieht das in einem Wegwerf-Container, nicht auf Ihrem Host.

Fügen Sie die Sandbox-Konfiguration zu ~/.openclaw/openclaw.json hinzu:

{
  agents: {
    defaults: {
      sandbox: {
        mode: "all",
        scope: "session",
        workspaceAccess: "none",
        docker: {
          image: "openclaw-sandbox:bookworm-slim",
          network: "none",
          user: "1000:1000",
          memory: "1g",
          cpus: 1
        }
      }
    }
  }
}

Was jede Einstellung bewirkt:

Einstellung Wert Wirkung
mode "all" Jede Sitzung läuft in der Sandbox, ohne Ausnahmen
scope "session" Jede Chat-Sitzung bekommt ihren eigenen Container
workspaceAccess "none" Die Sandbox kann den Agenten-Workspace nicht sehen
network "none" Kein Netzwerkzugriff aus der Sandbox (verhindert Datenabfluss)
memory "1g" Begrenzt den Container-RAM auf 1 GB
cpus 1 Begrenzt den Container auf 1 CPU-Kern

Bauen Sie das Sandbox-Image:

cd ~/openclaw-src
scripts/sandbox-setup.sh

Sandbox-Konfiguration prüfen:

openclaw sandbox explain

Bei Docker-Installationen über Compose ausführen:

cd ~/openclaw-src && docker compose exec openclaw-gateway node dist/index.js sandbox explain

Dieser Befehl gibt den effektiven Sandbox-Modus, Scope, Workspace-Zugriff, die Tool-Richtlinie und eventuelle Überschreibungen aus. Bestätigen Sie, dass mode: all und network: none in der Ausgabe erscheinen.

Wenn Sie Netzwerkzugriff für bestimmte Tools benötigen (z.B. web_search), gewähren Sie ihn selektiv pro Agent, anstatt den globalen Standard zu ändern. Siehe den Abschnitt zur Tool-Richtlinie unten.

OpenClaw blockiert standardmäßig gefährliche Bind-Mount-Quellen: /var/run/docker.sock, /etc, /proc, /sys und /dev werden alle abgelehnt. Überschreiben Sie das nicht mit benutzerdefinierten Bind Mounts, die sie erneut freigeben. Wenn ein Sandbox-Container Zugriff auf Host-Daten benötigt, verwenden Sie schreibgeschützte Mounts mit expliziten Pfaden:

{
  agents: {
    defaults: {
      sandbox: {
        docker: {
          binds: ["/home/openclaw/shared-data:/data:ro"]
        }
      }
    }
  }
}

Das :ro-Suffix stellt sicher, dass der Container die Daten lesen, aber nicht ändern kann.

Wie schränken Sie die OpenClaw-Tool-Richtlinie ein?

Die Tool-Richtlinie steuert, welche Tools Agenten verwenden können. Die Sandbox hat ihren eigenen Tool-Filter, getrennt von den Berechtigungen auf Agentenebene. Deny gewinnt immer über Allow.

Standard-Deny-Richtlinie

Setzen Sie eine restriktive Standardeinstellung in ~/.openclaw/openclaw.json:

{
  tools: {
    deny: ["exec", "write", "edit", "browser"],
    allow: ["read", "web_search"]
  }
}

Das blockiert standardmäßig Befehlsausführung, Dateischreiben, Dateibearbeitung und Browserzugriff. Agenten können weiterhin Dateien lesen und im Web suchen.

Profile pro Agent

Überschreiben Sie die Standards für bestimmte Agenten, die mehr Zugriff benötigen. Fügen Sie Profile unter agents.list hinzu:

{
  agents: {
    list: [
      {
        name: "coding-agent",
        tools: {
          allow: ["exec", "read", "write", "edit"],
          deny: ["browser"]
        },
        sandbox: {
          mode: "all",
          docker: {
            network: "none"
          }
        }
      },
      {
        name: "messaging-agent",
        tools: {
          allow: ["read", "web_search"],
          deny: ["exec", "write", "edit", "browser"]
        }
      }
    ]
  }
}

Der coding-agent kann Befehle ausführen, aber nur in einem Sandbox-Container ohne Netzwerk. Der messaging-agent kann lesen und suchen, aber nichts ausführen.

Elevated Mode deaktivieren

Der Elevated Mode lässt Agenten Befehle direkt auf dem Gateway-Host ausführen und umgeht die Sandbox. Deaktivieren Sie ihn:

{
  tools: {
    elevated: {
      enabled: false
    }
  }
}

Wenn Sie den Elevated Mode aktiviert lassen, kann jeder Benutzer, der mit dem Agenten chatten kann, potenziell Host-Befehle ausführen. Auf einem VPS ist das Remote Code Execution.

Multi-User-DM-Isolation

Wenn mehrere Personen Ihrer OpenClaw-Instanz Nachrichten senden werden, aktivieren Sie DM-Scoping pro Peer. Standardmäßig teilen sich alle DMs eine einzelne Hauptsitzung. Das bedeutet, Benutzer A kann den Kontext aus der Konversation von Benutzer B sehen.

{
  session: {
    dmScope: "per-peer"
  }
}

Das gibt jedem Absender seine eigene Sitzung mit isoliertem Kontext und Sandbox-Container.

Wie führen Sie OpenClaw als gehärteten systemd-Dienst aus?

OpenClaw unter systemd auszuführen bedeutet, dass es beim Booten startet, bei Abstürzen neu startet und durch Härtungsdirektiven Prozessisolation erhält.

Service-Unit erstellen

Erstellen Sie für Docker-Installationen die folgende Unit-Datei:

sudo tee /etc/systemd/system/openclaw-gateway.service > /dev/null << 'EOF'
[Unit]
Description=OpenClaw Gateway
After=network-online.target docker.service
Wants=network-online.target
Requires=docker.service

[Service]
Type=simple
User=openclaw
Group=openclaw
WorkingDirectory=/home/openclaw/openclaw-src
EnvironmentFile=/etc/openclaw/env
ExecStart=/usr/bin/docker compose up --no-log-prefix openclaw-gateway
ExecStop=/usr/bin/docker compose down
Restart=always
RestartSec=10

# Security hardening
NoNewPrivileges=yes
PrivateTmp=yes
ProtectSystem=strict
ProtectHome=read-only
ReadWritePaths=/home/openclaw/.openclaw
CapabilityBoundingSet=
ProtectKernelTunables=yes
ProtectKernelModules=yes
ProtectControlGroups=yes
RestrictSUIDSGID=yes
MemoryMax=4G

[Install]
WantedBy=multi-user.target
EOF

Ersetzen Sie bei npm-Installationen die ExecStart- und ExecStop-Zeilen:

ExecStart=/usr/bin/openclaw gateway start --foreground
ExecStop=/usr/bin/openclaw gateway stop

Und entfernen Sie die Zeile Requires=docker.service.

Was jede Härtungsdirektive bewirkt:

Direktive Schutz
NoNewPrivileges Verhindert, dass der Prozess über setuid/setgid zusätzliche Rechte erlangt
PrivateTmp Gibt dem Dienst sein eigenes /tmp, unsichtbar für andere Prozesse
ProtectSystem=strict Mountet das gesamte Dateisystem schreibgeschützt, ausser explizite ReadWritePaths
ProtectHome=read-only Verhindert Schreiben in jedes Home-Verzeichnis ausser dem erlaubten Pfad
CapabilityBoundingSet= Entfernt alle Linux-Capabilities (leere Menge)
ProtectKernelTunables Blockiert Schreiben in /proc/sys, /sys
ProtectKernelModules Verhindert das Laden von Kernel-Modulen
MemoryMax=4G Beendet den Dienst, wenn er 4 GB RAM überschreitet, und verhindert OOM auf dem Host

Aktivieren und starten

sudo systemctl daemon-reload
sudo systemctl enable --now openclaw-gateway

enable sorgt für den Start beim Booten. --now startet sofort.

Prüfen Sie, ob es läuft:

sudo systemctl status openclaw-gateway

Die Ausgabe sollte active (running) zeigen. Prüfen Sie die Logs auf Fehler:

journalctl -u openclaw-gateway -f --no-pager -n 50

Wie prüfen Sie, ob die gesamte Bereitstellung sicher ist?

Gehen Sie diese Checkliste nach der Bereitstellung durch, um zu bestätigen, dass jede Schicht funktioniert.

1. OpenClaws integriertes Sicherheitsaudit ausführen

Bei npm-Installationen:

sudo -u openclaw openclaw security audit --deep

Bei Docker-Installationen:

cd ~/openclaw-src && docker compose exec openclaw-gateway node dist/index.js security audit --deep

Das erkennt häufige Fehlkonfigurationen: unauthentifizierte Netzwerkexposition, erhöhte Tool-Berechtigungen, Probleme mit Dateiberechtigungen. Beheben Sie alle Warnungen, bevor Sie fortfahren.

2. Gateway-Binding bestätigen

ss -tulpn | grep 18789

npm-Installationen: Erwartet 127.0.0.1:18789. Nicht 0.0.0.0:18789.

Docker-Installationen: Erwartet 0.0.0.0:18789 von docker-proxy. Das ist normal. Externer Zugriff wird durch die DOCKER-USER-iptables-Regeln blockiert.

3. Externer Portscan

Von Ihrem lokalen Rechner (nicht dem Server):

nmap -p 18789 your-server-ip

Erwartet: filtered oder closed.

4. TLS prüfen

curl -I https://openclaw.example.com/healthz

Erwartet: 200 über HTTPS mit einem gültigen Zertifikat.

5. Auth-Durchsetzung testen

curl -s -o /dev/null -w "%{http_code}" https://openclaw.example.com/

Das Gateway sollte für Nicht-Health-Endpoints eine Authentifizierung verlangen.

6. Sandbox-Isolation prüfen

Bei npm-Installationen:

sudo -u openclaw openclaw sandbox explain

Bei Docker-Installationen:

cd ~/openclaw-src && docker compose exec openclaw-gateway node dist/index.js sandbox explain

Bestätigen Sie mode: all, network: none und keine Elevated-Überschreibungen.

7. Dateiberechtigungen prüfen

ls -la /home/openclaw/.openclaw/openclaw.json
ls -la /etc/openclaw/env

Beide sollten 600-Berechtigungen zeigen. Die env-Datei gehört openclaw. Bei Docker-Installationen kann openclaw.json der UID 1000 gehören (der node-Benutzer des Containers).

8. systemd-Härtung prüfen

systemd-analyze security openclaw-gateway

Das bewertet die Sicherheitseigenschaften des Dienstes. Streben Sie einen Score von etwa 5.0 oder niedriger an (niedriger ist sicherer). Docker-basierte Dienste erreichen typischerweise 5.0-5.5, da Docker Zugriff auf Namespaces und Geräte-Interfaces benötigt. Die obigen Härtungsdirektiven senken den Score vom Standard ~9.6 auf etwa 5.2.

9. UFW- und DOCKER-USER-Regeln prüfen

sudo ufw status
sudo iptables -L DOCKER-USER -n -v

UFW sollte nur die Ports 22, 80 und 443 zeigen. Die DOCKER-USER-Chain sollte externen Verkehr verwerfen.

10. Auf freigegebene Dienste prüfen

ss -tulpn

Nur SSH (22), Nginx (80, 443) und OpenClaw (127.0.0.1:18789 bei npm oder 0.0.0.0:18789 über docker-proxy bei Docker) sollten erscheinen.

Wie halten Sie OpenClaw aktuell und gesichert?

Versionsverbergung

Verbergen Sie die OpenClaw-Version in Gateway-Antworten. Die Offenlegung der Version hilft Angreifern, bekannte Schwachstellen gezielt auszunutzen. In ~/.openclaw/openclaw.json:

{
  gateway: {
    exposeVersion: false
  }
}

Zusammen mit der server_tokens off;-Direktive in der Nginx-Konfiguration verhindert das Fingerprinting sowohl des Reverse Proxy als auch der Anwendung.

Aktualisierungen

OpenClaw veröffentlicht häufig Updates. Prüfen Sie die aktuelle Version:

openclaw --version

Bei Docker-Installationen:

cd ~/openclaw-src && docker compose exec openclaw-gateway node dist/index.js --version

Um eine Docker-Installation zu aktualisieren:

cd ~/openclaw-src
git pull
docker compose pull
docker compose up -d openclaw-gateway

Um eine npm-Installation zu aktualisieren:

npm update -g openclaw

Starten Sie nach dem Update das Gateway neu und führen Sie das Sicherheitsaudit erneut aus:

sudo systemctl restart openclaw-gateway

Bei npm:

sudo -u openclaw openclaw security audit

Bei Docker:

cd ~/openclaw-src && docker compose exec openclaw-gateway node dist/index.js security audit

Lesen Sie die Release Notes vor dem Upgrade. Änderungen am Konfigurationsformat kommen vor. Version 2026.3.7 führte ein erforderliches gateway.auth.mode-Feld ein, wenn sowohl token als auch password vorhanden sind. Fehlt es nach dem Upgrade, werden Sie vom Gateway ausgesperrt.

Backups

Sichern Sie das Konfigurationsverzeichnis:

sudo tar czf /root/openclaw-backup-$(date +%Y%m%d).tar.gz /home/openclaw/.openclaw

Speichern Sie Backups außerhalb des Servers. Das Konfigurationsverzeichnis enthält Ihre Auth-Tokens, Agenten-Konfigurationen und den Konversationszustand. Schützen Sie Backups mit derselben Sorgfalt wie die Live-Konfiguration: Verschlüsseln Sie sie mit gpg oder speichern Sie sie auf einem verschlüsselten Volume.

Log-Verwaltung

Logs in Echtzeit anzeigen:

journalctl -u openclaw-gateway -f

OpenClaw-Logs können Konversationsausschnitte enthalten. Legen Sie eine Log-Aufbewahrungsfrist fest, um die Exposition zu begrenzen:

sudo tee /etc/systemd/journald.conf.d/openclaw.conf > /dev/null << 'EOF'
[Journal]
MaxRetentionSec=7d
MaxFileSec=1d
EOF
sudo systemctl restart systemd-journald

Etwas ist schiefgelaufen?

Symptom Wahrscheinliche Ursache Lösung
Gateway startet nicht Port 18789 bereits belegt ss -tulpn | grep 18789 um den konfliktverursachenden Prozess zu finden
WebSocket-Verbindungen schlagen über Nginx fehl Fehlende Upgrade- und Connection-Header Prüfen Sie die proxy_set_header-Direktiven in Ihrer Nginx-Konfiguration
Sandbox-Container starten nicht Docker-Socket-Berechtigungen Stellen Sie sicher, dass der openclaw-Benutzer in der docker-Gruppe ist, und melden Sie sich erneut an
openclaw security audit zeigt Warnungen Konfigurationsabweichung nach Update Prüfen Sie die Audit-Ausgabe und wenden Sie die empfohlenen Fixes an
Gateway von externer IP erreichbar Docker/UFW-Bypass Fügen Sie DOCKER-USER-iptables-Regeln wie oben beschrieben hinzu
TLS-Zertifikatsfehler Certbot-Erneuerung fehlgeschlagen Führen Sie sudo certbot renew --dry-run zur Diagnose aus
OOM-Kills auf dem VPS Fehlendes MemoryMax in der systemd-Unit Fügen Sie MemoryMax=4G im [Service]-Abschnitt hinzu

KI-Agent-Server absichern: Sandboxing, Firewall und MonitoringZu weitergehenden Sicherheitsthemen wie Rate Limiting und Monitoring für KI-Agent-Server lesen Sie den Secure AI Agent Server Guide (in Kürze verfügbar).

Bereit, es selbst auszuprobieren?

OpenClaw auf Ihrem eigenen VPS bereitstellen.