Deployer OpenClaw en securite sur un VPS
Installez et securisez OpenClaw sur un VPS avec authentification du gateway, reverse proxy TLS, sandboxing Docker, durcissement du pare-feu et isolation systemd. Chaque etape inclut une commande de verification.
OpenClaw est un assistant IA open-source et auto-heberge qui se connecte aux applications de messagerie (WhatsApp, Telegram, Discord, Slack, Signal) et aux fournisseurs de modeles IA. Il execute un processus Gateway sur votre serveur, recoit les messages, execute des actions d'agents via des outils et envoie les reponses. Toutes les donnees restent sur votre infrastructure.
Ce guide presente un deploiement axe securite sur un VPS sous Ubuntu 24.04. Vous allez durcir l'OS, installer OpenClaw, configurer l'authentification du gateway, mettre en place Nginx avec TLS en reverse proxy, corriger le contournement du pare-feu Docker/UFW, activer le sandboxing Docker, verrouiller la politique d'outils et executer le gateway comme service systemd durci.
Pourquoi la securite d'OpenClaw compte-t-elle sur un VPS ?
OpenClaw execute des agents IA capables de lancer des commandes shell, lire des fichiers et naviguer sur le web depuis votre serveur. Une instance mal configuree donne aux attaquants ces memes capacites. Ce n'est pas theorique.
Debut 2026, des chercheurs ont trouve plus de 42 000 instances OpenClaw exposees sur l'internet public. 63 % etaient vulnerables a une exploitation a distance. CVE-2026-25253 (CVSS 8.8) permettait une execution de code a distance en un clic via l'exfiltration du token d'authentification par un lien malveillant. L'attaquant pouvait voler le token du gateway, se connecter via WebSocket, desactiver les invites de confirmation, s'echapper du sandboxing Docker et executer des commandes arbitraires.
Le correctif est arrive dans la version 2026.1.29, mais patcher seul ne suffit pas. La securite necessite des couches : isolation reseau, authentification, TLS, sandboxing et restrictions d'outils fonctionnant ensemble. Une seule couche manquante (par exemple, l'auth du gateway sans pare-feu) laisse un chemin direct vers la compromission.
De quoi avez-vous besoin avant de commencer ?
| Prerequis | Details |
|---|---|
| VPS | Ubuntu 24.04, 4+ vCPU, 8 Go de RAM minimum |
| Nom de domaine | Enregistrement A pointant vers l'IP de votre VPS (ex. openclaw.example.com) |
| Acces SSH | Authentification par cle configuree |
| Cle API fournisseur IA | Anthropic, OpenAI ou Google Gemini |
| Node.js | Version 22 ou plus recente |
| Docker | Engine 20+ avec le plugin Compose |
Si vous avez besoin d'aide pour provisionner un VPS ou configurer des cles SSH, consultez Securiser un VPS Linux.
Comment durcir le VPS avant d'installer OpenClaw ?
Avant d'installer quoi que ce soit, verrouillez l'OS. Si vous avez deja suivi Securiser un VPS Linux et Configuration de la securite SSH, passez a la section suivante.
Creer un utilisateur dedie
Executer des services en root est un risque inutile. Creez un utilisateur systeme openclaw :
sudo useradd -r -m -s /bin/bash openclaw
Cela cree un compte systeme avec un repertoire personnel. OpenClaw stocke sa configuration dans ~/.openclaw, le repertoire personnel est donc necessaire.
Configurer UFW
Installez et activez le pare-feu avant d'exposer le moindre service :
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
Verifiez les regles :
sudo ufw status verbose
Vous devriez voir les trois ports autorises et une politique de refus par defaut pour le trafic entrant. Le port 18789 (le gateway OpenClaw) est volontairement absent. Le gateway ecoute uniquement sur localhost et se trouve derriere Nginx.
Installer fail2ban
sudo apt update && sudo apt install -y fail2ban
sudo systemctl enable --now fail2ban
Verifiez qu'il tourne :
sudo systemctl status fail2ban
La sortie devrait afficher active (running). fail2ban surveille les logs SSH et bannit les IP apres des tentatives de connexion echouees repetees.
Comment installer OpenClaw sur Ubuntu ?
OpenClaw propose deux methodes d'installation : npm (directe) et Docker. Les deux sont couvertes ci-dessous. Choisissez-en une. Docker est recommande pour les deploiements VPS car l'isolation par conteneur limite le rayon d'impact si le processus agent est compromis.
Option A : installation Docker (recommandee)
Installez Docker s'il n'est pas deja present :
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
Ajoutez l'utilisateur openclaw au groupe docker :
sudo usermod -aG docker openclaw
Note : l'appartenance au groupe Docker accorde l'equivalent d'un acces root sur l'hote. C'est necessaire pour les fonctionnalites Docker d'OpenClaw, mais cela signifie que l'utilisateur openclaw peut controler tous les conteneurs du systeme. Le durcissement systemd et l'isolation sandbox ci-dessous limitent ce que le processus OpenClaw peut effectivement faire.
Passez a l'utilisateur openclaw et configurez OpenClaw :
sudo -u openclaw -i
Clonez le depot et lancez la configuration avec l'image pre-construite officielle :
git clone https://github.com/openclaw/openclaw.git ~/openclaw-src
cd ~/openclaw-src
OPENCLAW_IMAGE=ghcr.io/openclaw/openclaw:latest ./docker-setup.sh
Definir OPENCLAW_IMAGE indique au script de telecharger l'image pre-construite depuis GitHub Container Registry au lieu de compiler depuis les sources. Le script lance l'onboarding et demarre le gateway via Docker Compose.
Le gateway a l'interieur du conteneur ecoute sur toutes les interfaces par defaut (mode lan). C'est correct pour les deploiements Docker car le port mapping de Docker doit atteindre le gateway dans le conteneur. L'acces externe est bloque au niveau de l'hote via les regles iptables DOCKER-USER (couvertes plus bas).
Verifiez que le gateway tourne :
curl -fsS http://127.0.0.1:18789/healthz
Une reponse 200 OK confirme que le gateway est actif. Le endpoint /readyz confirme qu'il est pret a accepter des connexions :
curl -fsS http://127.0.0.1:18789/readyz
Option B : installation npm
Installez Node.js 22 via NodeSource :
curl -fsSL https://deb.nodesource.com/setup_22.x | sudo -E bash -
sudo apt install -y nodejs
Verifiez la version :
node --version
La sortie devrait afficher v22.x.x ou plus recent.
Passez a l'utilisateur openclaw et installez :
sudo -u openclaw -i
npm install -g openclaw@latest
Lancez l'onboarding :
openclaw onboard
Selectionnez loopback pour le mode de liaison. L'assistant d'onboarding genere un token d'authentification du gateway et le stocke dans ~/.openclaw/openclaw.json.
Demarrez le gateway :
openclaw gateway start
Verifiez :
curl -fsS http://127.0.0.1:18789/healthz
Verifier la liaison du gateway
Verifiez sur quoi le gateway ecoute :
ss -tulpn | grep 18789
Pour les installations npm : la sortie devrait afficher 127.0.0.1:18789, pas 0.0.0.0:18789. Si vous voyez 0.0.0.0, arretez le gateway et definissez gateway.bind a "loopback" dans openclaw.json.
Pour les installations Docker : vous verrez 0.0.0.0:18789 du processus docker-proxy. C'est attendu. Le port mapping de Docker publie le port sur toutes les interfaces de l'hote pour que le trafic localhost atteigne le conteneur. Les regles iptables DOCKER-USER (couvertes dans la section pare-feu ci-dessous) bloquent l'acces externe au niveau reseau.
Verrouiller les permissions de fichiers
Le fichier de configuration contient votre token d'authentification et vos cles API :
chmod 700 /home/openclaw/.openclaw
chmod 600 /home/openclaw/.openclaw/openclaw.json
Verifiez :
ls -la /home/openclaw/.openclaw/openclaw.json
Vous devriez voir -rw-------. Pour les installations npm, le proprietaire est openclaw. Pour les installations Docker, le proprietaire peut s'afficher comme uid 1000 (l'utilisateur node dans le conteneur). C'est normal et necessaire pour que le conteneur puisse lire la configuration.
Comment configurer l'authentification du gateway ?
Le gateway OpenClaw exige une authentification par defaut. Si aucun token ni mot de passe n'est configure, le gateway refuse les connexions WebSocket (fail-closed). L'assistant d'onboarding genere un token automatiquement.
OpenClaw supporte trois modes d'authentification :
| Mode | Fonctionnement | Ideal pour |
|---|---|---|
token |
Token partage dans chaque requete | VPS mono-utilisateur (recommande) |
password |
Authentification par mot de passe | Configurations multi-appareils |
trusted-proxy |
Delegue l'auth a un reverse proxy | Configurations entreprise/SSO |
Definir un token fort
Si vous souhaitez remplacer le token genere automatiquement, generez-en un nouveau :
openssl rand -base64 32
Stockez-le comme variable d'environnement au lieu de le coder en dur dans le fichier de configuration. Creez un fichier d'environnement :
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
Editez ~/.openclaw/openclaw.json pour referencer la variable d'environnement :
{
gateway: {
bind: "loopback", // use "loopback" for npm, keep default for Docker
port: 18789,
auth: {
mode: "token",
token: "${OPENCLAW_GATEWAY_TOKEN}"
}
}
}
OpenClaw supporte la substitution ${VARIABLE} dans sa configuration JSON5, le token est donc lu depuis l'environnement au demarrage. Pour les installations Docker, definissez la variable OPENCLAW_GATEWAY_TOKEN dans le fichier .env de votre repertoire openclaw-src. Le script docker-setup.sh genere ce fichier automatiquement.
Redemarrez le gateway et testez que les requetes non authentifiees sont rejetees :
curl -s -o /dev/null -w "%{http_code}" http://127.0.0.1:18789/healthz
Le endpoint de sante renvoie 200 sans authentification (c'est un health check). Pour tester l'application de l'authentification sur le endpoint WebSocket, consultez les logs du gateway :
Pour les installations systemd/npm :
journalctl -u openclaw-gateway --no-pager -n 20
Pour les installations Docker :
cd ~/openclaw-src && docker compose logs openclaw-gateway --tail 20
Cherchez les entrees auth required ou connection rejected confirmant le comportement fail-closed.
Comment configurer Nginx comme reverse proxy TLS pour OpenClaw ?
Le gateway ecoute sur localhost. Nginx se place devant, termine le TLS et proxifie les connexions WebSocket vers le gateway. Cela vous donne des connexions chiffrees sans exposer le port du gateway.
Pour en savoir plus sur les reverse proxies Nginx, consultez Reverse Proxy Nginx. Pour la configuration TLS avec Let's Encrypt, voir Nginx SSL/TLS avec Let's Encrypt.
Installer Nginx et Certbot
sudo apt install -y nginx certbot python3-certbot-nginx
Obtenir un certificat TLS
sudo certbot --nginx -d openclaw.example.com
Remplacez openclaw.example.com par votre domaine reel. Certbot configure le renouvellement automatique.
Configurer le reverse proxy
Creez le bloc serveur Nginx :
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
Point important : proxy_set_header X-Forwarded-For $remote_addr utilise $remote_addr (ecrasement), pas $proxy_add_x_forwarded_for (ajout). C'est intentionnel. L'ajout permet aux clients d'injecter de fausses IP dans l'en-tete. La documentation OpenClaw recommande specifiquement l'ecrasement.
Activez le site et testez la configuration :
sudo ln -s /etc/nginx/sites-available/openclaw.conf /etc/nginx/sites-enabled/
sudo nginx -t
La sortie devrait afficher syntax is ok et test is successful. Rechargez Nginx :
sudo systemctl reload nginx
Configurer OpenClaw pour faire confiance au proxy
Indiquez au gateway de faire confiance aux en-tetes transmis par Nginx en ajoutant trustedProxies a ~/.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}"
}
}
}
Redemarrez le gateway pour appliquer. Verifiez que le TLS fonctionne depuis votre machine locale (pas le serveur) :
curl -I https://openclaw.example.com/healthz
Vous devriez obtenir une reponse 200 en HTTPS avec un certificat valide. Pour plus de durcissement Nginx, consultez le guide de durcissement securite Nginx (a venir).
Comment corriger le contournement du pare-feu Docker et UFW ?
Docker manipule iptables directement, contournant UFW entierement. Si vous executez OpenClaw avec Docker et publiez un port, ce port est accessible depuis internet meme si UFW le bloque. C'est l'une des erreurs de configuration les plus courantes dans les deploiements Docker.
Pour une explication complete de ce probleme, consultez Correction du pare-feu Docker UFW.
La correction utilise la chaine DOCKER-USER, que Docker traite avant de transmettre le trafic aux conteneurs.
Bloquer tout acces externe aux ports Docker
sudo iptables -I DOCKER-USER -i eth0 -j DROP
Cela rejette tout le trafic provenant de l'interface externe (eth0) que Docker transmettrait autrement aux conteneurs. Adaptez le nom de l'interface si le votre differe (verifiez avec ip link show).
Autoriser le trafic loopback
Nginx sur le meme hote doit pouvoir atteindre le conteneur gateway sur localhost :
sudo iptables -I DOCKER-USER -i lo -j ACCEPT
Autoriser les connexions etablies
sudo iptables -I DOCKER-USER -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
Rendre les regles persistantes
sudo apt install -y iptables-persistent
sudo netfilter-persistent save
Verifier les regles
sudo iptables -L DOCKER-USER -n -v
Vous devriez voir les regles ACCEPT pour le loopback et les connexions etablies au-dessus de la regle DROP pour eth0. L'ordre compte : iptables traite les regles de haut en bas.
Testez depuis une machine externe que le port du gateway n'est pas accessible :
nmap -p 18789 your-server-ip
Le port 18789 devrait afficher filtered ou closed, pas open.
Comment activer le sandboxing Docker pour OpenClaw ?
Le sandboxing Docker execute les outils des agents dans des conteneurs isoles. Quand un agent lance une commande shell ou ecrit un fichier, cela se passe dans un conteneur jetable, pas sur votre hote.
Ajoutez la configuration de sandbox a ~/.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
}
}
}
}
}
Ce que fait chaque parametre :
| Parametre | Valeur | Effet |
|---|---|---|
mode |
"all" |
Chaque session tourne en sandbox, sans exception |
scope |
"session" |
Chaque session de chat obtient son propre conteneur |
workspaceAccess |
"none" |
La sandbox ne peut pas voir l'espace de travail de l'agent |
network |
"none" |
Pas d'acces reseau depuis la sandbox (empeche l'exfiltration) |
memory |
"1g" |
Limite la RAM du conteneur a 1 Go |
cpus |
1 |
Limite le conteneur a 1 coeur CPU |
Construisez l'image de sandbox :
cd ~/openclaw-src
scripts/sandbox-setup.sh
Verifiez la configuration de la sandbox :
openclaw sandbox explain
Pour les installations Docker, lancez via compose :
cd ~/openclaw-src && docker compose exec openclaw-gateway node dist/index.js sandbox explain
Cette commande affiche le mode sandbox effectif, la portee, l'acces a l'espace de travail, la politique d'outils et les surcharges eventuelles. Confirmez que mode: all et network: none apparaissent dans la sortie.
Si vous avez besoin d'un acces reseau pour des outils specifiques (ex. web_search), accordez-le selectivement par agent plutot que de modifier le defaut global. Voir la section politique d'outils ci-dessous.
OpenClaw bloque par defaut les sources de montages bind dangereuses : /var/run/docker.sock, /etc, /proc, /sys et /dev sont tous refuses. Ne surchargez pas cela avec des montages bind personnalises qui les re-exposent. Si un conteneur sandbox a besoin d'acceder a des donnees de l'hote, utilisez des montages en lecture seule avec des chemins explicites :
{
agents: {
defaults: {
sandbox: {
docker: {
binds: ["/home/openclaw/shared-data:/data:ro"]
}
}
}
}
}
Le suffixe :ro garantit que le conteneur peut lire les donnees mais pas les modifier.
Comment verrouiller la politique d'outils OpenClaw ?
La politique d'outils controle quels outils les agents peuvent utiliser. La sandbox a son propre filtre d'outils, separe des permissions au niveau agent. Le refus l'emporte toujours sur l'autorisation.
Politique de refus par defaut
Definissez un defaut restrictif dans ~/.openclaw/openclaw.json :
{
tools: {
deny: ["exec", "write", "edit", "browser"],
allow: ["read", "web_search"]
}
}
Cela bloque l'execution de commandes, l'ecriture de fichiers, l'edition de fichiers et l'acces navigateur par defaut. Les agents peuvent toujours lire des fichiers et effectuer des recherches web.
Profils par agent
Surchargez les defauts pour des agents specifiques qui ont besoin de plus d'acces. Ajoutez des profils sous 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"]
}
}
]
}
}
Le coding-agent peut executer des commandes mais uniquement dans un conteneur sandbox sans reseau. Le messaging-agent peut lire et chercher mais ne peut rien executer.
Desactiver le mode eleve
Le mode eleve (elevated mode) permet aux agents d'executer des commandes directement sur l'hote du gateway, contournant la sandbox. Desactivez-le :
{
tools: {
elevated: {
enabled: false
}
}
}
Si vous laissez le mode eleve active, toute personne pouvant discuter avec l'agent peut potentiellement executer des commandes sur l'hote. Sur un VPS, c'est de l'execution de code a distance.
Isolation DM multi-utilisateurs
Si plusieurs personnes envoient des messages a votre instance OpenClaw, activez le cloisonnement DM par pair. Par defaut, tous les DM partagent une seule session principale. Cela signifie que l'Utilisateur A peut voir le contexte de la conversation de l'Utilisateur B.
{
session: {
dmScope: "per-peer"
}
}
Cela donne a chaque expediteur sa propre session avec un contexte isole et un conteneur sandbox separe.
Comment executer OpenClaw comme service systemd durci ?
Executer OpenClaw sous systemd signifie qu'il demarre au boot, redemarre en cas de crash et beneficie de l'isolation de processus via les directives de durcissement.
Creer le fichier d'unite de service
Pour les installations Docker, creez le fichier d'unite suivant :
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
Pour les installations npm, remplacez les lignes ExecStart et ExecStop :
ExecStart=/usr/bin/openclaw gateway start --foreground
ExecStop=/usr/bin/openclaw gateway stop
Et supprimez la ligne Requires=docker.service.
Ce que fait chaque directive de durcissement :
| Directive | Protection |
|---|---|
NoNewPrivileges |
Empeche le processus d'acquerir des privileges supplementaires via setuid/setgid |
PrivateTmp |
Donne au service son propre /tmp, invisible aux autres processus |
ProtectSystem=strict |
Monte l'ensemble du systeme de fichiers en lecture seule sauf les ReadWritePaths explicites |
ProtectHome=read-only |
Empeche l'ecriture dans tout repertoire personnel sauf le chemin autorise |
CapabilityBoundingSet= |
Supprime toutes les capabilities Linux (ensemble vide) |
ProtectKernelTunables |
Bloque les ecritures vers /proc/sys, /sys |
ProtectKernelModules |
Empeche le chargement de modules noyau |
MemoryMax=4G |
Tue le service s'il depasse 4 Go de RAM, empechant l'OOM sur l'hote |
Activer et demarrer
sudo systemctl daemon-reload
sudo systemctl enable --now openclaw-gateway
enable le fait demarrer au boot. --now le demarre immediatement.
Verifiez qu'il tourne :
sudo systemctl status openclaw-gateway
La sortie devrait afficher active (running). Consultez les logs pour d'eventuelles erreurs :
journalctl -u openclaw-gateway -f --no-pager -n 50
Comment verifier que le deploiement complet est securise ?
Parcourez cette checklist apres le deploiement pour confirmer que chaque couche fonctionne.
1. Lancer l'audit de securite integre d'OpenClaw
Pour les installations npm :
sudo -u openclaw openclaw security audit --deep
Pour les installations Docker :
cd ~/openclaw-src && docker compose exec openclaw-gateway node dist/index.js security audit --deep
Cela signale les erreurs de configuration courantes : exposition reseau sans authentification, permissions d'outils elevees, problemes de permissions de fichiers. Corrigez tous les avertissements avant de continuer.
2. Confirmer la liaison du gateway
ss -tulpn | grep 18789
Installations npm : attendu 127.0.0.1:18789. Pas 0.0.0.0:18789.
Installations Docker : attendu 0.0.0.0:18789 depuis docker-proxy. C'est normal. L'acces externe est bloque par les regles iptables DOCKER-USER.
3. Scan de ports externe
Depuis votre machine locale (pas le serveur) :
nmap -p 18789 your-server-ip
Attendu : filtered ou closed.
4. Verifier le TLS
curl -I https://openclaw.example.com/healthz
Attendu : 200 en HTTPS avec un certificat valide.
5. Tester l'application de l'authentification
curl -s -o /dev/null -w "%{http_code}" https://openclaw.example.com/
Le gateway devrait exiger une authentification pour les endpoints non lies a la sante.
6. Verifier l'isolation de la sandbox
Pour les installations npm :
sudo -u openclaw openclaw sandbox explain
Pour les installations Docker :
cd ~/openclaw-src && docker compose exec openclaw-gateway node dist/index.js sandbox explain
Confirmez mode: all, network: none et aucune surcharge elevated.
7. Verifier les permissions de fichiers
ls -la /home/openclaw/.openclaw/openclaw.json
ls -la /etc/openclaw/env
Les deux devraient afficher des permissions 600. Le fichier env appartient a openclaw. Pour les installations Docker, openclaw.json peut appartenir a l'uid 1000 (l'utilisateur node du conteneur).
8. Verifier le durcissement systemd
systemd-analyze security openclaw-gateway
Cela note les proprietes de securite du service. Visez un score autour de 5.0 ou moins (plus bas = plus securise). Les services bases sur Docker obtiennent generalement un score entre 5.0 et 5.5 car Docker necessite l'acces aux namespaces et interfaces de peripheriques. Les directives de durcissement ci-dessus font passer le score du defaut ~9.6 a environ 5.2.
9. Verifier les regles UFW et DOCKER-USER
sudo ufw status
sudo iptables -L DOCKER-USER -n -v
UFW devrait afficher uniquement les ports 22, 80 et 443. La chaine DOCKER-USER devrait rejeter le trafic externe.
10. Verifier les services exposes
ss -tulpn
Seuls SSH (22), Nginx (80, 443) et OpenClaw (127.0.0.1:18789 pour npm, ou 0.0.0.0:18789 via docker-proxy pour Docker) devraient apparaitre.
Comment garder OpenClaw a jour et sauvegarde ?
Masquage de version
Masquez la version d'OpenClaw dans les reponses du gateway. La divulgation de version aide les attaquants a cibler des vulnerabilites connues. Dans ~/.openclaw/openclaw.json :
{
gateway: {
exposeVersion: false
}
}
Combine avec la directive server_tokens off; deja presente dans la configuration Nginx, cela empeche le fingerprinting du reverse proxy et de l'application.
Mises a jour
OpenClaw publie des versions frequemment. Verifiez la version actuelle :
openclaw --version
Pour les installations Docker :
cd ~/openclaw-src && docker compose exec openclaw-gateway node dist/index.js --version
Pour mettre a jour une installation Docker :
cd ~/openclaw-src
git pull
docker compose pull
docker compose up -d openclaw-gateway
Pour mettre a jour une installation npm :
npm update -g openclaw
Apres la mise a jour, redemarrez le gateway et relancez l'audit de securite :
sudo systemctl restart openclaw-gateway
Pour npm :
sudo -u openclaw openclaw security audit
Pour Docker :
cd ~/openclaw-src && docker compose exec openclaw-gateway node dist/index.js security audit
Lisez les notes de version avant de mettre a jour. Des changements cassants dans le format de configuration arrivent. La version 2026.3.7 a introduit un champ gateway.auth.mode obligatoire quand token et password sont tous les deux presents. L'oublier apres la mise a jour vous bloque hors du gateway.
Sauvegardes
Sauvegardez le repertoire de configuration :
sudo tar czf /root/openclaw-backup-$(date +%Y%m%d).tar.gz /home/openclaw/.openclaw
Stockez les sauvegardes hors du serveur. Le repertoire de configuration contient vos tokens d'authentification, configurations d'agents et l'etat des conversations. Protegez les sauvegardes avec le meme soin que la configuration en production : chiffrez-les avec gpg ou stockez-les dans un volume chiffre.
Gestion des logs
Consultez les logs en temps reel :
journalctl -u openclaw-gateway -f
Les logs OpenClaw peuvent contenir des extraits de conversations. Definissez une retention des logs pour limiter l'exposition :
sudo tee /etc/systemd/journald.conf.d/openclaw.conf > /dev/null << 'EOF'
[Journal]
MaxRetentionSec=7d
MaxFileSec=1d
EOF
sudo systemctl restart systemd-journald
Quelque chose ne fonctionne pas ?
| Symptome | Cause probable | Correction |
|---|---|---|
| Le gateway refuse de demarrer | Port 18789 deja utilise | ss -tulpn | grep 18789 pour trouver le processus en conflit |
| Les connexions WebSocket echouent a travers Nginx | En-tetes Upgrade et Connection manquants |
Verifiez les directives proxy_set_header dans votre configuration Nginx |
| Les conteneurs sandbox ne demarrent pas | Permissions du socket Docker | Assurez-vous que l'utilisateur openclaw est dans le groupe docker et reconnectez-vous |
openclaw security audit affiche des avertissements |
Derive de configuration apres mise a jour | Consultez la sortie de l'audit et appliquez les corrections recommandees |
| Gateway accessible depuis une IP externe | Contournement Docker/UFW | Ajoutez les regles iptables DOCKER-USER comme decrit ci-dessus |
| Erreurs de certificat TLS | Echec du renouvellement Certbot | Lancez sudo certbot renew --dry-run pour diagnostiquer |
| OOM kills sur le VPS | MemoryMax manquant dans l'unite systemd |
Ajoutez MemoryMax=4G a la section [Service] |
Copyright 2026 Virtua.Cloud. Tous droits reserves. Ce contenu est une creation originale de l'equipe Virtua.Cloud. Toute reproduction, republication ou redistribution sans autorisation ecrite est interdite.
Prêt à essayer ?
Déployez votre serveur en quelques secondes. Linux, Windows ou FreeBSD.
Voir les offres VPS