Un VPS fraîchement déployé est une cible immédiate : des scanners automatisés tentent des connexions SSH en permanence, à la recherche de mots de passe faibles ou de services mal configurés. En suivant ces 10 étapes dans les premières minutes après votre première connexion, vous réduisez drastiquement la surface d'attaque.
Effectuez ces opérations depuis une connexion SSH active que vous ne fermerez pas avant d'avoir testé chaque modification. Une mauvaise configuration du pare-feu sans vérification préalable peut vous verrouiller hors de votre serveur.
1. Mettre à jour le système immédiatement
La première chose à faire, avant toute configuration, est de mettre à jour tous les paquets installés. Les images VPS sont souvent générées semaines ou mois avant votre déploiement — des vulnérabilités critiques peuvent déjà être connues.
# Debian / Ubuntu
apt update && apt upgrade -y && apt autoremove -y
# CentOS / AlmaLinux / Rocky
dnf update -y
Activez ensuite les mises à jour de sécurité automatiques avec unattended-upgrades (Debian/Ubuntu) ou dnf-automatic (RedHat). Elles s'appliquent en arrière-plan et ne redémarrent le serveur que si nécessaire.
2. Créer un utilisateur non-root et désactiver root SSH
Se connecter en tant que root directement en SSH est une mauvaise pratique : la moindre commande mal tapée peut avoir des conséquences irréversibles. Créez un utilisateur standard avec les droits sudo :
adduser votre_user
usermod -aG sudo votre_user # Debian/Ubuntu
usermod -aG wheel votre_user # CentOS/Rocky
Testez la connexion SSH avec ce nouvel utilisateur avant de désactiver root. Une fois validé, éditez /etc/ssh/sshd_config et positionnez :
PermitRootLogin no
3. Utiliser des clés SSH à la place des mots de passe
L'authentification par clé est cryptographiquement bien plus solide qu'un mot de passe. Générez une paire de clés sur votre machine locale (si vous n'en avez pas déjà une) :
# Sur votre machine locale
ssh-keygen -t ed25519 -C "[email protected]"
# Copier la clé publique sur le serveur
ssh-copy-id -i ~/.ssh/id_ed25519.pub votre_user@IP_DU_SERVEUR
Une fois connecté avec la clé, désactivez l'authentification par mot de passe dans /etc/ssh/sshd_config :
PasswordAuthentication no
PubkeyAuthentication yes
Rechargez SSH : systemctl reload sshd. À partir de ce moment, seule votre clé privée permet la connexion.
4. Changer le port SSH par défaut
Le port 22 est scanné des milliers de fois par jour par des bots automatisés. Changer le port ne constitue pas une protection en soi, mais réduit considérablement le bruit dans vos logs et les tentatives de brute-force basiques.
# /etc/ssh/sshd_config
Port 2222 # Choisissez un port > 1024 non utilisé
Avant de redémarrer SSH sur le nouveau port, ajoutez-le à votre règle de pare-feu — sinon vous serez verrouillé hors du serveur.
5. Configurer un pare-feu avec UFW ou nftables
Un pare-feu en liste blanche (tout est bloqué par défaut, on n'ouvre que ce dont on a besoin) est la règle d'or. UFW (Uncomplicated Firewall) est la solution la plus simple sur Debian/Ubuntu :
apt install ufw -y
# Politique par défaut : tout bloquer en entrée, autoriser en sortie
ufw default deny incoming
ufw default allow outgoing
# Ouvrir les ports nécessaires
ufw allow 2222/tcp # SSH (nouveau port)
ufw allow 80/tcp # HTTP
ufw allow 443/tcp # HTTPS
# Activer
ufw enable
ufw status verbose
Pour les utilisateurs avancés, nftables offre plus de contrôle et de performances, notamment pour les règles dynamiques ou le rate limiting.
6. Installer Fail2ban pour bloquer les brute-force
Même avec des clés SSH, Fail2ban protège vos autres services (Nginx, Postfix, FTP…) en bannissant automatiquement les IP après un certain nombre d'échecs d'authentification.
apt install fail2ban -y
cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local
Éditez /etc/fail2ban/jail.local pour personnaliser les seuils :
[DEFAULT]
bantime = 1h
findtime = 10m
maxretry = 5
[sshd]
enabled = true
port = 2222 # Votre port SSH personnalisé
systemctl enable --now fail2ban
7. Désactiver les services inutiles
Chaque service en écoute sur le réseau est une surface d'attaque potentielle. Listez les ports ouverts et les services actifs, puis désactivez tout ce qui n'est pas nécessaire :
# Voir les ports en écoute
ss -tulpn
# Désactiver un service (exemple : postfix si vous n'envoyez pas d'emails)
systemctl disable --now postfix
8. Durcir les paramètres réseau du noyau
Le fichier /etc/sysctl.conf (ou un fichier dans /etc/sysctl.d/) permet d'activer des protections réseau au niveau du noyau :
# /etc/sysctl.d/99-hardening.conf
net.ipv4.tcp_syncookies = 1 # Protection SYN flood
net.ipv4.conf.all.rp_filter = 1 # Protection IP spoofing
net.ipv4.conf.all.accept_redirects = 0
net.ipv6.conf.all.accept_redirects = 0
net.ipv4.icmp_echo_ignore_broadcasts = 1
kernel.dmesg_restrict = 1
sysctl -p /etc/sysctl.d/99-hardening.conf
9. Activer la surveillance des logs avec logwatch ou auditd
Vous ne pouvez pas réagir à ce que vous ne voyez pas. Deux outils complémentaires :
- logwatch — Envoie un rapport quotidien par email résumant les événements importants (connexions SSH, erreurs système, activité du pare-feu).
- auditd — Journal d'audit système plus granulaire : qui a modifié quel fichier, quelles commandes ont été exécutées en root.
apt install logwatch auditd -y
systemctl enable --now auditd
10. Activer l'authentification à deux facteurs (2FA) pour SSH
Pour les serveurs critiques, ajoutez une couche d'authentification TOTP (Google Authenticator, Authy) en plus de la clé SSH. Le module PAM libpam-google-authenticator permet de configurer cela en quelques minutes :
apt install libpam-google-authenticator -y
# En tant que votre_user (pas root) :
google-authenticator
Suivez l'assistant, scannez le QR code avec votre application d'authentification, puis activez le module dans /etc/pam.d/sshd et configurez ChallengeResponseAuthentication yes dans /etc/ssh/sshd_config.
Mises à jour système · Utilisateur non-root + sudo · Clés SSH uniquement · Port SSH personnalisé · Pare-feu UFW/nftables · Fail2ban · Services minimaux · Durcissement sysctl · Surveillance des logs · 2FA sur les serveurs critiques
Conclusion
Ces 10 étapes constituent le socle minimum pour tout VPS exposé sur Internet. Elles ne prennent qu'une heure à mettre en place et éliminent la grande majorité des vecteurs d'attaque courants. La sécurité est un processus continu : auditez régulièrement vos configurations, suivez les bulletins de sécurité de votre distribution, et maintenez vos applications à jour avec la même rigueur que votre système d'exploitation.
À lire ensuite
Pterodactyl : erreurs SteamCMD à l'installation
Egg Pterodactyl bloqué à l'installation ? Erreurs SteamCMD 0x202, 0x402, 0x602 et No subscription, image ghcr.io/parkervcp/steamcmd, nœud ARM ou MTU
Pterodactyl : plusieurs serveurs par machine
Conteneurs Docker, eggs, gestion multi-utilisateurs, dimensionnement… Le guide pour héberger et revendre plusieurs serveurs de jeux avec Pterodactyl.
Sécuriser le Bureau à distance (RDP) d'un VPS Windows
Le RDP est scanné en permanence. Port, comptes, verrouillage, filtrage par IP, passerelle et journaux