Meilleures pratiques de sécurité SSH : Renforcement de votre serveur et client
Secure Shell (SSH) est un outil indispensable pour les administrateurs système et les développeurs, permettant un accès à distance sécurisé aux serveurs et autres périphériques réseau. Bien que SSH offre un cryptage robuste par défaut, sa sécurité peut être considérablement améliorée en mettant en œuvre une série de meilleures pratiques côté serveur et côté client. Cet article explore les mesures de sécurité critiques conçues pour renforcer vos connexions SSH, vous protéger contre les vulnérabilités courantes et prévenir les accès non autorisés.
Négliger la sécurité SSH peut exposer vos systèmes aux attaques par force brute, aux menaces de l'homme du milieu et aux violations de données non autorisées. En adoptant les pratiques décrites ci-dessous, vous pouvez renforcer considérablement votre posture de sécurité et assurer l'intégrité et la confidentialité de vos opérations à distance.
Renforcement de la sécurité côté serveur
La configuration de votre serveur SSH (sshd_config) est primordiale pour établir une base sécurisée pour l'accès à distance. Ces modifications ont un impact direct sur la manière dont les clients se connectent et s'authentifient à votre serveur.
1. Désactiver l'authentification par mot de passe
L'authentification par mot de passe est intrinsèquement vulnérable aux attaques par force brute. La remplacer par l'authentification basée sur des clés SSH est l'une des améliorations de sécurité les plus efficaces que vous puissiez apporter.
- Pourquoi : Les clés SSH sont beaucoup plus complexes que les mots de passe et ne peuvent pas être facilement devinées ou piratées par des méthodes de force brute. Elles fournissent une forme d'authentification beaucoup plus solide.
-
Comment : Modifiez votre fichier
sshd_config(généralement situé à/etc/ssh/sshd_config) et définissezPasswordAuthentication no. Après avoir apporté les modifications, redémarrez le service SSH :```bash
sudo systemctl restart sshdou sur les anciens systèmes :
sudo service ssh restart
```Important : Assurez-vous d'avoir configuré et testé avec succès l'authentification par clé SSH avant de désactiver l'authentification par mot de passe afin d'éviter de vous bloquer.
2. Utiliser un port non standard
Bien qu'il ne s'agisse pas d'une mesure de sécurité primaire contre les attaquants sophistiqués, le changement du port SSH par défaut (22) peut réduire le bruit des bots automatisés qui scannent les serveurs vulnérables.
-
Comment : Dans
sshd_config, modifiez la directivePort. Par exemple, pour utiliser le port2222:Port 2222N'oubliez pas de mettre à jour vos règles de pare-feu pour autoriser le trafic sur le nouveau port et de spécifier le port lors de la connexion depuis votre client :
bash ssh -p 2222 utilisateur@votre_ip_serveur
3. Limiter l'accès aux utilisateurs et aux groupes
Contrôlez quels utilisateurs et groupes sont autorisés à se connecter via SSH.
AllowUsersetAllowGroups: Utilisez ces directives danssshd_configpour spécifier explicitement qui peut se connecter.
AllowUsers admin utilisateur1 AllowGroups sshusersDenyUsersetDenyGroups: Alternativement, utilisez-les pour bloquer des utilisateurs ou des groupes spécifiques.
4. Désactiver la connexion root
La connexion directe de l'utilisateur root via SSH doit être désactivée pour empêcher les attaquants de cibler immédiatement le compte le plus puissant. Au lieu de cela, les utilisateurs doivent se connecter avec leurs propres comptes et utiliser sudo pour les tâches administratives.
- Comment : Définissez
PermitRootLogin nodanssshd_config.
5. Configurer le délai d'expiration de l'inactivité et les keepalives
Empêchez les sessions SSH actives et sans surveillance de rester ouvertes indéfiniment.
ClientAliveIntervaletClientAliveCountMax: Ces paramètres côté serveur envoient des paquets nuls au client à intervalles réguliers pour vérifier si la connexion est toujours active. Si le client ne répond pas aprèsClientAliveCountMaxtentatives, le serveur déconnecte la session.
ClientAliveInterval 300 # Envoyer un paquet toutes les 5 minutes ClientAliveCountMax 2 # Déconnecter après 2 réponses manquées (10 minutes)
6. Activer uniquement le protocole 2
La version 1 du protocole SSH est obsolète et présente des vulnérabilités de sécurité connues. Assurez-vous que seul le protocole 2 est activé.
- Comment : Définissez
Protocol 2danssshd_config.
7. Renforcer les clés hôtes
Assurez-vous que les clés hôtes de votre serveur sont protégées et correctement gérées.
- Permissions : Vérifiez que les fichiers de clés hôtes (par exemple,
/etc/ssh/ssh_host_rsa_key) ont des permissions restrictives (par exemple,600) et appartiennent à root.
Meilleures pratiques de sécurité côté client
Sécuriser votre machine cliente et vos clés SSH est tout aussi crucial que le renforcement côté serveur.
1. Protéger vos clés privées
Votre clé SSH privée est la passerelle vers vos serveurs. Traitez-la avec le plus grand soin.
- Permissions : Assurez-vous que votre fichier de clé privée (par exemple,
~/.ssh/id_rsa) a des permissions strictes (par exemple,600ou400) afin que seul vous puissiez le lire.
bash chmod 600 ~/.ssh/id_rsa - Phrases secrètes : Utilisez toujours une phrase secrète forte pour chiffrer votre clé privée. Cela ajoute une couche de sécurité supplémentaire, nécessitant la phrase secrète même si le fichier clé est compromis.
- Éviter la copie : Ne partagez pas votre clé privée avec qui que ce soit et ne la stockez pas dans des endroits non sécurisés.
2. Utiliser le transfert d'agent SSH avec discernement
Le transfert d'agent SSH vous permet d'utiliser vos clés SSH locales pour vous authentifier auprès des serveurs distants sans copier vos clés privées sur ces serveurs. Bien que pratique, cela peut présenter un risque de sécurité si le serveur distant est compromis.
- Activer :
ssh -A utilisateur@votre_ip_serveur - Meilleure pratique : Utilisez le transfert d'agent uniquement lorsque cela est absolument nécessaire et déconnectez-vous dès que possible. Envisagez de le désactiver par défaut dans votre configuration client.
3. Vérifier les empreintes digitales des clés hôtes
Lorsque vous vous connectez à un serveur SSH pour la première fois, votre client vous demande de vérifier l'empreinte digitale de la clé hôte du serveur. Cela permet de prévenir les attaques de l'homme du milieu.
- Comment : Vérifiez toujours l'empreinte digitale par rapport à une source fiable (par exemple, fournie par votre fournisseur d'hébergement ou votre administrateur système). Si l'empreinte digitale change de manière inattendue lors des connexions ultérieures, cela pourrait indiquer un problème de sécurité.
4. Maintenir le logiciel client SSH à jour
Assurez-vous que votre logiciel client SSH (OpenSSH, PuTTY, etc.) est maintenu à jour pour bénéficier des derniers correctifs de sécurité et fonctionnalités.
Mesures de sécurité avancées
Au-delà des étapes fondamentales, envisagez ces techniques avancées :
1. Authentification à deux facteurs (2FA)
Implémentez la 2FA pour une couche de sécurité supplémentaire. Cela implique généralement une combinaison de quelque chose que vous connaissez (votre clé SSH ou votre mot de passe) et quelque chose que vous possédez (un code d'une application d'authentification ou d'un jeton matériel).
- Outils : Google Authenticator, Duo Security ou des jetons matériels peuvent être intégrés avec PAM (Pluggable Authentication Modules) pour SSH.
2. Fail2ban
Fail2ban est un framework logiciel de prévention des intrusions qui analyse les fichiers journaux (par exemple, /var/log/auth.log) et bannit les adresses IP qui présentent des signes malveillants – trop d'échecs de mot de passe, recherche d'exploits, etc. Il met à jour les règles du pare-feu pour rejeter les adresses IP pendant une durée spécifiée.
- Installation : Généralement disponible via les gestionnaires de paquets (
sudo apt install fail2banousudo yum install fail2ban). - Configuration : Configurez des "jails" dans
/etc/fail2ban/jail.localpour surveiller les journaux SSH et définir les durées et seuils de bannissement.
3. Configuration du pare-feu
Utilisez un pare-feu (comme ufw, firewalld ou iptables) pour restreindre l'accès à votre port SSH (qu'il soit par défaut ou personnalisé) uniquement à partir d'adresses IP ou de plages d'adresses IP de confiance.
- Exemple (ufw) :
bash sudo ufw allow from ip_de_confiance to any port 22 sudo ufw enable
Conclusion
Sécuriser vos connexions SSH est un processus continu, pas une configuration unique. En appliquant diligemment ces meilleures pratiques côté serveur et côté client, vous pouvez atténuer considérablement les risques associés à l'accès à distance. Prioriser l'authentification par clé SSH, des contrôles d'accès robustes et des outils de surveillance comme Fail2ban forment la base d'un environnement SSH sécurisé. La revue et la mise à jour régulières de vos configurations de sécurité garantiront que vos systèmes restent protégés contre les menaces évolutives.