securiser SSH VPSSécurité VPS··8 min de lecture·Par l'équipe OmegaCloud

Comment configurer SSH et sécuriser l'accès à son VPS Linux

Illustration de l'article OmegaCloud : securiser SSH VPS

Sécuriser SSH VPS Linux est une priorité absolue pour tout administrateur système hébergeant des données en production. SSH (Secure Shell) constitue la porte d'entrée principale vers votre serveur virtuel : une configuration faible expose votre infrastructure aux attaques par force brute, aux scans automatisés et aux intrusions. Ce guide présente les étapes concrètes pour transformer une installation SSH par défaut en forteresse solide, en combinant authentification renforcée, restrictions réseau et surveillance active.

Lorsque vous déployez un VPS Linux OmegaCloud sous Debian, Ubuntu ou Rocky Linux, le service SSH démarre avec une configuration permissive : authentification par mot de passe activée, port 22 exposé, connexions root autorisées. Cette posture initiale facilite le provisioning rapide, mais devient une cible de choix dès que l'adresse IP publique apparaît dans les scans automatisés. Nous allons durcir chaque couche de cette surface d'attaque.


Salle de serveurs moderne en Europe avec racks baies serveur NVMe éclairés en violet et teal, câbles fibre optique structurés, éclairage tamisé professionnel, aucun personnage visible


Désactiver l'authentification par mot de passe et passer aux clés SSH

L'authentification par clé publique/privée élimine 90 % des attaques par dictionnaire. Contrairement à un mot de passe, une clé ED25519 ou RSA 4096 bits ne peut être devinée par force brute dans un délai raisonnable. Commencez par générer une paire de clés sur votre poste local (Linux, macOS, WSL Windows) :

ssh-keygen -t ed25519 -C "[email protected]"

Cette commande crée deux fichiers : ~/.ssh/id_ed25519 (clé privée, à ne jamais partager) et ~/.ssh/id_ed25519.pub (clé publique, à déployer sur le serveur). Copiez la clé publique vers votre VPS :

ssh-copy-id -i ~/.ssh/id_ed25519.pub root@IP_VPS

Après avoir vérifié que la connexion par clé fonctionne, modifiez /etc/ssh/sshd_config pour interdire définitivement les mots de passe :

sudo nano /etc/ssh/sshd_config

Repérez et modifiez les lignes suivantes (décommentez-les si nécessaire) :

PasswordAuthentication no
PermitRootLogin prohibit-password
PubkeyAuthentication yes
ChallengeResponseAuthentication no

Relancez le daemon SSH pour appliquer les changements :

sudo systemctl restart sshd

Important : avant de fermer votre session actuelle, ouvrez un second terminal et testez la connexion par clé. Si vous vous êtes trompé dans la configuration, vous gardez un terminal de secours pour corriger avant le verrouillage.



Changer le port SSH et restreindre l'accès par pare-feu

Bien que la modification du port SSH ne constitue pas une défense en profondeur, elle réduit drastiquement le bruit des scans automatisés qui ciblent le port 22. Choisissez un port libre entre 1024 et 65535, par exemple 47822. Éditez à nouveau /etc/ssh/sshd_config :

Port 47822

Avant de redémarrer SSH, configurez le pare-feu ufw (Uncomplicated Firewall) pour autoriser le nouveau port et bloquer l'ancien :

sudo ufw allow 47822/tcp comment 'SSH custom port'
sudo ufw enable
sudo ufw status numbered

Relancez ensuite SSH :

sudo systemctl restart sshd

Testez la connexion avec le nouveau port :

ssh -p 47822 root@IP_VPS

Sur OmegaCloud, l'anti-DDoS volumétrique est déjà actif au niveau datacenter, mais cela ne dispense pas d'une politique de pare-feu locale stricte. Utilisez ufw pour limiter SSH à des plages IP de confiance si votre équipe utilise des adresses fixes :

sudo ufw allow from 203.0.113.0/24 to any port 47822 proto tcp
sudo ufw deny 47822/tcp

Cette règle n'autorise SSH que depuis le subnet 203.0.113.0/24, bloquant tout le reste. Pour les équipes en télétravail ou nomades, un VPN Wireguard ou OpenVPN devient alors le meilleur compromis pour fixer l'origine des connexions.


Terminal Linux affichant la configuration SSH avec syntaxe colorée, fond sombre, texte vert et blanc, éditeur nano ou vim avec fichier sshd_config ouvert, ambiance professionnelle datacenter


Mettre en place Fail2Ban pour bloquer les tentatives répétées

Fail2Ban analyse les journaux système en temps réel et bannit automatiquement les adresses IP qui multiplient les échecs d'authentification. C'est un garde-fou essentiel même après avoir sécurisé SSH VPS par clés. Installez Fail2Ban sur Debian/Ubuntu :

sudo apt update
sudo apt install fail2ban -y

Créez un fichier de configuration local pour éviter que les mises à jour ne l'écrasent :

sudo cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local
sudo nano /etc/fail2ban/jail.local

Activez la jail SSH et ajustez les seuils :

[sshd]
enabled = true
port = 47822
logpath = /var/log/auth.log
maxretry = 3
bantime = 3600
findtime = 600

Cette configuration bannit toute IP qui échoue 3 fois (maxretry) en 10 minutes (findtime), pour une durée de 1 heure (bantime). Relancez Fail2Ban :

sudo systemctl enable fail2ban
sudo systemctl restart fail2ban
sudo fail2ban-client status sshd

La commande status sshd affiche le nombre d'IP bannies en direct. Vous pouvez vérifier les IPs blacklistées avec :

sudo fail2ban-client get sshd banned

Pour débannir manuellement une IP légitime bloquée par erreur :

sudo fail2ban-client set sshd unbanip 203.0.113.42

Fail2Ban s'appuie sur iptables ou nftables selon la distribution. Vérifiez que les règles sont actives via sudo iptables -L -n ou sudo nft list ruleset.



Activer l'authentification à deux facteurs (2FA) avec Google Authenticator

L'ajout d'une couche TOTP (Time-based One-Time Password) renforce la sécurité SSH VPS même en cas de compromission de la clé privée (vol de laptop, backup non chiffré). Le module PAM libpam-google-authenticator intègre cette fonctionnalité sans surcharge logicielle. Installez-le :

sudo apt install libpam-google-authenticator -y

Exécutez la commande en tant qu'utilisateur concerné (jamais en root si vous avez créé un compte admin dédié) :

google-authenticator

Répondez y aux questions proposées pour accepter TOTP, mettre à jour le fichier .google_authenticator et activer les protections contre les réutilisations de codes. L'outil affiche un QR code : scannez-le avec Google Authenticator, Authy ou FreeOTP sur votre smartphone.

Modifiez ensuite /etc/pam.d/sshd pour exiger le code OTP :

sudo nano /etc/pam.d/sshd

Ajoutez cette ligne en haut du fichier, avant @include common-auth :

auth required pam_google_authenticator.so nullok

L'option nullok permet aux utilisateurs n'ayant pas encore configuré 2FA de continuer à se connecter ; retirez-la une fois le déploiement terminé. Modifiez enfin /etc/ssh/sshd_config :

ChallengeResponseAuthentication yes
AuthenticationMethods publickey,keyboard-interactive

Cette directive impose clé SSH et code TOTP. Relancez SSH :

sudo systemctl restart sshd

Lors de la prochaine connexion, vous devrez saisir le code à 6 chiffres affiché par votre application mobile après validation de la clé privée. Conservez les codes de secours générés par google-authenticator dans un coffre-fort de mots de passe (KeePassXC, Bitwarden).



Surveiller les connexions et journaux avec auditd

Le daemon auditd enregistre chaque action privilégiée, y compris les connexions SSH et les modifications de fichiers critiques. Installez-le :

sudo apt install auditd audispd-plugins -y
sudo systemctl enable auditd
sudo systemctl start auditd

Créez une règle pour tracer toutes les connexions SSH :

sudo auditctl -w /var/log/auth.log -p wa -k ssh_access
sudo auditctl -w /etc/ssh/sshd_config -p wa -k sshd_config_change

Consultez les événements en temps réel :

sudo ausearch -k ssh_access

Pour une analyse graphique, des outils comme aureport ou l'intégration avec un stack ELK (Elasticsearch-Logstash-Kibana) permettent de corréler les événements. Le panel OmegaCloud offre un monitoring temps réel CPU/RAM/réseau, mais l'analyse des logs système reste côté client.

Une autre pratique recommandée consiste à activer le journaling centralisé avec rsyslog ou journald vers un serveur de logs dédié, isolant les traces d'audit du VPS potentiellement compromis. Cette architecture est documentée dans les guides de l'ANSSI.



Durcir les paramètres cryptographiques SSH

Les versions récentes d'OpenSSH supportent des algorithmes de chiffrement et d'échange de clés performants et résistants aux attaques quantiques en devenir. Désactivez les ciphers obsolètes (3DES, RC4, CBC) et privilégiez ChaCha20-Poly1305 et AES-GCM. Éditez /etc/ssh/sshd_config :

Ciphers [email protected],[email protected],[email protected]
MACs [email protected],[email protected]
KexAlgorithms curve25519-sha256,[email protected],diffie-hellman-group16-sha512
HostKeyAlgorithms ssh-ed25519,rsa-sha2-512,rsa-sha2-256

Vérifiez la compatibilité de votre client SSH local avec ssh -Q cipher et ssh -Q kex. Redémarrez le daemon :

sudo systemctl restart sshd

Pour aller plus loin, Mozilla publie un guide de configuration OpenSSH révisé régulièrement, référence dans l'industrie.


Schéma réseau en vue isométrique montrant serveur rack VPS connecté via fibre optique à switch redondant, flux de données en teal et violet, architecture datacenter propre, style technique diagramme infrastructure


Automatiser les mises à jour de sécurité

Les vulnérabilités OpenSSH critiques (CVE-2023-38408, CVE-2021-41617) sont corrigées rapidement par les distributions, mais requièrent l'application des patchs. Sur Debian/Ubuntu, activez unattended-upgrades :

sudo apt install unattended-upgrades -y
sudo dpkg-reconfigure -plow unattended-upgrades

Configurez les mises à jour automatiques en éditant /etc/apt/apt.conf.d/50unattended-upgrades :

Unattended-Upgrade::Allowed-Origins {
    "${distro_id}:${distro_codename}-security";
};
Unattended-Upgrade::AutoFixInterruptedDpkg "true";
Unattended-Upgrade::MinimalSteps "true";
Unattended-Upgrade::Remove-Unused-Kernel-Packages "true";
Unattended-Upgrade::Automatic-Reboot "false";

L'option Automatic-Reboot "false" évite les redémarrages non planifiés, laissant l'administrateur planifier les fenêtres de maintenance. Surveillez les logs dans /var/log/unattended-upgrades/.

Sur les infrastructures VPS Linux OmegaCloud, le snapshot manuel depuis le panel permet de capturer l'état du système avant toute mise à jour critique, offrant un rollback rapide en cas de régression.



Conclusion

Sécuriser SSH VPS Linux repose sur un empilement de défenses : clés cryptographiques fortes, restriction réseau par IP et port, détection d'intrusion avec Fail2Ban, authentification multi-facteurs et journalisation. Aucune mesure isolée ne suffit, mais leur combinaison élève le coût d'une attaque au-delà des capacités des scripts automatisés. Maintenez cette posture en révisant régulièrement les logs, en surveillant les CVE OpenSSH et en testant la restauration de vos snapshots. Une infrastructure cloud sécurisée commence par la porte d'entrée SSH verrouillée.



FAQ

Faut-il vraiment désactiver complètement l'authentification par mot de passe SSH ?

Oui, c'est la recommandation la plus impactante. Les attaques par dictionnaire et credential stuffing ciblent massivement les mots de passe. L'authentification par clé publique élimine ce vecteur tout en simplifiant la gestion automatisée (Ansible, Terraform). Conservez toujours une console KVM de secours (disponible dans le panel OmegaCloud) pour intervenir en cas de perte de clé privée.

Le changement de port SSH suffit-il comme protection ?

Non, c'est une couche d'obscurité (security by obscurity) qui réduit le bruit mais n'empêche pas un attaquant déterminé de scanner tous les ports. Combinez-le obligatoirement avec désactivation des mots de passe, Fail2Ban et restriction IP via ufw ou iptables. Le port non-standard facilite surtout la lecture des logs en éliminant 95 % des scans opportunistes.

Comment récupérer l'accès SSH après une mauvaise manipulation de sshd_config ?

Utilisez la console KVM accessible depuis le panel de gestion de votre hébergeur. Sur OmegaCloud, cliquez sur « Console » dans le dashboard VPS : vous obtenez un accès direct au terminal sans passer par SSH. Connectez-vous en root, corrigez /etc/ssh/sshd_config, relancez systemctl restart sshd et testez depuis un autre terminal avant de fermer la console. Conservez toujours une session SSH ouverte lors des modifications critiques.

Prêt à mettre en pratique ce que vous venez de lire ?

Découvrir nos offres

Articles liés

Prêt à vous lancer ?

à partir de 6,99 € HT/mois

Découvrir nos offres

Hébergements

Navigation