Un VPS exposé à Internet sans sécurisation est compromis en moyenne en moins de 24 heures. Pourtant, les mesures essentielles prennent moins de 30 minutes à mettre en place.
Voici la checklist que j'applique sur chaque serveur de production.
1. SSH : désactiver l'authentification par mot de passe
C'est la mesure numéro 1. Les bots scannent en continu les ports 22 et tentent des milliers de combinaisons login/mot de passe par heure.
# /etc/ssh/sshd_config
PasswordAuthentication no
PubkeyAuthentication yes
PermitRootLogin prohibit-passwordGénérez une paire de clés Ed25519 sur votre machine locale :
ssh-keygen -t ed25519 -C "votre@email.fr"
ssh-copy-id -i ~/.ssh/id_ed25519.pub root@votre-vpsRedémarrez SSH : systemctl restart sshd. Testez la connexion par clé AVANT de fermer votre session actuelle.
2. Firewall : UFW
UFW (Uncomplicated Firewall) est le firewall par défaut d'Ubuntu. Configurez-le pour n'autoriser que le strict nécessaire :
ufw default deny incoming
ufw default allow outgoing
ufw allow 22/tcp # SSH
ufw allow 80/tcp # HTTP (pour Let's Encrypt)
ufw allow 443/tcp # HTTPS
ufw enableN'ouvrez jamais le port MySQL (3306), Redis (6379), ou tout autre service interne au réseau.
3. Fail2ban : bloquer les brute-force
Fail2ban surveille les logs et bannit les IPs qui échouent trop de tentatives :
apt install fail2ban
systemctl enable fail2ban
systemctl start fail2banLa configuration par défaut protège SSH. Après quelques jours, vous verrez typiquement des dizaines d'IPs bannies : ce sont des bots qui auraient eu accès si vous aviez gardé l'auth par mot de passe.
4. Docker : ne pas exposer les ports internes
Erreur classique : publier les ports des services internes dans docker-compose.yml.
# MAUVAIS : MySQL accessible depuis Internet
mysql:
ports:
- "3306:3306"
CORRECT : MySQL accessible uniquement par les autres conteneurs
Avec Traefik comme reverse proxy, seuls les ports 80 et 443 doivent être publiés.
5. Mises à jour automatiques
Les mises à jour de sécurité Ubuntu doivent être appliquées automatiquement :
apt install unattended-upgrades
dpkg-reconfigure -plow unattended-upgrades6. Monitoring
Un serveur non surveillé est un serveur vulnérable. Mettez en place :
- Uptime Kuma : surveillance de la disponibilité de vos services (alertes par email/Telegram)
- Netdata : métriques système en temps réel (CPU, RAM, disque, réseau)
Ces deux outils sont open-source, légers (~60 Mo de RAM à eux deux), et se déploient en Docker.
7. Backups
Le dernier point mais pas le moindre : des sauvegardes automatiques et testées.
- MySQL :
mysqldumpquotidien via cron - Données Ghost : tar des volumes Docker
- Stockage distant : envoyez les backups sur un service externe (S3, rsync vers un autre serveur)
Conclusion
Ces 7 mesures transforment un VPS vulnérable en une plateforme de production sécurisée. Elles prennent moins d'une heure à mettre en place et évitent 99% des compromissions courantes. Le coût de la sécurité est négligeable comparé au coût d'une intrusion.