Sécuriser son VPS OVH de A à Z pour OpenClaw : guide complet 2026

Guide complet pour sécuriser un VPS OVH sous Rocky Linux ou Ubuntu : SSH, UFW, Fail2ban, Docker, Nginx, et configuration OpenClaw. Du serveur brut à l'infrastructure blindée.

Sécuriser son VPS OVH de A à Z pour OpenClaw : guide complet 2026

Vous venez de commander un VPS OVH et vous souhaitez y installer OpenClaw dans les meilleures conditions de sécurité ? Ce guide couvre chaque étape, de la configuration initiale du serveur jusqu'à l'installation et la sécurisation complète d'OpenClaw. Aucune étape n'est laissée de côté.

À la fin de ce guide, vous aurez un serveur :

  • Mis à jour et durci au niveau OS
  • Protégé par un firewall UFW configuré
  • Accessible uniquement par clé SSH (mot de passe désactivé)
  • Avec Fail2ban contre le bruteforce
  • Nginx en reverse proxy sécurisé avec HTTPS
  • Docker isolé et non exposé directement
  • OpenClaw correctement installé et sécurisé

Prérequis

Ce guide est testé sur Rocky Linux 10 et Ubuntu 24.04 LTS — les deux distributions recommandées pour un VPS OVH de production. Les commandes sont identiques sur les deux sauf mention contraire.

  • VPS OVH (gamme VPS Starter ou supérieure — minimum 2 vCPU, 4 GB RAM)
  • Accès root SSH initial (fourni par OVH à la commande)
  • Un nom de domaine pointant vers l'IP du VPS (optionnel mais recommandé pour HTTPS)
  • Votre clé publique SSH sur votre machine locale

Étape 1 — Connexion initiale et mise à jour système

Dès réception de votre VPS, connectez-vous en root et effectuez la mise à jour complète du système :

# Connexion SSH initiale (IP fournie par OVH)
ssh root@votre-ip-ovh

# Rocky Linux
dnf update -y && dnf upgrade -y

# Ubuntu
apt update && apt upgrade -y && apt dist-upgrade -y

# Vérifier la version OS
cat /etc/os-release

Ensuite, créez un utilisateur non-root pour les opérations quotidiennes :

# Créer un utilisateur (remplacer "votre-user" par votre pseudo)
useradd -m -s /bin/bash -G wheel votre-user  # Rocky Linux
# OU
useradd -m -s /bin/bash -G sudo votre-user   # Ubuntu

# Définir un mot de passe fort
passwd votre-user

# Vérifier les droits sudo
su - votre-user
sudo whoami  # doit retourner "root"

Étape 2 — Sécurisation SSH

La première chose à faire sur tout nouveau serveur est de sécuriser l'accès SSH. Nous allons : changer le port, désactiver l'accès root direct, et imposer l'authentification par clé.

2.1 Générer une paire de clés SSH sur votre machine locale

# Sur votre PC/Mac/Linux local (PAS sur le serveur)
ssh-keygen -t ed25519 -C "mon-vps-ovh"
# Appuyer Entrée pour accepter le chemin par défaut
# Définir une passphrase (recommandé)

# Afficher la clé publique à copier
cat ~/.ssh/id_ed25519.pub

2.2 Copier la clé publique sur le serveur

# Depuis votre machine locale
ssh-copy-id -i ~/.ssh/id_ed25519.pub root@votre-ip-ovh

# Ou manuellement sur le serveur
mkdir -p ~/.ssh && chmod 700 ~/.ssh
echo "VOTRE_CLE_PUBLIQUE_ICI" >> ~/.ssh/authorized_keys
chmod 600 ~/.ssh/authorized_keys

2.3 Modifier la configuration SSH

sudo cp /etc/ssh/sshd_config /etc/ssh/sshd_config.bak
sudo nano /etc/ssh/sshd_config

Modifier ou ajouter ces lignes :

# Port non-standard (choisir entre 1024 et 65535, ex: 2273)
Port 2273

# Désactiver l'accès root direct
PermitRootLogin no

# Authentification par clé uniquement
PubkeyAuthentication yes
PasswordAuthentication no
PermitEmptyPasswords no

# Limiter les tentatives
MaxAuthTries 3
LoginGraceTime 30

# Désactiver les fonctionnalités inutiles
GSSAPIAuthentication no
X11Forwarding no
AllowAgentForwarding no

# MACs sécurisés uniquement
MACs hmac-sha2-256-etm@openssh.com,hmac-sha2-512-etm@openssh.com
# Valider la config avant de recharger
sudo sshd -t && echo "Config OK"

# Recharger SSH (sans couper la session actuelle)
sudo systemctl reload sshd
SSH sécurisé VPS
Configuration SSH renforcée : port custom, PasswordAuthentication no, PermitRootLogin no

⚠️ Important : Testez la connexion par clé dans une nouvelle fenêtre terminal AVANT de fermer la session actuelle :

ssh -p 2273 votre-user@votre-ip-ovh
# Si ça fonctionne, vous pouvez fermer l'ancienne session root

Étape 3 — Firewall avec UFW

# Installer UFW si absent
# Rocky Linux
dnf install -y ufw
# Ubuntu
apt install -y ufw

# Politique par défaut : tout bloquer en entrée
ufw default deny incoming
ufw default allow outgoing

# Autoriser votre port SSH custom
ufw allow 2273/tcp comment "SSH custom"

# Autoriser HTTP et HTTPS pour Nginx
ufw allow 80/tcp comment "HTTP"
ufw allow 443/tcp comment "HTTPS"

# Activer le firewall
ufw --force enable

# Vérifier
ufw status verbose
UFW firewall VPS
UFW actif avec les règles configurées — seuls les ports 22/80/443 et SSH custom sont ouverts
# Bloquer les ports sensibles depuis l'extérieur
ufw deny 3306/tcp  # MySQL/MariaDB
ufw deny 6379/tcp  # Redis
ufw deny 27017/tcp # MongoDB

# OpenClaw gateway doit rester local uniquement
ufw deny 18789  # OpenClaw gateway — localhost only

Étape 4 — Fail2ban (protection bruteforce)

# Installation
# Rocky Linux
dnf install -y fail2ban
# Ubuntu
apt install -y fail2ban

# Créer la configuration locale
cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local
nano /etc/fail2ban/jail.local

Configuration recommandée dans jail.local :

[DEFAULT]
bantime  = 3600      # Bannir 1 heure
findtime = 600       # Fenêtre de 10 minutes
maxretry = 3         # 3 tentatives max
ignoreip = 127.0.0.1/8

[sshd]
enabled  = true
port     = 2273      # Votre port SSH custom
filter   = sshd
logpath  = /var/log/auth.log  # Ubuntu
# logpath = /var/log/secure   # Rocky Linux
maxretry = 3

[nginx-http-auth]
enabled = true
port    = http,https
# Démarrer et activer Fail2ban
systemctl enable --now fail2ban

# Vérifier le statut
fail2ban-client status
fail2ban-client status sshd
Fail2ban status
Fail2ban actif avec les jails sshd et nginx — IPs malveillantes bannies automatiquement

Étape 5 — Mises à jour automatiques de sécurité

# Rocky Linux — dnf-automatic
dnf install -y dnf-automatic

# Configurer pour appliquer seulement les correctifs de sécurité
sed -i 's/apply_updates = no/apply_updates = yes/' /etc/dnf/automatic.conf
sed -i 's/upgrade_type = default/upgrade_type = security/' /etc/dnf/automatic.conf

systemctl enable --now dnf-automatic.timer

# Ubuntu — unattended-upgrades
apt install -y unattended-upgrades
dpkg-reconfigure --priority=low unattended-upgrades

Étape 6 — Nginx en reverse proxy sécurisé

# Rocky Linux
dnf install -y nginx
# Ubuntu
apt install -y nginx

systemctl enable --now nginx

Configuration de base avec headers de sécurité :

server {
    listen 80;
    server_name votre-domaine.fr;
    return 301 https://$host$request_uri;
}

server {
    listen 443 ssl http2;
    server_name votre-domaine.fr;

    ssl_certificate     /etc/letsencrypt/live/votre-domaine.fr/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/votre-domaine.fr/privkey.pem;
    ssl_protocols TLSv1.2 TLSv1.3;
    ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384;

    # Headers de sécurité
    add_header Strict-Transport-Security "max-age=31536000; includeSubDomains; preload" always;
    add_header X-Frame-Options "SAMEORIGIN" always;
    add_header X-Content-Type-Options "nosniff" always;
    add_header Referrer-Policy "strict-origin-when-cross-origin" always;
    add_header Permissions-Policy "geolocation=(), microphone=(), camera=()" always;

    server_tokens off;

    location / {
        proxy_pass http://127.0.0.1:2368;  # Ghost ou OpenClaw
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
    }
}
# Valider la config Nginx
nginx -t

# Certificat SSL avec Certbot
dnf install -y certbot python3-certbot-nginx  # Rocky
apt install -y certbot python3-certbot-nginx  # Ubuntu

certbot --nginx -d votre-domaine.fr

# Recharger Nginx
systemctl reload nginx
Nginx configuration test
nginx -t confirme que la configuration est valide avant de recharger

Étape 7 — Installation Docker sécurisée

# Installation Docker officielle
curl -fsSL https://get.docker.com | sh

# Ajouter votre user au groupe docker
usermod -aG docker votre-user

# Démarrer Docker
systemctl enable --now docker

# Vérifier
docker --version
docker ps
Docker containers VPS
Docker listé avec les containers actifs — Ghost bindé sur 127.0.0.1:2368 uniquement

Règles de sécurité Docker :

  • Ne jamais utiliser --privileged sauf nécessité absolue
  • Toujours binder les ports sur 127.0.0.1 (ex: -p 127.0.0.1:2368:2368)
  • Utiliser des images officielles uniquement
  • Ne jamais lancer de containers en root si évitable

Étape 8 — Installation et sécurisation d'OpenClaw

8.1 Installation

# Prérequis : Node.js 20+
# Rocky Linux
dnf install -y nodejs npm
# Ubuntu
curl -fsSL https://deb.nodesource.com/setup_20.x | sudo -E bash -
apt install -y nodejs

# Installer OpenClaw globalement
npm install -g openclaw

# Vérifier l'installation
openclaw --version

8.2 Configuration initiale

# Initialiser OpenClaw
openclaw init

# Démarrer le Gateway
openclaw gateway start

# Vérifier le statut
openclaw gateway status
OpenClaw gateway status
OpenClaw Gateway en état running — port 18789 accessible uniquement en localhost

8.3 Sécuriser le Gateway OpenClaw

Le Gateway OpenClaw écoute sur un port (18789 par défaut). Il doit rester accessible uniquement en localhost, jamais exposé directement sur l'internet.

# Vérifier que le gateway écoute uniquement sur localhost
ss -tlnp | grep 18789
# Résultat attendu : 127.0.0.1:18789 (PAS 0.0.0.0:18789)

# Bloquer le port depuis l'extérieur via UFW
ufw deny in 18789 comment "OpenClaw - localhost only"

# Vérifier les ports ouverts
ss -tlnp
Ports ouverts VPS
Résultat de ss -tlnp : seuls les ports nécessaires écoutent, rien d'inutile exposé

8.4 Vérification complète OpenClaw

# Status général
openclaw status

# Logs du gateway
openclaw gateway status

# Redémarrer si nécessaire
openclaw gateway restart
OpenClaw status
openclaw status confirme que tous les composants sont opérationnels

Étape 9 — Checklist de vérification finale

Une fois tout configuré, vérifiez chaque point :

echo "=== CHECKLIST SÉCURITÉ VPS ==="

echo "1. SSH port custom:"
ss -tlnp | grep sshd

echo "2. Authentification par clé uniquement:"
sudo sshd -T | grep passwordauthentication

echo "3. UFW actif:"
ufw status | head -3

echo "4. Fail2ban actif:"
systemctl is-active fail2ban

echo "5. Nginx HTTPS:"
curl -sI https://votre-domaine.fr | head -3

echo "6. Docker non exposé:"
sudo ss -tlnp | grep 2368
# Doit afficher 127.0.0.1:2368 uniquement

echo "7. OpenClaw gateway:"
ss -tlnp | grep 18789
# Doit afficher 127.0.0.1:18789 uniquement

echo "8. OpenClaw status:"
openclaw status

Ressources et liens utiles

Conclusion

En suivant ce guide, votre VPS OVH est désormais :

  • Accessible uniquement par clé SSH sur un port non-standard
  • Protégé par UFW avec une politique de refus par défaut
  • Surveillé par Fail2ban contre les bruteforces
  • Exposé uniquement via Nginx avec HTTPS et headers de sécurité
  • OpenClaw installé et gateway non exposé publiquement

La sécurité d'un serveur n'est jamais définitive — pensez à consulter régulièrement les logs (journalctl -xe), à maintenir votre système à jour, et à revoir votre configuration UFW si vous ajoutez de nouveaux services.