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
sudoavant 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
- Générez la paire de clés (sur votre machine cliente locale) :
bash ssh-keygen -t ed25519 -C "[email protected]" - 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,firewalldou 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 :
- Autoriser des utilisateurs spécifiques :
config AllowUsers alice bob - 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)
-
Installer Fail2Ban :
```bash
# Debian/Ubuntu
sudo apt update && sudo apt install fail2banRHEL/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. -
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 :
- [ ] Sauvegardez
sshd_configavant d'apporter des modifications. - [ ] Définissez
PermitRootLogin no. - [ ] Définissez
PasswordAuthentication no(après la configuration des clés). - [ ] Changez le
Portpour une valeur non standard. - [ ] Mettez à jour le pare-feu pour autoriser le nouveau port.
- [ ] Utilisez
AllowUsersouAllowGroupspour restreindre l'accès. - [ ] Définissez
Protocol 2. - [ ] Installez et configurez Fail2Ban.
- [ ] Vérifiez la configuration avec
sshd -tavant 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é.