OpenClaw veilig deployen op een VPS

14 min leestijd·Matthieu|

Installeer en beveilig OpenClaw op een VPS met gateway-authenticatie, TLS reverse proxy, Docker-sandboxing, firewall-hardening en systemd-isolatie. Elke stap bevat een verificatiecommando.

OpenClaw is een open-source, self-hosted AI-assistent die verbinding maakt met messaging-apps (WhatsApp, Telegram, Discord, Slack, Signal) en AI-modelproviders. Het draait een Gateway-proces op je server, ontvangt berichten, voert agent-acties uit met tools en stuurt antwoorden terug. Alle data blijft op je eigen infrastructuur.

Deze gids beschrijft een security-first deployment op een VPS met Ubuntu 24.04. Je gaat het OS hardenen, OpenClaw installeren, gateway-authenticatie configureren, Nginx met TLS als reverse proxy opzetten, de Docker/UFW firewall-bypass fixen, Docker-sandboxing inschakelen, tool policy vergrendelen en de gateway als geharde systemd-service draaien.

Waarom is OpenClaw-beveiliging belangrijk op een VPS?

OpenClaw draait AI-agents die shell-commando's kunnen uitvoeren, bestanden lezen en het web browsen op je server. Een verkeerd geconfigureerde instance geeft aanvallers diezelfde mogelijkheden. Dit is niet theoretisch.

Begin 2026 vonden onderzoekers meer dan 42.000 OpenClaw-instances die openbaar op het internet stonden. 63% was kwetsbaar voor remote exploitation. CVE-2026-25253 (CVSS 8.8) maakte one-click remote code execution mogelijk via auth-token-exfiltratie door een kwaadaardige link. De aanvaller kon het gateway-token stelen, via WebSocket verbinden, bevestigingsprompts uitschakelen, Docker-sandboxing omzeilen en willekeurige commando's uitvoeren.

De fix is opgenomen in versie 2026.1.29, maar alleen patchen is niet genoeg. Beveiliging vereist lagen: netwerkisolatie, authenticatie, TLS, sandboxing en toolbeperkingen die samenwerken. Een enkele ontbrekende laag (bijvoorbeeld gateway-auth zonder firewall) laat een direct pad naar compromittering open.

Wat heb je nodig voordat je begint?

Vereiste Details
VPS Ubuntu 24.04, 4+ vCPU, minimaal 8 GB RAM
Domeinnaam A-record dat naar je VPS-IP wijst (bijv. openclaw.example.com)
SSH-toegang Key-based authenticatie geconfigureerd
AI-provider API-key Anthropic, OpenAI of Google Gemini
Node.js Versie 22 of nieuwer
Docker Engine 20+ met Compose-plugin

Als je hulp nodig hebt bij het inrichten van een VPS of het instellen van SSH-keys, zie Secure a Linux VPS.

Hoe harden je de VPS voordat je OpenClaw installeert?

Voordat je iets installeert, beveilig je het OS. Als je Secure a Linux VPS en SSH Security Configuration al hebt gevolgd, ga dan door naar het volgende deel.

Maak een dedicated gebruiker aan

Services als root draaien is onnodig risico. Maak een openclaw systeemgebruiker aan:

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

Dit maakt een systeemaccount met een homedirectory. OpenClaw slaat zijn configuratie op in ~/.openclaw, dus de homedirectory is vereist.

Configureer UFW

Installeer en activeer de firewall voordat je services blootstelt:

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

Controleer de regels:

sudo ufw status verbose

Je zou de drie toegestane poorten en een standaard deny-beleid voor inkomend verkeer moeten zien. Poort 18789 (de OpenClaw gateway) ontbreekt bewust. De gateway bindt alleen aan localhost en zit achter Nginx.

Installeer fail2ban

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

Controleer of het draait:

sudo systemctl status fail2ban

De output zou active (running) moeten tonen. fail2ban bewaakt SSH-logs en blokkeert IP's na herhaalde mislukte inlogpogingen.

Hoe installeer je OpenClaw op Ubuntu?

OpenClaw ondersteunt twee installatiemethoden: npm (direct) en Docker. Beide worden hieronder behandeld. Kies er een. Docker wordt aanbevolen voor VPS-deployments omdat container-isolatie de blast radius beperkt als het agent-proces wordt gecompromitteerd.

Optie A: Docker-installatie (aanbevolen)

Installeer Docker als het nog niet aanwezig is:

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

Voeg de openclaw-gebruiker toe aan de docker-groep:

sudo usermod -aG docker openclaw

Let op: lidmaatschap van de docker-groep geeft het equivalent van root-toegang op de host. Dit is vereist voor OpenClaw's Docker-functionaliteit, maar het betekent dat de openclaw-gebruiker alle containers op het systeem kan beheren. De systemd-hardening en sandbox-isolatie hieronder beperken wat het OpenClaw-proces daadwerkelijk kan doen.

Wissel naar de openclaw-gebruiker en stel OpenClaw in:

sudo -u openclaw -i

Kloon de repository en voer setup uit met de officieel voorgebouwde image:

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

Het instellen van OPENCLAW_IMAGE zorgt ervoor dat het script de voorgebouwde image van GitHub Container Registry pullt in plaats van vanuit broncode te bouwen. Het script voert onboarding uit en start de gateway via Docker Compose.

De gateway in de container bindt standaard aan alle interfaces (lan-modus). Dit is correct voor Docker-deployments omdat Docker's port mapping de gateway in de container moet kunnen bereiken. Externe toegang wordt geblokkeerd op hostniveau met DOCKER-USER iptables-regels (hieronder behandeld).

Controleer of de gateway draait:

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

Een 200 OK-response bevestigt dat de gateway live is. Het /readyz-endpoint bevestigt dat hij gereed is om verbindingen te accepteren:

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

Optie B: npm-installatie

Installeer Node.js 22 via NodeSource:

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

Controleer de versie:

node --version

De output zou v22.x.x of nieuwer moeten tonen.

Wissel naar de openclaw-gebruiker en installeer:

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

Voer onboarding uit:

openclaw onboard

Selecteer loopback voor de bind-modus. De onboarding-wizard genereert een gateway-auth-token en slaat het op in ~/.openclaw/openclaw.json.

Start de gateway:

openclaw gateway start

Controleer:

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

Controleer de gateway-binding

Bekijk waarop de gateway luistert:

ss -tulpn | grep 18789

Voor npm-installaties: De output zou 127.0.0.1:18789 moeten tonen, niet 0.0.0.0:18789. Als je 0.0.0.0 ziet, stop de gateway en stel gateway.bind in op "loopback" in openclaw.json.

Voor Docker-installaties: Je ziet 0.0.0.0:18789 van het docker-proxy-proces. Dit is verwacht. Docker's port mapping publiceert de poort op alle host-interfaces zodat localhost-verkeer de container kan bereiken. De DOCKER-USER iptables-regels (behandeld in het firewall-gedeelte hieronder) blokkeren externe toegang op netwerkniveau.

Vergrendel bestandsrechten

Het configuratiebestand bevat je auth-token en API-keys:

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

Controleer:

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

Je zou -rw------- moeten zien. Voor npm-installaties is de eigenaar openclaw. Voor Docker-installaties kan de eigenaar uid 1000 tonen (de node-gebruiker in de container). Dit is normaal en vereist zodat de container de config kan lezen.

Hoe configureer je gateway-authenticatie?

OpenClaw's gateway vereist standaard authenticatie. Als er geen token of wachtwoord is geconfigureerd, weigert de gateway WebSocket-verbindingen (fail-closed). De onboarding-wizard genereert automatisch een token.

OpenClaw ondersteunt drie auth-modi:

Modus Hoe het werkt Geschikt voor
token Gedeeld bearer-token in elk verzoek Enkele gebruiker op VPS (aanbevolen)
password Wachtwoord-gebaseerde authenticatie Multi-device setups
trusted-proxy Delegeert auth aan een reverse proxy Enterprise/SSO-setups

Stel een sterk token in

Als je het automatisch gegenereerde token wilt vervangen, genereer een nieuw token:

openssl rand -base64 32

Sla het op als een omgevingsvariabele in plaats van het hard te coderen in het configuratiebestand. Maak een omgevingsbestand aan:

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

Bewerk ~/.openclaw/openclaw.json om naar de omgevingsvariabele te verwijzen:

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

OpenClaw ondersteunt ${VARIABLE}-substitutie in zijn JSON5-config, dus het token wordt bij het opstarten uit de omgeving gelezen. Voor Docker-installaties stel je de OPENCLAW_GATEWAY_TOKEN-variabele in het .env-bestand in je openclaw-src-directory in. Het docker-setup.sh-script genereert dit bestand automatisch.

Herstart de gateway en test dat niet-geauthenticeerde verzoeken worden geweigerd:

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

Het health-endpoint retourneert 200 zonder auth (het is een health check). Om auth-handhaving op het WebSocket-endpoint te testen, controleer de gateway-logs:

Voor systemd/npm-installaties:

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

Voor Docker-installaties:

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

Zoek naar auth required of connection rejected entries die het fail-closed gedrag bevestigen.

Hoe stel je Nginx in als TLS reverse proxy voor OpenClaw?

De gateway bindt aan localhost. Nginx zit ervoor, termineert TLS en proxyt WebSocket-verbindingen naar de gateway. Dit geeft je versleutelde verbindingen zonder de gateway-poort bloot te stellen.

Voor achtergrondinformatie over Nginx reverse proxies, zie Nginx Reverse Proxy. Voor TLS-setup met Let's Encrypt, zie Nginx SSL/TLS with Let's Encrypt.

Installeer Nginx en Certbot

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

Verkrijg een TLS-certificaat

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

Vervang openclaw.example.com door je daadwerkelijke domein. Certbot configureert automatische verlenging.

Configureer de reverse proxy

Maak het Nginx server block aan:

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

Goed opletten: proxy_set_header X-Forwarded-For $remote_addr gebruikt $remote_addr (overschrijven), niet $proxy_add_x_forwarded_for (toevoegen). Dit is opzettelijk. Toevoegen laat clients nep-IP's in de header injecteren. De OpenClaw-documentatie beveelt overschrijven specifiek aan.

Activeer de site en test de configuratie:

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

De output zou syntax is ok en test is successful moeten tonen. Herlaad Nginx:

sudo systemctl reload nginx

Configureer OpenClaw om de proxy te vertrouwen

Vertel de gateway om de doorgestuurde headers van Nginx te vertrouwen door trustedProxies toe te voegen aan ~/.openclaw/openclaw.json:

{
  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}"
    }
  }
}

Herstart de gateway om toe te passen. Controleer of TLS werkt vanaf je lokale machine (niet de server):

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

Je zou een 200-response over HTTPS moeten krijgen. Voor meer Nginx security-hardening, zie de Nginx security hardening-gids (binnenkort beschikbaar).

Hoe fix je de Docker en UFW firewall-bypass?

Docker manipuleert iptables rechtstreeks en omzeilt daarmee UFW volledig. Als je OpenClaw met Docker draait en een poort publiceert, is die poort toegankelijk vanaf het internet, ook als UFW hem blokkeert. Dit is een van de meest voorkomende misconfiguraties bij Docker-deployments.

Voor een volledige uitleg van dit probleem, zie Docker UFW Firewall Fix.

De fix gebruikt de DOCKER-USER chain, die Docker verwerkt voordat verkeer naar containers wordt doorgestuurd.

Blokkeer alle externe toegang tot Docker-poorten

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

Dit dropt al het verkeer van de externe interface (eth0) dat Docker anders naar containers zou doorsturen. Pas de interfacenaam aan als die van jou verschilt (controleer met ip link show).

Sta loopback-verkeer toe

Nginx op dezelfde host moet de gateway-container op localhost kunnen bereiken:

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

Sta bestaande verbindingen toe

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

Maak regels persistent

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

Controleer de regels

sudo iptables -L DOCKER-USER -n -v

Je zou de ACCEPT-regels voor loopback en bestaande verbindingen boven de DROP-regel voor eth0 moeten zien. Volgorde is belangrijk: iptables verwerkt regels van boven naar beneden.

Test vanaf een externe machine dat de gateway-poort niet bereikbaar is:

nmap -p 18789 your-server-ip

Poort 18789 zou filtered of closed moeten tonen, niet open.

Hoe schakel je Docker-sandboxing in voor OpenClaw?

Docker-sandboxing voert agent tool-uitvoeringen uit in geisoleerde containers. Wanneer een agent een shell-commando uitvoert of een bestand schrijft, gebeurt dat in een wegwerpcontainer, niet op je host.

Voeg de sandbox-configuratie toe aan ~/.openclaw/openclaw.json:

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

Wat elke instelling doet:

Instelling Waarde Effect
mode "all" Elke sessie draait in sandbox, geen uitzonderingen
scope "session" Elke chatsessie krijgt zijn eigen container
workspaceAccess "none" Sandbox kan de agent-workspace niet zien
network "none" Geen netwerktoegang vanuit sandbox (voorkomt exfiltratie)
memory "1g" Beperkt container-RAM tot 1 GB
cpus 1 Beperkt container tot 1 CPU-core

Bouw de sandbox-image:

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

Controleer de sandbox-configuratie:

openclaw sandbox explain

Voor Docker-installaties, voer uit via compose:

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

Dit commando toont de effectieve sandbox-modus, scope, workspace-toegang, tool policy en eventuele overrides. Bevestig dat mode: all en network: none in de output verschijnen.

Als je netwerktoegang nodig hebt voor specifieke tools (bijv. web_search), ken het dan selectief per agent toe in plaats van de globale standaard te wijzigen. Zie het tool policy-gedeelte hieronder.

OpenClaw blokkeert standaard gevaarlijke bind mount-bronnen: /var/run/docker.sock, /etc, /proc, /sys en /dev worden allemaal geweigerd. Overschrijf dit niet met aangepaste bind mounts die ze opnieuw blootstellen. Als een sandbox-container toegang nodig heeft tot hostdata, gebruik dan read-only mounts met expliciete paden:

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

Het :ro-suffix zorgt ervoor dat de container de data kan lezen maar niet wijzigen.

Hoe vergrendel je OpenClaw tool policy?

Tool policy bepaalt welke tools agents mogen gebruiken. De sandbox heeft zijn eigen tool-filter, los van agent-level permissies. Deny wint altijd van allow.

Standaard deny-beleid

Stel een restrictieve standaard in via ~/.openclaw/openclaw.json:

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

Dit blokkeert standaard commando-uitvoering, bestandsschrijving, bestandsbewerking en browsertoegang. Agents kunnen nog steeds bestanden lezen en het web doorzoeken.

Per-agent profielen

Overschrijf standaarden voor specifieke agents die meer toegang nodig hebben. Voeg profielen toe onder agents.list:

{
  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"]
        }
      }
    ]
  }
}

De coding-agent kan commando's uitvoeren, maar alleen in een sandbox-container zonder netwerk. De messaging-agent kan lezen en zoeken, maar kan niets uitvoeren.

Schakel elevated mode uit

Elevated mode laat agents commando's rechtstreeks op de gateway-host uitvoeren, waarmee de sandbox wordt omzeild. Schakel het uit:

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

Als je elevated mode ingeschakeld laat, kan elke gebruiker die met de agent kan chatten mogelijk host-commando's uitvoeren. Op een VPS is dit remote code execution.

Multi-user DM-isolatie

Als meerdere mensen je OpenClaw-instance berichten sturen, schakel dan per-peer DM-scoping in. Standaard delen alle DM's een enkele hoofdsessie. Dit betekent dat Gebruiker A context uit het gesprek van Gebruiker B kan zien.

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

Dit geeft elke afzender zijn eigen sessie met geisoleerde context en sandbox-container.

Hoe draai je OpenClaw als geharde systemd-service?

OpenClaw onder systemd draaien betekent dat het start bij boot, herstart bij een crash en procesisolatie krijgt via hardening-directieven.

Maak de service-unit aan

Voor Docker-installaties, maak het volgende unit-bestand:

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

Voor npm-installaties, vervang de ExecStart- en ExecStop-regels:

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

En verwijder de Requires=docker.service-regel.

Wat elke hardening-directief doet:

Directief Bescherming
NoNewPrivileges Voorkomt dat het proces extra rechten verkrijgt via setuid/setgid
PrivateTmp Geeft de service zijn eigen /tmp, onzichtbaar voor andere processen
ProtectSystem=strict Mount het volledige bestandssysteem als read-only behalve expliciete ReadWritePaths
ProtectHome=read-only Voorkomt schrijven naar elke homedirectory behalve het toegestane pad
CapabilityBoundingSet= Dropt alle Linux capabilities (lege set)
ProtectKernelTunables Blokkeert schrijven naar /proc/sys, /sys
ProtectKernelModules Voorkomt het laden van kernelmodules
MemoryMax=4G Stopt de service als het meer dan 4 GB RAM verbruikt, voorkomt OOM op de host

Activeer en start

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

enable zorgt dat het start bij boot. --now start het direct.

Controleer of het draait:

sudo systemctl status openclaw-gateway

De output zou active (running) moeten tonen. Controleer de logs op fouten:

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

Hoe verifieer je dat de volledige deployment veilig is?

Doorloop deze checklist na deployment om te bevestigen dat elke laag werkt.

1. Voer OpenClaw's ingebouwde security-audit uit

Voor npm-installaties:

sudo -u openclaw openclaw security audit --deep

Voor Docker-installaties:

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

Dit markeert veelvoorkomende misconfiguraties: niet-geauthenticeerde netwerkblootstelling, verhoogde tool-permissies, problemen met bestandsrechten. Los alle waarschuwingen op voordat je verdergaat.

2. Bevestig gateway-binding

ss -tulpn | grep 18789

npm-installaties: Verwacht 127.0.0.1:18789. Niet 0.0.0.0:18789.

Docker-installaties: Verwacht 0.0.0.0:18789 van docker-proxy. Dit is normaal. Externe toegang wordt geblokkeerd door de DOCKER-USER iptables-regels.

3. Externe poortscan

Vanaf je lokale machine (niet de server):

nmap -p 18789 your-server-ip

Verwacht: filtered of closed.

4. Controleer TLS

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

Verwacht: 200 over HTTPS met een geldig certificaat.

5. Test auth-handhaving

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

De gateway zou authenticatie moeten vereisen voor niet-health endpoints.

6. Controleer sandbox-isolatie

Voor npm-installaties:

sudo -u openclaw openclaw sandbox explain

Voor Docker-installaties:

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

Bevestig mode: all, network: none en geen elevated overrides.

7. Controleer bestandsrechten

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

Beide zouden 600-permissies moeten tonen. Het env-bestand is eigendom van openclaw. Voor Docker-installaties kan openclaw.json eigendom zijn van uid 1000 (de node-gebruiker van de container).

8. Controleer systemd-hardening

systemd-analyze security openclaw-gateway

Dit beoordeelt de beveiligingseigenschappen van de service. Streef naar een score rond 5.0 of lager (lager is veiliger). Docker-gebaseerde services scoren doorgaans rond 5.0-5.5 omdat Docker toegang tot namespaces en device-interfaces vereist. De hardening-directieven hierboven brengen de score van de standaard ~9.6 naar ongeveer 5.2.

9. Controleer UFW en DOCKER-USER regels

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

UFW zou alleen poorten 22, 80 en 443 moeten tonen. De DOCKER-USER chain zou extern verkeer moeten droppen.

10. Controleer op blootgestelde services

ss -tulpn

Alleen SSH (22), Nginx (80, 443) en OpenClaw (127.0.0.1:18789 voor npm, of 0.0.0.0:18789 via docker-proxy voor Docker) zouden zichtbaar moeten zijn.

Hoe houd je OpenClaw bijgewerkt en geback-upt?

Versie verbergen

Verberg de OpenClaw-versie in gateway-responses. Versie-onthulling helpt aanvallers bekende kwetsbaarheden te targeten. In ~/.openclaw/openclaw.json:

{
  gateway: {
    exposeVersion: false
  }
}

Gecombineerd met de server_tokens off;-directief die al in de Nginx-config staat, voorkomt dit fingerprinting van zowel de reverse proxy als de applicatie.

Updates

OpenClaw brengt regelmatig releases uit. Controleer de huidige versie:

openclaw --version

Voor Docker-installaties:

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

Om een Docker-installatie bij te werken:

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

Om een npm-installatie bij te werken:

npm update -g openclaw

Na het updaten, herstart de gateway en voer de security-audit opnieuw uit:

sudo systemctl restart openclaw-gateway

Voor npm:

sudo -u openclaw openclaw security audit

Voor Docker:

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

Lees de release notes voordat je upgradet. Breaking changes in configuratieformaat komen voor. Versie 2026.3.7 introduceerde een verplicht gateway.auth.mode-veld wanneer zowel token als password aanwezig zijn. Als het ontbreekt na de upgrade, word je buitengesloten van de gateway.

Back-ups

Maak een back-up van de configuratiedirectory:

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

Sla back-ups op buiten de server. De config-directory bevat je auth-tokens, agent-configuraties en gespreksstatus. Bescherm back-ups met dezelfde zorg als de live config: versleutel ze met gpg of sla ze op in een versleuteld volume.

Logbeheer

Bekijk logs in real time:

journalctl -u openclaw-gateway -f

OpenClaw-logs kunnen gespreksfragmenten bevatten. Stel logretentie in om blootstelling te beperken:

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

Iets ging mis?

Symptoom Waarschijnlijke oorzaak Oplossing
Gateway weigert te starten Poort 18789 al in gebruik ss -tulpn | grep 18789 om het conflicterende proces te vinden
WebSocket-verbindingen falen via Nginx Ontbrekende Upgrade- en Connection-headers Controleer de proxy_set_header-directieven in je Nginx-config
Sandbox-containers starten niet Docker socket-permissies Zorg dat de openclaw-gebruiker in de docker-groep zit en log opnieuw in
openclaw security audit toont waarschuwingen Config drift na update Bekijk de audit-output en pas aanbevolen fixes toe
Gateway bereikbaar vanaf extern IP Docker/UFW bypass Voeg DOCKER-USER iptables-regels toe zoals hierboven beschreven
TLS-certificaatfouten Certbot-verlenging mislukt Voer sudo certbot renew --dry-run uit om te diagnosticeren
OOM kills op de VPS Ontbrekende MemoryMax in systemd-unit Voeg MemoryMax=4G toe aan de [Service]-sectie

Copyright 2026 Virtua.Cloud. Alle rechten voorbehouden. Deze inhoud is een origineel werk van het Virtua.Cloud-team. Reproductie, herpublicatie of herdistributie zonder schriftelijke toestemming is verboden.

Klaar om het zelf te proberen?

Deploy uw eigen server in seconden. Linux, Windows of FreeBSD.

Bekijk VPS-aanbod