Meilleures pratiques pour le durcissement de la sécurité SSH sur les serveurs Linux

Sécurisez immédiatement votre serveur Linux en maîtrisant ces techniques essentielles de durcissement SSH. Ce guide expert fournit des étapes concrètes, se concentrant sur les modifications de configuration dans `sshd_config`. Apprenez à désactiver la connexion root à haut risque, à mettre en œuvre l'authentification obligatoire par clé pour éliminer les mots de passe faibles, à changer le port par défaut et à installer Fail2Ban pour une limitation de débit efficace contre les attaques par force brute. Protégez votre système en transformant SSH en un canal robuste et sécurisé.

35 vues

Meilleures pratiques pour le renforcement de la sécurité SSH sur les serveurs Linux

Secure Shell (SSH) est la colonne vertébrale de la gestion à distance pour pratiquement tous les serveurs Linux. Bien qu'incroyablement puissant et généralement sécurisé par défaut, SSH est également la cible principale des acteurs malveillants qui tentent d'obtenir un accès non autorisé via des attaques par force brute, des attaques par dictionnaire et le bourrage d'identifiants (credential stuffing).

Le renforcement de votre configuration SSH est sans doute l'étape la plus critique pour sécuriser un nouveau déploiement Linux. En mettant en œuvre quelques bonnes pratiques fondamentales – en allant au-delà de la simple authentification par nom d'utilisateur et mot de passe – vous pouvez réduire drastiquement votre surface d'attaque, minimiser le bruit dans vos journaux et garantir que seuls les utilisateurs autorisés utilisant des méthodes sécurisées peuvent accéder à votre système.

Ce guide décrit les étapes essentielles et actionnables pour sécuriser le service SSH sur toute distribution Linux, en se concentrant sur le fichier de configuration principal : /etc/ssh/sshd_config.


Prérequis : Sauvegarde de la configuration

Avant d'apporter des modifications à la configuration du démon SSH (sshd_config), il est crucial de créer une sauvegarde. Une configuration incorrecte peut vous empêcher d'accéder à votre serveur. Testez toujours les modifications minutieusement.

sudo cp /etc/ssh/sshd_config /etc/ssh/sshd_config.bak_$(date +%F)

Après avoir modifié le fichier, vérifiez la syntaxe avant de redémarrer le service :

sudo sshd -t

Si le test réussit, vous pouvez redémarrer le service SSH en toute sécurité (la commande varie selon la distribution) :

# Pour les systèmes utilisant systemd (la plupart des distributions modernes)
sudo systemctl restart sshd

1. Désactiver la connexion root

Autoriser la connexion directe en tant qu'utilisateur root est l'un des plus grands risques de sécurité. Si un attaquant réussit une attaque par force brute de mot de passe, il obtient instantanément le contrôle complet du système. Au lieu de cela, les utilisateurs non-root devraient se connecter en premier et élever leurs privilèges en utilisant sudo.

Étape de configuration

Ouvrez /etc/ssh/sshd_config et localisez la directive PermitRootLogin. Changez sa valeur en no.

# Avant :
# PermitRootLogin yes

# Après (Meilleure pratique) :
PermitRootLogin no

Note importante

Assurez-vous d'avoir créé et configuré au moins un utilisateur standard avec les privilèges sudo avant de désactiver la connexion root. Sinon, vous serez bloqué de l'accès administratif.

2. Mettre en œuvre l'authentification obligatoire par clé

L'authentification par mot de passe est sensible aux attaques par force brute et par dictionnaire. Les clés SSH, composées d'une clé publique (sur le serveur) et d'une clé privée (sur le client), offrent une sécurité considérablement plus forte grâce à leur complexité et leur longueur extrêmes.

A. Générer et installer les clés

  1. Générez la paire de clés (sur votre machine cliente locale) :
    bash ssh-keygen -t ed25519 -C "[email protected]"
  2. Copiez la clé publique (vers le serveur) :
    bash ssh-copy-id -i ~/.ssh/id_ed25519 user@your_server_ip

B. Désactiver l'authentification par mot de passe

Une fois que vous avez confirmé que vous pouvez vous connecter avec succès en utilisant votre clé SSH, désactivez entièrement l'authentification par mot de passe.

# Désactiver les mots de passe
PasswordAuthentication no

# S'assurer que les clés sont activées
PubkeyAuthentication yes

Meilleure pratique : Utilisez des types de clés robustes comme Ed25519 ou RSA 4096 bits. Protégez toujours la clé privée avec une phrase secrète forte.

3. Changer le port SSH par défaut (Défense en profondeur)

Le port SSH par défaut (port TCP 22) est constamment scanné par des bots automatisés. Changer le port pour un numéro élevé et non standard (par exemple, 2222, 22222 ou 30000+) réduit considérablement la quantité de bruit dans les journaux de votre serveur et vous rend invisible aux scanners occasionnels.

Étape de configuration

Dans /etc/ssh/sshd_config, modifiez la directive Port :

# Avant :
# Port 22

# Après (Exemple de port non standard) :
Port 22222

Avertissement : Ajustement du pare-feu requis

Si vous changez le port, vous devez mettre à jour votre pare-feu (par exemple, iptables, firewalld ou les groupes de sécurité AWS) pour autoriser le trafic sur le nouveau port. Ne pas le faire entraînera une perte immédiate de connexion.

Exemple avec firewalld (CentOS/RHEL) :

sudo firewall-cmd --permanent --add-port=22222/tcp
sudo firewall-cmd --reload

4. Limiter l'accès à des utilisateurs et groupes spécifiques

Pour appliquer un contrôle d'accès strict, vous devez définir explicitement quels utilisateurs ou groupes sont autorisés à se connecter via SSH. Cela limite les points d'entrée potentiels même si un compte est compromis ou inutilisé.

Directives de configuration

Utilisez une ou les deux directives suivantes dans sshd_config :

  1. Autoriser des utilisateurs spécifiques :
    config AllowUsers alice bob
  2. Autoriser des groupes spécifiques :
    config AllowGroups sshaccess admins

Si ces directives sont présentes, tout utilisateur ou groupe non explicitement listé se verra refuser l'accès.

5. Imposer un protocole et des chiffrements plus robustes

Assurez-vous d'utiliser le protocole SSH 2 moderne et sécurisé et d'imposer l'utilisation de chiffrements cryptographiques et de codes d'authentification de message (MAC) robustes.

Étapes de configuration

Vérifiez que les protocoles plus anciens et vulnérables sont désactivés :

Protocol 2

# Refuser les méthodes d'authentification héritées non sécurisées
HostbasedAuthentication no
IgnoreRhosts yes

Bien que les implémentations SSH modernes soient souvent bien configurées par défaut, la définition explicite de chiffrements et de MAC robustes peut prévenir les attaques de rétrogradation. Un ensemble minimum recommandé inclut :

Ciphers [email protected],[email protected]
MACs hmac-sha2-512,hmac-sha2-256

6. Mettre en œuvre la limitation de débit et la détection d'intrusion (Fail2Ban)

Même avec l'authentification par clé, le sondage continu par les bots consomme des ressources et encombre les journaux. Fail2Ban est un outil critique qui surveille les journaux pour les tentatives de connexion échouées (ou d'autres activités suspectes) et ajuste dynamiquement le pare-feu pour bannir temporairement ou définitivement l'adresse IP d'origine.

Installation et configuration (Étapes générales)

  1. Installer Fail2Ban :
    ```bash
    # Debian/Ubuntu
    sudo apt update && sudo apt install fail2ban

    RHEL/CentOS/Fedora

    sudo dnf install fail2ban
    `` 2. **Configurer la « jail » SSH :** Fail2Ban utilise des configurations appelées « jails ». La jailsshdpar défaut est très efficace pour surveiller/var/log/auth.log` (ou équivalent) pour les échecs répétés sur le service SSH et appliquer automatiquement des bannissements temporaires.

  2. Assurer le bon fonctionnement du service :
    bash sudo systemctl enable fail2ban sudo systemctl start fail2ban

Fail2Ban atténue considérablement les tentatives de force brute automatisées et est considéré comme obligatoire pour les serveurs exposés à Internet.

7. Autres directives essentielles de renforcement SSH

Ces ajustements mineurs aident à gérer les sessions et à réduire la fenêtre d'attaque potentielle :

Directive Valeur recommandée But
ClientAliveInterval 300 Envoie un paquet nul toutes les 300 secondes (5 minutes) pour maintenir la session active.
ClientAliveCountMax 3 Nombre maximal de vérifications d'activité échouées avant la déconnexion (15 minutes de temps d'inactivité total).
UsePAM yes Active les modules d'authentification enfichables (PAM) pour des politiques de sécurité système locales supplémentaires.
PermitEmptyPasswords no Interdit aux utilisateurs ayant des mots de passe vides de se connecter (devrait être no par défaut).

Résumé de la liste de vérification du renforcement

Utilisez cette liste de vérification pour vous assurer que votre serveur respecte les normes de base de renforcement SSH :

  1. [ ] Sauvegardez sshd_config avant d'apporter des modifications.
  2. [ ] Définissez PermitRootLogin no.
  3. [ ] Définissez PasswordAuthentication no (après la configuration des clés).
  4. [ ] Changez le Port pour une valeur non standard.
  5. [ ] Mettez à jour le pare-feu pour autoriser le nouveau port.
  6. [ ] Utilisez AllowUsers ou AllowGroups pour restreindre l'accès.
  7. [ ] Définissez Protocol 2.
  8. [ ] Installez et configurez Fail2Ban.
  9. [ ] Vérifiez la configuration avec sshd -t avant de redémarrer.

En mettant en œuvre ces meilleures pratiques, vous transformez SSH d'une vulnérabilité potentielle en un canal d'administration à distance hautement sécurisé.