Pourquoi la sécurité est critique
Votre agent OpenClaw n'est pas un simple chatbot. C'est un programme qui a accès à votre terminal, vos fichiers, vos clés API, et potentiellement vos comptes de messagerie. En d'autres termes : si quelqu'un compromet votre serveur, il compromet tout ce que votre agent peut faire.
La surface d'attaque est réelle :
- Exécution de commandes shell arbitraires
- Lecture/écriture de fichiers sur tout le système
- Accès réseau vers des services internes et externes
- Envoi de messages via Telegram, WhatsApp, Discord…
Un serveur mal sécurisé, c'est comme laisser les clés de votre maison sur la porte. Ce guide vous accompagne étape par étape pour verrouiller votre installation.
💡 Conseil : OpenClaw inclut un outil d'audit intégré. Lancez-le régulièrement :
openclaw security audit
openclaw security audit --deep
Il détecte automatiquement les configurations dangereuses (ports exposés, permissions trop larges, authentification manquante).
Sécuriser SSH
SSH est la porte d'entrée de votre serveur. C'est la première chose à verrouiller.
Changer le port SSH
Le port 22 est scanné en permanence par des bots. Changer de port ne vous protège pas d'un attaquant déterminé, mais élimine 99% du bruit.
sudo nano /etc/ssh/sshd_config
Trouvez la ligne #Port 22 et remplacez-la par :
Port [[ssh_port]]
⚠️ Attention : choisissez un port entre 1024 et 65535. Notez-le bien — si vous perdez l'accès, vous êtes bloqué.
Redémarrez SSH :
sudo systemctl restart sshd
Testez dans un nouveau terminal (gardez votre session actuelle ouverte !) :
ssh -p [[ssh_port]] [[username]]@[[ip]]
Désactiver l'authentification par mot de passe
Les clés SSH sont infiniment plus sûres que les mots de passe. Si vous n'avez pas encore de clé SSH, générez-en une sur votre machine locale :
ssh-keygen -t ed25519 -C "[[email]]"
ssh-copy-id -p [[ssh_port]] [[username]]@[[ip]]
Une fois connecté avec votre clé, désactivez les mots de passe :
sudo nano /etc/ssh/sshd_config
Modifiez ces lignes :
PasswordAuthentication no
PermitRootLogin prohibit-password
PubkeyAuthentication yes
sudo systemctl restart sshd
⚠️ Ne fermez pas votre session actuelle tant que vous n'avez pas vérifié que la connexion par clé fonctionne dans un autre terminal.
Configurer les timeouts SSH
Pour déconnecter automatiquement les sessions inactives, ajoutez à /etc/ssh/sshd_config :
ClientAliveInterval 300
ClientAliveCountMax 2
Cela déconnecte les sessions inactives après 10 minutes (300s × 2). Utile pour éviter les sessions fantômes.
Désactiver les protocoles dangereux
Ajoutez également ces lignes pour durcir la configuration SSH :
X11Forwarding no
AllowAgentForwarding no
MaxAuthTries 3
LoginGraceTime 30
- X11Forwarding no : désactive le forwarding graphique (inutile pour un serveur)
- MaxAuthTries 3 : limite le nombre de tentatives avant déconnexion
- LoginGraceTime 30 : seulement 30 secondes pour s'authentifier
Installer Fail2ban
Fail2ban surveille les tentatives de connexion et bannit les IP après trop d'échecs.
sudo apt update && sudo apt install -y fail2ban
Créez une configuration locale :
sudo cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local
sudo nano /etc/fail2ban/jail.local
Modifiez la section [sshd] :
[sshd]
enabled = true
port = [[ssh_port]]
filter = sshd
logpath = /var/log/auth.log
maxretry = 3
bantime = 3600
findtime = 600
Activez et démarrez :
sudo systemctl enable fail2ban
sudo systemctl start fail2ban
Vérifiez le statut :
sudo fail2ban-client status sshd
Firewall avec UFW
UFW (Uncomplicated Firewall) est le pare-feu standard d'Ubuntu. L'idée est simple : tout bloquer, puis ouvrir uniquement ce dont vous avez besoin.
Installation et configuration
sudo apt install -y ufw
Configurez les règles de base :
# Bloquer tout le trafic entrant par défaut
sudo ufw default deny incoming
# Autoriser tout le trafic sortant
sudo ufw default allow outgoing
# Ouvrir votre port SSH personnalisé
sudo ufw allow 2222/tcp comment 'SSH custom'
# Ouvrir HTTPS si vous utilisez un reverse proxy
sudo ufw allow 443/tcp comment 'HTTPS'
⚠️ IMPORTANT : ajoutez la règle SSH avant d'activer UFW, sinon vous perdez l'accès !
Activez le firewall :
sudo ufw enable
Vérifiez les règles :
sudo ufw status verbose
💡 Conseil : ne pas ouvrir le port du Gateway OpenClaw (par défaut 3578) directement. Utilisez un tunnel SSH ou Cloudflare Tunnel à la place.
Règles supplémentaires utiles
# Limiter les connexions SSH (protection anti-brute-force intégrée)
sudo ufw limit 2222/tcp
# Voir les logs du firewall
sudo ufw logging on
HTTPS avec Cloudflare Tunnel
Pourquoi un tunnel ?
Avec un tunnel Cloudflare, votre serveur n'expose aucun port publiquement. Tout le trafic passe par le réseau de Cloudflare, ce qui :
- Cache votre adresse IP réelle
- Fournit HTTPS gratuitement
- Protège contre les attaques DDoS
- Élimine le besoin d'ouvrir le port 443
C'est la méthode recommandée pour exposer une interface web liée à OpenClaw.
Installation de cloudflared
# Télécharger et installer cloudflared
curl -fsSL https://pkg.cloudflare.com/cloudflare-main.gpg | sudo tee /usr/share/keyrings/cloudflare-main.gpg >/dev/null
echo "deb [signed-by=/usr/share/keyrings/cloudflare-main.gpg] https://pkg.cloudflare.com/cloudflared $(lsb_release -cs) main" | sudo tee /etc/apt/sources.list.d/cloudflared.list
sudo apt update && sudo apt install -y cloudflared
Authentification et création du tunnel
# Se connecter à Cloudflare (ouvre un navigateur)
cloudflared tunnel login
# Créer un tunnel
cloudflared tunnel create openclaw-tunnel
# Lister les tunnels
cloudflared tunnel list
Configuration du tunnel
Créez le fichier de configuration :
mkdir -p ~/.cloudflared
nano ~/.cloudflared/config.yml
tunnel: <VOTRE-TUNNEL-ID>
credentials-file: /root/.cloudflared/<VOTRE-TUNNEL-ID>.json
ingress:
- hostname: agent.votredomaine.com
service: http://localhost:3578
- service: http_status:404
Configurer le DNS et lancer
# Créer l'entrée DNS
cloudflared tunnel route dns openclaw-tunnel agent.votredomaine.com
# Tester le tunnel
cloudflared tunnel run openclaw-tunnel
Pour le lancer comme service système :
sudo cloudflared service install
sudo systemctl enable cloudflared
sudo systemctl start cloudflared
💡 Alternative : si vous utilisez Tailscale, tailscale serve est une excellente option pour un accès privé sans exposition publique. OpenClaw documente cette approche dans ses guides réseau.
Mises à jour automatiques
Un serveur non mis à jour est une cible facile. Les mises à jour de sécurité doivent s'installer automatiquement.
Installation
sudo apt install -y unattended-upgrades apt-listchanges
Configuration
sudo dpkg-reconfigure -plow unattended-upgrades
Sélectionnez Oui pour activer les mises à jour automatiques.
Pour personnaliser, éditez :
sudo nano /etc/apt/apt.conf.d/50unattended-upgrades
Les options importantes :
Unattended-Upgrade::Allowed-Origins {
"${distro_id}:${distro_codename}";
"${distro_id}:${distro_codename}-security";
"${distro_id}ESMApps:${distro_codename}-apps-security";
"${distro_id}ESM:${distro_codename}-infra-security";
};
// Redémarrer automatiquement si nécessaire (la nuit)
Unattended-Upgrade::Automatic-Reboot "true";
Unattended-Upgrade::Automatic-Reboot-Time "04:00";
// Nettoyer les anciens noyaux
Unattended-Upgrade::Remove-Unused-Kernel-Packages "true";
Unattended-Upgrade::Remove-Unused-Dependencies "true";
Vérifiez que tout fonctionne :
sudo unattended-upgrades --dry-run --debug
Permissions et isolation
Créer un utilisateur dédié
Ne faites jamais tourner OpenClaw en tant que root en production. Créez un utilisateur dédié :
# Créer l'utilisateur
sudo adduser --disabled-password --gecos "" openclaw
# Lui donner accès à Docker si nécessaire
sudo usermod -aG docker openclaw
# Se connecter en tant que cet utilisateur
sudo su - openclaw
Installez OpenClaw sous cet utilisateur :
npm install -g openclaw
Permissions des fichiers
# Protéger le répertoire de configuration
chmod 700 ~/.openclaw
# Protéger le fichier de configuration
chmod 600 ~/.openclaw/openclaw.json
# Protéger les credentials
chmod 600 ~/.openclaw/credentials/*.json 2>/dev/null
💡 openclaw security audit --fix applique automatiquement ces permissions.
Protéger les clés API
Ne mettez jamais vos clés API directement dans openclaw.json. Utilisez des variables d'environnement :
# Créer un fichier .env
nano ~/.openclaw/.env
ANTHROPIC_API_KEY=sk-ant-xxxxx
OPENAI_API_KEY=sk-xxxxx
TELEGRAM_BOT_TOKEN=123456:ABCdef
# Protéger le fichier
chmod 600 ~/.openclaw/.env
Dans votre service systemd, chargez les variables :
[Service]
EnvironmentFile=/home/openclaw/.openclaw/.env
⚠️ Ne commitez jamais de fichier .env dans Git. Ajoutez-le à .gitignore.
Isoler avec Docker (optionnel)
Pour une isolation encore plus forte, exécutez OpenClaw dans un conteneur Docker :
# Exemple de lancement avec Docker
docker run -d \
--name openclaw \
--restart unless-stopped \
-v ~/.openclaw:/root/.openclaw \
-e ANTHROPIC_API_KEY=$ANTHROPIC_API_KEY \
openclaw/openclaw:latest
Le conteneur isole le processus du reste du système, limitant l'impact d'une éventuelle compromission.
Auditer les permissions régulièrement
# Trouver les fichiers avec des permissions trop ouvertes
find ~/.openclaw -type f -perm /o+r -ls
# Vérifier qu'aucun fichier sensible n'est lisible par d'autres
stat -c '%a %n' ~/.openclaw/openclaw.json ~/.openclaw/.env 2>/dev/null
L'audit intégré d'OpenClaw fait une partie de ce travail. Prenez l'habitude de le lancer après chaque modification :
openclaw security audit --fix
L'option --fix applique automatiquement les corrections sûres : permissions des fichiers, politique de groupe, et redaction des logs.
Monitoring
Surveiller les connexions
Commandes essentielles à connaître :
# Qui est connecté en ce moment ?
who
# Dernières connexions
last -20
# Connexions échouées
sudo lastb -20
# Ports ouverts et connexions actives
sudo ss -tulnp
# Processus réseau
sudo ss -tp
Logs à vérifier régulièrement
# Tentatives SSH
sudo grep "Failed password" /var/log/auth.log | tail -20
# Connexions réussies
sudo grep "Accepted" /var/log/auth.log | tail -20
# Logs système
sudo journalctl -u openclaw --since "1 hour ago" --no-pager
# Logs Fail2ban
sudo fail2ban-client status sshd
Script de healthcheck
Créez un script simple pour vérifier l'état de votre installation :
nano ~/healthcheck.sh
#!/bin/bash
echo "=== Healthcheck OpenClaw ==="
echo ""
# Vérifier que le Gateway tourne
if openclaw gateway status | grep -q "running"; then
echo "✅ Gateway: en cours d'exécution"
else
echo "❌ Gateway: arrêté !"
fi
# Vérifier UFW
if sudo ufw status | grep -q "active"; then
echo "✅ Firewall: actif"
else
echo "❌ Firewall: inactif !"
fi
# Vérifier Fail2ban
if systemctl is-active --quiet fail2ban; then
echo "✅ Fail2ban: actif"
else
echo "❌ Fail2ban: inactif !"
fi
# Vérifier l'espace disque
DISK_USAGE=$(df -h / | awk 'NR==2 {print $5}' | tr -d '%')
if [ "$DISK_USAGE" -lt 80 ]; then
echo "✅ Disque: ${DISK_USAGE}% utilisé"
else
echo "⚠️ Disque: ${DISK_USAGE}% utilisé (attention !)"
fi
# Vérifier les mises à jour de sécurité
UPDATES=$(apt list --upgradable 2>/dev/null | grep -c security)
if [ "$UPDATES" -eq 0 ]; then
echo "✅ Mises à jour: à jour"
else
echo "⚠️ Mises à jour: $UPDATES patchs de sécurité disponibles"
fi
# Connexions suspectes
FAILED=$(sudo grep -c "Failed password" /var/log/auth.log 2>/dev/null || echo "0")
echo "📊 Tentatives SSH échouées: $FAILED"
echo ""
echo "=== Fin du healthcheck ==="
chmod +x ~/healthcheck.sh
💡 Vous pouvez faire exécuter ce script par votre agent via un cron job OpenClaw pour recevoir un rapport quotidien.
Alertes automatiques avec OpenClaw
La vraie puissance du monitoring, c'est de le coupler avec votre agent. Créez un cron job qui exécute votre healthcheck et vous alerte :
openclaw cron add \
--name "Healthcheck serveur" \
--cron "0 */6 * * *" \
--tz "Europe/Paris" \
--session isolated \
--message "Exécute ~/healthcheck.sh et envoie-moi un résumé. Alerte si quelque chose est anormal." \
--announce \
--channel telegram
Votre agent exécutera le script toutes les 6 heures et ne vous dérangera que si quelque chose cloche. C'est la combinaison parfaite entre sécurité et automatisation.
Surveiller les changements de fichiers critiques
Pour détecter les modifications non autorisées sur les fichiers de configuration :
# Installer AIDE (Advanced Intrusion Detection Environment)
sudo apt install -y aide
# Initialiser la base de données
sudo aideinit
sudo cp /var/lib/aide/aide.db.new /var/lib/aide/aide.db
# Vérifier l'intégrité
sudo aide --check
Vous pouvez automatiser cette vérification via un cron job OpenClaw pour être alerté en cas de modification suspecte de fichiers système.
Checklist sécurité
Récapitulatif de tout ce que nous avons couvert. Cochez au fur et à mesure :
- [ ] SSH : port changé (pas 22)
- [ ] SSH : authentification par mot de passe désactivée
- [ ] SSH : clés SSH configurées
- [ ] Fail2ban : installé et configuré
- [ ] UFW : activé avec règles minimales
- [ ] UFW : port du Gateway NON exposé directement
- [ ] Tunnel : Cloudflare Tunnel ou Tailscale configuré
- [ ] Mises à jour : unattended-upgrades activé
- [ ] Utilisateur : OpenClaw tourne sous un user dédié (pas root)
- [ ] Permissions :
~/.openclawen 700, config en 600 - [ ] Clés API : dans des variables d'environnement, pas en dur
- [ ] Monitoring : healthcheck en place
- [ ] Audit :
openclaw security auditpassé sans erreur critique
⚠️ Rappel : aucune configuration n'est parfaite. La sécurité est un processus continu. Relancez openclaw security audit après chaque modification de configuration.
Prochaine étape
Votre serveur est maintenant sécurisé. Il est temps de le faire travailler pour vous ! Découvrez comment automatiser votre quotidien dans notre prochain article : Automatiser sa vie avec OpenClaw.
---\n\n## 📚 Pour aller plus loin\n\n- Qu'est-ce qu'OpenClaw ? L'agent IA qui change tout — Découvrez les bases d'OpenClaw et ses possibilités\n- Automatiser sa vie avec OpenClaw — Apprenez à utiliser OpenClaw pour automatiser vos tâches quotidiennes\n- Sécuriser son agent IA : les garde-fous essentiels — Conseils pour protéger vos agents IA contre les menaces\n- [VPS + IA : le setup complet pour