Meilleures pratiques de sécurité SSH : Renforcer votre serveur et votre client

Ce guide complet présente les meilleures pratiques de sécurité essentielles pour les connexions SSH. Apprenez à renforcer votre serveur en désactivant l'authentification par mot de passe, en modifiant les ports par défaut et en limitant l'accès. Découvrez des habitudes cruciales côté client, notamment la protection des clés privées et la vérification des clés d'hôte. Nous abordons également des mesures avancées comme l'authentification à deux facteurs et Fail2ban pour protéger votre accès à distance contre toute intrusion non autorisée.

46 vues

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éfinissez PasswordAuthentication no. Après avoir apporté les modifications, redémarrez le service SSH :

    ```bash
    sudo systemctl restart sshd

    ou 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 directive Port. Par exemple, pour utiliser le port 2222 :

    Port 2222

    N'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.

  • AllowUsers et AllowGroups : Utilisez ces directives dans sshd_config pour spécifier explicitement qui peut se connecter.
    AllowUsers admin utilisateur1 AllowGroups sshusers
  • DenyUsers et DenyGroups : 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 no dans sshd_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.

  • ClientAliveInterval et ClientAliveCountMax : 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ès ClientAliveCountMax tentatives, 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 2 dans sshd_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, 600 ou 400) 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 fail2ban ou sudo yum install fail2ban).
  • Configuration : Configurez des "jails" dans /etc/fail2ban/jail.local pour 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.