Déployer OpenClaw en sécurité sur un VPS
Installez et sécurisez OpenClaw sur un VPS avec authentification du gateway, reverse proxy TLS, sandboxing Docker, durcissement du pare-feu et isolation systemd. Chaque étape inclut une commande de vérification.
OpenClaw est un assistant IA open-source et auto-hébergé qui se connecte aux applications de messagerie (WhatsApp, Telegram, Discord, Slack, Signal) et aux fournisseurs de modèles IA. Il exécute un processus Gateway sur votre serveur, reçoit les messages, exécute des actions d'agents via des outils et envoie les réponses. Toutes les données restent sur votre infrastructure.
Ce guide présente un déploiement axé sécurité 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 exécuter le gateway comme service systemd durci.
Pourquoi la sécurité d'OpenClaw compte-t-elle sur un VPS ?
OpenClaw exécute des agents IA capables de lancer des commandes shell, lire des fichiers et naviguer sur le web depuis votre serveur. Une instance mal configurée donne aux attaquants ces mêmes capacités. Ce n'est pas théorique.
Début 2026, des chercheurs ont trouvé plus de 42 000 instances OpenClaw exposées sur l'internet public. 63 % étaient vulnérables à une exploitation à distance. CVE-2026-25253 (CVSS 8.8) permettait une exécution de code à 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, désactiver les invites de confirmation, s'échapper du sandboxing Docker et exécuter des commandes arbitraires.
Le correctif est arrivé dans la version 2026.1.29, mais patcher seul ne suffit pas. La sécurité nécessite des couches : isolation réseau, 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 ?
| Prérequis | Détails |
|---|---|
| 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) |
| Accès SSH | Authentification par clé configurée |
| Clé API fournisseur IA | Anthropic, OpenAI ou Google Gemini |
| Node.js | Version 22 ou plus récente |
| Docker | Engine 20+ avec le plugin Compose |
Si vous avez besoin d'aide pour provisionner un VPS ou configurer des clés SSH, consultez Sécurité Linux VPS : menaces, couches de défense et guide de durcissement.
Comment durcir le VPS avant d'installer OpenClaw ?
Avant d'installer quoi que ce soit, verrouillez l'OS. Si vous avez déjà suivi Sécurité Linux VPS : menaces, couches de défense et guide de durcissement et Sécuriser SSH sur un VPS Linux : guide sshd_config, passez à la section suivante.
Créer un utilisateur dédié
Exécuter des services en root est un risque inutile. Créez un utilisateur système openclaw :
sudo useradd -r -m -s /bin/bash openclaw
Cela crée un compte système avec un répertoire personnel. OpenClaw stocke sa configuration dans ~/.openclaw, le répertoire personnel est donc nécessaire.
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
Contrôlez les règles :
sudo ufw status verbose
Vous devriez voir les trois ports autorisés et une politique de refus par défaut pour le trafic entrant. Le port 18789 (le gateway OpenClaw) est volontairement absent. Le gateway écoute uniquement sur localhost et se trouvé derrière Nginx.
Installer fail2ban
sudo apt update && sudo apt install -y fail2ban
sudo systemctl enable --now fail2ban
Vérifiez qu'il tourne :
sudo systemctl status fail2ban
La sortie devrait afficher active (running). fail2ban surveille les logs SSH et bannit les IP après des tentatives de connexion échouées répétées.
Comment installer OpenClaw sur Ubuntu ?
OpenClaw propose deux méthodes d'installation : npm (directe) et Docker. Les deux sont couvertes ci-dessous. Choisissez-en une. Docker est recommandé pour les déploiements VPS car l'isolation par conteneur limite le rayon d'impact si le processus agent est compromis.
Option A : installation Docker (recommandée)
Installez Docker s'il n'est pas déjà présent :
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'équivalent d'un accès root sur l'hôte. C'est nécessaire pour les fonctionnalités Docker d'OpenClaw, mais cela signifie que l'utilisateur openclaw peut contrôler tous les conteneurs du système. Le durcissement systemd et l'isolation sandbox ci-dessous limitent ce que le processus OpenClaw peut effectivement faire.
Passez à l'utilisateur openclaw et configurez OpenClaw :
sudo -u openclaw -i
Clonez le dépôt et lancez la configuration avec l'image pré-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
Définir OPENCLAW_IMAGE indique au script de télécharger l'image pré-construite depuis GitHub Container Registry au lieu de compiler depuis les sources. Le script lance l'onboarding et démarre le gateway via Docker Compose.
Le gateway à l'intérieur du conteneur écoute sur toutes les interfaces par défaut (mode lan). C'est correct pour les déploiements Docker car le port mapping de Docker doit atteindre le gateway dans le conteneur. L'accès externe est bloqué au niveau de l'hôte via les règles iptables DOCKER-USER (couvertes plus bas).
Assurez-vous que le gateway tourne :
curl -fsS http://127.0.0.1:18789/healthz
Une réponse 200 OK confirme que le gateway est actif. Le endpoint /readyz confirme qu'il est prêt à 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
Confirmez la version :
node --version
La sortie devrait afficher v22.x.x ou plus récent.
Passez à l'utilisateur openclaw et installez :
sudo -u openclaw -i
npm install -g openclaw@latest
Lancez l'onboarding :
openclaw onboard
Sélectionnez loopback pour le mode de liaison. L'assistant d'onboarding génère un token d'authentification du gateway et le stocke dans ~/.openclaw/openclaw.json.
Démarrez le gateway :
openclaw gateway start
Confirmez :
curl -fsS http://127.0.0.1:18789/healthz
Vérifier la liaison du gateway
Vérifiez sur quoi le gateway écoute :
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, arrêtez le gateway et définissez 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'hôte pour que le trafic localhost atteigne le conteneur. Les règles iptables DOCKER-USER (couvertes dans la section pare-feu ci-dessous) bloquent l'accès externe au niveau réseau.
Verrouiller les permissions de fichiers
Le fichier de configuration contient votre token d'authentification et vos clés API :
chmod 700 /home/openclaw/.openclaw
chmod 600 /home/openclaw/.openclaw/openclaw.json
Testez :
ls -la /home/openclaw/.openclaw/openclaw.json
Vous devriez voir -rw-------. Pour les installations npm, le propriétaire est openclaw. Pour les installations Docker, le propriétaire peut s'afficher comme uid 1000 (l'utilisateur node dans le conteneur). C'est normal et nécessaire pour que le conteneur puisse lire la configuration.
Comment configurer l'authentification du gateway ?
Le gateway OpenClaw exige une authentification par défaut. Si aucun token ni mot de passe n'est configuré, le gateway refuse les connexions WebSocket (fail-closed). L'assistant d'onboarding génère un token automatiquement.
OpenClaw supporte trois modes d'authentification :
| Mode | Fonctionnement | Idéal pour |
|---|---|---|
token |
Token partagé dans chaque requête | VPS mono-utilisateur (recommande) |
password |
Authentification par mot de passe | Configurations multi-appareils |
trusted-proxy |
Délégué l'auth à un reverse proxy | Configurations entreprise/SSO |
Définir un token fort
Si vous souhaitez remplacer le token génère automatiquement, générez-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. Créez 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
Éditez ~/.openclaw/openclaw.json pour référencer 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 démarrage. Pour les installations Docker, définissez la variable OPENCLAW_GATEWAY_TOKEN dans le fichier .env de votre répertoire openclaw-src. Le script docker-setup.sh génère ce fichier automatiquement.
Redémarrez le gateway et testez que les requêtes non authentifiées sont rejetées :
curl -s -o /dev/null -w "%{http_code}" http://127.0.0.1:18789/healthz
Le endpoint de santé 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 entrées auth required ou connection rejected confirmant le comportement fail-closed.
Comment configurer Nginx comme reverse proxy TLS pour OpenClaw ?
Le gateway écoute sur localhost. Nginx se place devant, termine le TLS et proxifie les connexions WebSocket vers le gateway. Cela vous donne des connexions chiffrées sans exposer le port du gateway.
Pour en savoir plus sur les reverse proxies Nginx, consultez Configurer Nginx comme reverse proxy. Pour la configuration TLS avec Let's Encrypt, voir Configurer Let's Encrypt SSL/TLS pour Nginx sur Debian 12 et Ubuntu 24.04.
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 réel. Certbot configuré le renouvellement automatique.
Configurer le reverse proxy
Créez 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 utilisé $remote_addr (écrasement), pas $proxy_add_x_forwarded_for (ajout). C'est intentionnel. L'ajout permet aux clients d'injecter de fausses IP dans l'en-tête. La documentation OpenClaw recommandé spécifiquement l'écrasement.
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-têtes 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}"
}
}
}
Redémarrez le gateway pour appliquer. Vérifiez que le TLS fonctionne depuis votre machine locale (pas le serveur) :
curl -I https://openclaw.example.com/healthz
Vous devriez obtenir une réponse 200 en HTTPS avec un certificat valide. Durcissement de la sécurité Nginx sur Ubuntu et DebianPour plus de durcissement Nginx, consultez le guide de durcissement sécurité Nginx (à venir).
Comment corriger le contournement du pare-feu Docker et UFW ?
Docker manipule iptables directement, contournant UFW entièrement. Si vous exécutez OpenClaw avec Docker et publiez un port, ce port est accessible depuis internet même si UFW le bloque. C'est l'une des erreurs de configuration les plus courantes dans les déploiements Docker.
Pour une explication complète de ce problème, consultez Docker contourne UFW : 4 solutions testées pour votre VPS.
La correction utilisé la chaîne DOCKER-USER, que Docker traite avant de transmettre le trafic aux conteneurs.
Bloquer tout accès 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 diffère (vérifiez avec ip link show).
Autoriser le trafic loopback
Nginx sur le même hôte doit pouvoir atteindre le conteneur gateway sur localhost :
sudo iptables -I DOCKER-USER -i lo -j ACCEPT
Autoriser les connexions établies
sudo iptables -I DOCKER-USER -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
Rendre les règles persistantes
sudo apt install -y iptables-persistent
sudo netfilter-persistent save
Vérifier les règles
sudo iptables -L DOCKER-USER -n -v
Vous devriez voir les règles ACCEPT pour le loopback et les connexions établiés àu-dessus de la règle DROP pour eth0. L'ordre compte : iptables traite les règles 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 exécute les outils des agents dans des conteneurs isolés. Quand un agent lance une commande shell ou écrit un fichier, cela se passe dans un conteneur jetable, pas sur votre hôte.
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 paramètre :
| Paramètre | 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'accès réseau depuis la sandbox (empêche l'exfiltration) |
memory |
"1g" |
Limite la RAM du conteneur à 1 Go |
cpus |
1 |
Limite le conteneur à 1 coeur CPU |
Construisez l'image de sandbox :
cd ~/openclaw-src
scripts/sandbox-setup.sh
Contrôlez 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 portée, l'accès a l'espace de travail, la politique d'outils et les surcharges éventuelles. Confirmez que mode: all et network: none apparaissent dans la sortie.
Si vous avez besoin d'un accès réseau pour des outils spécifiques (ex. web_search), accordez-le sélectivement par agent plutôt que de modifier le défaut global. Voir la section politique d'outils ci-dessous.
OpenClaw bloqué par défaut les sources de montages bind dangereuses : /var/run/docker.sock, /etc, /proc, /sys et /dev sont tous refusés. Ne surchargez pas cela avec des montages bind personnalisés qui les re-exposent. Si un conteneur sandbox a besoin d'accéder à des données de l'hôte, utiliséz 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 données mais pas les modifier.
Comment verrouiller la politique d'outils OpenClaw ?
La politique d'outils contrôle quels outils les agents peuvent utilisér. La sandbox a son propre filtre d'outils, séparé des permissions au niveau agent. Le refus l'emporte toujours sur l'autorisation.
Politique de refus par défaut
Définissez un défaut restrictif dans ~/.openclaw/openclaw.json :
{
tools: {
deny: ["exec", "write", "edit", "browser"],
allow: ["read", "web_search"]
}
}
Cela bloqué l'exécution de commandes, l'écriture de fichiers, l'édition de fichiers et l'accès navigateur par défaut. Les agents peuvent toujours lire des fichiers et effectuer des recherches web.
Profils par agent
Surchargez les défauts pour des agents spécifiques qui ont besoin de plus d'accès. 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 exécuter des commandes mais uniquement dans un conteneur sandbox sans réseau. Le messaging-agent peut lire et chercher mais ne peut rien exécuter.
Désactiver le mode élevé
Le mode élevé (elevated mode) permet aux agents d'exécuter des commandes directement sur l'hôte du gateway, contournant la sandbox. Désactivez-le :
{
tools: {
elevated: {
enabled: false
}
}
}
Si vous laissez le mode élevé activé, toute personne pouvant discuter avec l'agent peut potentiellement exécuter des commandes sur l'hôte. Sur un VPS, c'est de l'exécution de code à distance.
Isolation DM multi-utilisateurs
Si plusieurs personnes envoient des messages a votre instance OpenClaw, activez le cloisonnement DM par pair. Par défaut, 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 à chaque expéditeur sa propre session avec un contexte isolé et un conteneur sandbox séparé.
Comment exécuter OpenClaw comme service systemd durci ?
Exécuter OpenClaw sous systemd signifie qu'il démarre au boot, redémarre en cas de crash et bénéficie de l'isolation de processus via les directives de durcissement.
Créer le fichier d'unité de service
Pour les installations Docker, créez le fichier d'unité 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 |
Empêche le processus d'acquérir des privilèges supplémentaires via setuid/setgid |
PrivateTmp |
Donne au service son propre /tmp, invisible aux autres processus |
ProtectSystem=strict |
Monte l'ensemble du système de fichiers en lecture seule sauf les ReadWritePaths explicites |
ProtectHome=read-only |
Empêche l'écriture dans tout répertoire personnel sauf le chemin autorisé |
CapabilityBoundingSet= |
Supprime toutes les capabilities Linux (ensemble vide) |
ProtectKernelTunables |
Bloque les écritures vers /proc/sys, /sys |
ProtectKernelModules |
Empêche le chargement de modules noyau |
MemoryMax=4G |
Tue le service s'il dépasse 4 Go de RAM, empêchant l'OOM sur l'hôte |
Activer et démarrer
sudo systemctl daemon-reload
sudo systemctl enable --now openclaw-gateway
enable le fait démarrer au boot. --now le démarre immédiatement.
Vérifiez qu'il tourne :
sudo systemctl status openclaw-gateway
La sortie devrait afficher active (running). Consultez les logs pour d'éventuelles erreurs :
journalctl -u openclaw-gateway -f --no-pager -n 50
Comment vérifier que le déploiement complet est sécurisé ?
Parcourez cette checklist après le déploiement pour confirmer que chaque couche fonctionne.
1. Lancer l'audit de sécurité intégré 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 réseau sans authentification, permissions d'outils élevées, problèmes 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'accès externe est bloqué par les règles 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. Vérifier 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 liés à la santé.
6. Vérifier 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. Vérifier 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. Vérifier le durcissement systemd
systemd-analyze security openclaw-gateway
Cela note les propriétés de sécurité du service. Visez un score autour de 5.0 ou moins (plus bas = plus sécurisé). Les services basés sur Docker obtiennent généralement un score entre 5.0 et 5.5 car Docker nécessite l'accès aux namespaces et interfaces de périphériques. Les directives de durcissement ci-dessus font passer le score du défaut ~9.6 à environ 5.2.
9. Vérifier les règles 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 chaîne DOCKER-USER devrait rejeter le trafic externe.
10. Vérifier les services exposés
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 apparaître.
Comment garder OpenClaw à jour et sauvegarde ?
Masquage de version
Masquez la version d'OpenClaw dans les réponses du gateway. La divulgation de version aide les attaquants à cibler des vulnérabilités connues. Dans ~/.openclaw/openclaw.json :
{
gateway: {
exposeVersion: false
}
}
Combine avec la directive server_tokens off; déjà présente dans la configuration Nginx, cela empêche le fingerprinting du reverse proxy et de l'application.
Mises à jour
OpenClaw publie des versions fréquemment. Vérifiez la version actuelle :
openclaw --version
Pour les installations Docker :
cd ~/openclaw-src && docker compose exec openclaw-gateway node dist/index.js --version
Pour mettre à jour une installation Docker :
cd ~/openclaw-src
git pull
docker compose pull
docker compose up -d openclaw-gateway
Pour mettre à jour une installation npm :
npm update -g openclaw
Après la mise à jour, redémarrez le gateway et relancez l'audit de sécurité :
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 à 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 présents. L'oublier après la mise à jour vous bloqué hors du gateway.
Sauvegardes
Sauvegardez le répertoire de configuration :
sudo tar czf /root/openclaw-backup-$(date +%Y%m%d).tar.gz /home/openclaw/.openclaw
Stockez les sauvegardes hors du serveur. Le répertoire de configuration contient vos tokens d'authentification, configurations d'agents et l'état des conversations. Protégez les sauvegardes avec le même soin que la configuration en production : chiffrez-les avec gpg ou stockez-les dans un volume chiffré.
Gestion des logs
Consultez les logs en temps réel :
journalctl -u openclaw-gateway -f
Les logs OpenClaw peuvent contenir des extraits de conversations. Définissez une rétention 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 ?
| Symptôme | Cause probable | Correction |
|---|---|---|
| Le gateway refuse de démarrer | Port 18789 déjà utilisé | ss -tulpn | grep 18789 pour trouver le processus en conflit |
| Les connexions WebSocket échouent à travers Nginx | En-têtes Upgrade et Connection manquants |
Vérifiez les directives proxy_set_header dans votre configuration Nginx |
| Les conteneurs sandbox ne démarrent 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 |
Dérive de configuration après mise à jour | Consultez la sortie de l'audit et appliquez les corrections recommandées |
| Gateway accessible depuis une IP externe | Contournement Docker/UFW | Ajoutez les règles iptables DOCKER-USER comme décrit ci-dessus |
| Erreurs de certificat TLS | Échec du renouvellement Certbot | Lancez sudo certbot renew --dry-run pour diagnostiquer |
| OOM kills sur le VPS | MemoryMax manquant dans l'unité systemd |
Ajoutez MemoryMax=4G à la section [Service] |
Sécuriser votre serveur d'agents IA : sandboxing, pare-feu et supervisionPour des sujets de sécurité avancés comme la limitation de débit et la surveillance des serveurs d'agents IA, consultez le guide de sécurisation des serveurs d'agents IA (à venir).
Prêt à essayer ?
Deployez OpenClaw sur votre propre VPS. →