Recherche de site Web

20 paramètres de sécurité SSH que tout administrateur système Linux doit connaître


SSH (Secure Shell) est l'un des outils les plus importants pour les administrateurs système Linux et les développeurs, car il permet de se connecter en toute sécurité à des machines distantes, d'exécuter des programmes en ligne de commande, de gérer des fichiers, de transférer des données, de rediriger des ports et même d'exécuter des applications GUI à distance.

Mais voici le problème → utiliser SSH avec les paramètres par défaut n’est pas toujours sûr, car les hackers scannent constamment Internet à la recherche de ports SSH ouverts et de connexions faibles. C’est pourquoi apprendre à configurer et sécuriser correctement SSH est indispensable.

Dans ce guide, nous couvrirons les configurations SSH essentielles et les conseils de sécurité que tout débutant Linux devrait connaître pour garder leurs serveurs sécurisés, efficaces et fonctionnant correctement.

1. Comment changer le numéro de port SSH par défaut

Par défaut, SSH écoute sur le port 22, ce qui en fait une cible courante pour les attaques automatisées de bots. Une manière simple de réduire ces attaques est de changer SSH pour un port non standard.

Pour ce faire, ouvrez le fichier de configuration SSH avec un éditeur de texte :

sudo nano /etc/ssh/sshd_config

Cherchez la ligne qui dit :

#Port 22

Décommentez-le (supprimez le #) et changez-le en un numéro de port personnalisé, par exemple :

Port 2200

Après avoir enregistré le fichier, redémarrez le service SSH pour appliquer les modifications :


sudo systemctl restart ssh     # Debian/Ubuntu
sudo systemctl restart sshd    # RHEL/CentOS

Important : Sur Debian/Ubuntu, le service SSH s'appelle ssh, et sur RHEL/CentOS, il s'appelle sshd. Utilisez toujours le nom correct lors du redémarrage ou de la vérification du service.

Ensuite, mettez à jour vos règles de pare-feu pour autoriser le trafic sur le nouveau port.

------------------ On FirewallD ------------------ 
sudo firewall-cmd --permanent --zone=public --add-port=2200/tcp
sudo firewall-cmd --reload

------------------ On UFW ------------------
sudo ufw allow 2200/tcp

Dans les versions plus récentes de OpenSSH, changer le port dans sshd_config peut ne pas fonctionner car SSH est géré via les sockets systemd.

Créez une substitution de socket systemd (remplacez ListenStream par le port souhaité) :


sudo mkdir -p /etc/systemd/system/ssh.socket.d
sudo bash -c 'cat > /etc/systemd/system/ssh.socket.d/listen.conf <<EOF
[Socket]
ListenStream=
ListenStream=2200
EOF'

Rechargez systemd et redémarrez le service SSH :


sudo systemctl daemon-reload
sudo systemctl restart ssh     # Debian/Ubuntu
sudo systemctl restart sshd    # RHEL/CentOS

Mettez à jour vos règles de pare-feu (comme ci-dessus).

2. Comment désactiver la connexion SSH root

Permettre la connexion directe en tant que root via SSH est risqué car cela donne aux attaquants une cible unique pour les attaques par force brute. Une approche plus sûre consiste à se connecter en tant qu'utilisateur normal puis à utiliser sudo pour les tâches administratives.

Pour désactiver la connexion root, trouvez la ligne suivante dans votre fichier de configuration SSH.

PermitRootLogin yes

et changez-le en :

PermitRootLogin no

Enregistrez le fichier et redémarrez le service SSH pour appliquer le changement :

sudo systemctl restart sshd

3. Comment se connecter à un serveur Linux sans mot de passe SSH

Les connexions SSH basées sur un mot de passe peuvent être pratiques mais sont moins sécurisées et peuvent être encombrantes pour un accès répété.

Une approche plus sûre et plus efficace est l'authentification basée sur les clés SSH, qui vous permet de vous connecter sans entrer de mot de passe.

Tout d'abord, générez une paire de clés SSH sur votre machine locale :

ssh-keygen -t rsa -b 4096

Ensuite, copiez votre clé publique sur le serveur distant :

ssh-copy-id user@remote-server

Une fois la clé installée, vous pouvez vous connecter au serveur sans mot de passe :

ssh user@remote-server

4. Comment autoriser uniquement certains utilisateurs à se connecter en SSH sur Linux

Pour améliorer la sécurité SSH, vous pouvez restreindre l'accès afin que seuls certains utilisateurs ou groupes puissent se connecter, ce qui est utile pour empêcher les comptes non autorisés de tenter des connexions SSH.

Pour autoriser des utilisateurs spécifiques, ajoutez la ligne suivante à votre fichier de configuration SSH.

AllowUsers alice bob

Ou, pour permettre à des groupes entiers, utilisez :

AllowGroups admins devops

Après avoir effectué ces modifications, redémarrez le service SSH :

sudo systemctl restart sshd

À partir de maintenant, seuls les utilisateurs spécifiés (alice et bob) ou les groupes (admins et devops) pourront se connecter via SSH, ce qui contribuera à renforcer la sécurité du serveur.

5. Comment afficher un message de bienvenue ou d'avertissement lors de la connexion SSH

Afficher un message lorsque les utilisateurs se connectent via SSH peut être utile pour accueillir les utilisateurs ou afficher des avertissements légaux/de sécurité.

Une option simple consiste à éditer le fichier Message du Jour (MOTD) :

sudo nano /etc/motd

Pour un avertissement plus formel ou légal, vous pouvez créer une bannière dans /etc/issue.net :

sudo nano /etc/issue.net

Ensuite, dites à SSH d'afficher cette bannière en ajoutant ou en modifiant la ligne suivante dans le fichier de configuration SSH :

Banner /etc/issue.net

Enfin, redémarrez le service SSH pour appliquer les modifications :

sudo systemctl restart sshd

Maintenant, chaque fois que quelqu'un se connecte via SSH, il verra votre message de bienvenue ou d'avertissement personnalisé.

6. Comment suivre les tentatives de connexion SSH échouées

Surveiller les tentatives de connexion SSH échouées est essentiel pour détecter les tentatives d'accès non autorisées et améliorer la sécurité du serveur.

Sur les distributions basées sur Debian, vous pouvez vérifier les journaux avec :

sudo grep "Failed password" /var/log/auth.log

Sur les distributions basées sur RHEL, utilisez :

sudo grep "Failed password" /var/log/secure

Pour la surveillance en temps réel de l'activité de connexion SSH, vous pouvez utiliser la commande journalctl :

sudo journalctl -u sshd -f

7. Comment restreindre l'accès SSH par adresse IP sous Linux

Restreindre l'accès SSH à des adresses IP spécifiques ajoute une couche supplémentaire de sécurité en ne permettant qu'aux machines de confiance de se connecter.

Vous pouvez configurer cela directement dans le fichier de configuration SSH en spécifiant un utilisateur et son adresse IP autorisée :

AllowUsers [email 

Alternativement, vous pouvez appliquer des restrictions IP au niveau du pare-feu. Par exemple, avec UFW, autorisez l'accès uniquement depuis une adresse IP spécifique au port 22 :

------------------ On FirewallD ------------------ 
sudo firewall-cmd --permanent --zone=public --add-rich-rule='rule family="ipv4" source address="192.168.1.100" port protocol="tcp" port="22" accept'
sudo firewall-cmd --reload

------------------ On UFW ------------------ 
sudo ufw allow from 192.168.1.100 to any port 22

8. Comment définir le délai d’inactivité pour les sessions SSH

Les sessions SSH inactives peuvent représenter un risque de sécurité si un utilisateur oublie de se déconnecter, laissant la connexion ouverte à un usage potentiel abusif.

Vous pouvez déconnecter automatiquement les sessions inactives en définissant un délai d'inactivité dans le fichier de configuration SSH.

ClientAliveInterval 300
ClientAliveCountMax 0
  • ClientAliveInterval 300 → Envoie un message « keep-alive » toutes les 300 secondes (5 minutes).
  • ClientAliveCountMax 0 → Déconnecte la session si aucune réponse n'est reçue.

Avec ces paramètres, toute session SSH inactive se terminera automatiquement après 5 minutes, réduisant ainsi le risque de sessions ouvertes non surveillées.

9. Comment activer l'authentification à deux facteurs (2FA) pour la connexion SSH

Ajouter l'authentification à deux facteurs (2FA) à SSH augmente considérablement la sécurité en exigeant une deuxième étape de vérification en plus de votre mot de passe.

Sur les systèmes Debian/Ubuntu, vous pouvez utiliser Google Authenticator.

sudo apt install libpam-google-authenticator

Ensuite, configurez l'authentification à deux facteurs pour votre compte utilisateur en exécutant :

google-authenticator

Ensuite, activez le module PAM pour SSH en modifiant :

sudo nano /etc/pam.d/sshd

Ajoutez la ligne suivante :

auth required pam_google_authenticator.so

Enfin, autorisez l'authentification par challenge-réponse dans le fichier de configuration SSH :

ChallengeResponseAuthentication yes

Redémarrez le service SSH pour appliquer les modifications :

sudo systemctl restart sshd

Désormais, chaque connexion SSH nécessitera à la fois votre mot de passe et un code de vérification basé sur le temps, améliorant considérablement la sécurité de votre serveur.

10. Comment limiter les connexions SSH avec Fail2ban

Fail2ban est un outil puissant qui aide à protéger votre serveur contre les attaques par force brute en bannissant temporairement les adresses IP qui échouent plusieurs fois aux tentatives de connexion.

Pour le configurer, installez d'abord Fail2ban sur les systèmes Debian/Ubuntu :

sudo apt install fail2ban

Ensuite, activez la prison SSH en créant ou en modifiant le fichier de configuration local :

sudo nano /etc/fail2ban/jail.local

Ajoutez les lignes suivantes pour configurer la protection pour SSH :

[sshd]
enabled = true
port = ssh
maxretry = 3

Enfin, redémarrez Fail2ban pour appliquer les modifications :

sudo systemctl restart fail2ban

Avec Fail2ban activé, les tentatives de connexion échouées répétées déclencheront automatiquement des interdictions temporaires, réduisant considérablement le risque d'attaques par force brute.

11. Comment configurer l'authentification SSH par clé sous Linux

L'authentification par clé est une méthode sécurisée pour se connecter à SSH sans utiliser de mots de passe. Elle repose sur une paire de clés cryptographiques, rendant les attaques par force brute presque impossibles.

Tout d'abord, générez une paire de clés sur votre machine locale en utilisant l'algorithme moderne et sécurisé Ed25519 recommandé :

ssh-keygen -t ed25519

Ensuite, copiez votre clé publique sur le serveur distant :

ssh-copy-id user@server

Une fois que l'authentification par clé fonctionne, vous pouvez améliorer davantage la sécurité en désactivant les connexions par mot de passe dans le fichier de configuration SSH.

PasswordAuthentication no

Redémarrez le service SSH pour appliquer la modification :

sudo systemctl restart sshd

Après cela, seuls les utilisateurs disposant de la clé privée correcte peuvent se connecter, offrant une couche de protection solide contre les accès non autorisés.

12. Comment autoriser ou refuser l'accès SSH en utilisant hosts.allow et hosts.deny

Linux fournit un moyen simple de contrôler l'accès aux services en utilisant des TCP wrappers, qui reposent sur les fichiers /etc/hosts.allow et /etc/hosts.deny.

Tout d'abord, autorisez les IP de confiance dans /etc/hosts.allow :

sshd: 192.168.1.100

Ensuite, refusez toutes les autres IP en modifiant /etc/hosts.deny :

sshd: ALL

Avec cette configuration, seule l'adresse IP 192.168.1.100 peut se connecter via SSH, tandis que toutes les autres tentatives sont bloquées.

13. Comment vérifier et surveiller les sessions SSH actives sur Linux

Surveiller les sessions SSH actives vous aide à suivre qui est connecté et à détecter tout accès non autorisé. Pour voir une liste des utilisateurs actuellement connectés, vous pouvez utiliser des commandes simples comme :

who
OR
w

Si vous devez terminer la session d’un utilisateur spécifique, vous pouvez utiliser pkill avec son nom d’utilisateur :

sudo pkill -u username

Vérifier régulièrement les sessions actives permet de contrôler qui est connecté à votre serveur et contribue à maintenir la sécurité.

14. Comment configurer un tunnel SSH (transfert de port) sur Linux

Le tunneling SSH, ou le transfert de port, vous permet de router de manière sécurisée le trafic réseau depuis votre machine locale vers un serveur distant, ce qui est utile pour accéder à des services derrière un pare-feu ou pour chiffrer des connexions autrement non sécurisées.

Pour le transfert de port local, vous pouvez transférer un port sur votre machine locale vers un port sur le serveur distant.

ssh -L 8080:localhost:80 user@remote-server
  • 8080 → Le port local sur votre machine.
  • localhost:80 → La destination sur le serveur distant.
  • user@remote-server → Vos identifiants de connexion SSH.

Après avoir exécuté cette commande, tout trafic envoyé à localhost:8080 sur votre machine locale sera transféré en toute sécurité vers le port 80 sur le serveur distant.

15. Comment activer la journalisation détaillée pour le dépannage SSH

Lors de la résolution des problèmes de connexion SSH, des journaux détaillés peuvent aider à identifier la cause principale, comme des problèmes d'authentification ou des retards réseau. SSH propose un mode verbeux intégré qui affiche des informations étape par étape sur le processus de connexion.

Pour activer la journalisation détaillée, exécutez simplement :

ssh -vvv user@server
  • L'option -vvv augmente le niveau de verbosité, fournissant des détails complets sur chaque étape de la connexion SSH.
  • Vous pouvez également utiliser fewer vs (-v ou -vv) pour une sortie moins détaillée.

Le mode verbeux est inestimable pour diagnostiquer les problèmes SSH, vous aidant à identifier rapidement les erreurs de configuration, les problèmes réseau ou les échecs d'authentification.

16. Comment sécuriser SSH avec des chiffres et protocoles forts

Sécuriser les connexions SSH implique de s'assurer que seuls des algorithmes de chiffrement et des protocoles solides sont utilisés. Par défaut, SSH prend en charge plusieurs protocoles et chiffrements, dont certains sont obsolètes et vulnérables.

Vous pouvez renforcer votre serveur SSH en spécifiant explicitement des options sécurisées dans le fichier de configuration :

Protocol 2
Ciphers aes256-ctr,aes192-ctr,aes128-ctr
MACs hmac-sha2-512,hmac-sha2-256
KexAlgorithms [email 
  • Protocole 2 → Garantit que seul le protocole SSHv2 sécurisé est utilisé.
  • Chiffres → Spécifie des algorithmes de chiffrement forts pour le transfert de données.
  • MACs → Configure des codes d'authentification de message sécurisés pour vérifier l'intégrité des données.
  • KexAlgorithms → Choisit des algorithmes d’échange de clés sécurisés.

Après avoir effectué ces modifications, redémarrez SSH pour les appliquer :

sudo systemctl restart sshd

17. Comment limiter l'accès SSH à une plage de ports spécifique

Restreindre l'accès SSH à une plage de ports spécifique ajoute une couche supplémentaire de sécurité en contrôlant quels ports sont autorisés pour les connexions, ce qui peut aider à réduire l'exposition aux attaques automatisées sur les ports inutilisés.

Sur les systèmes utilisant UFW (Uncomplicated Firewall), vous pouvez autoriser une plage de ports avec la commande suivante :

sudo ufw allow 1024:1040/tcp

Pour les utilisateurs de FirewallD, l'équivalent serait :

sudo firewall-cmd --permanent --add-port=1024-1040/tcp
sudo firewall-cmd --reload

Cette configuration permet les connexions SSH uniquement sur les ports 1024 à 1040, bloquant l'accès sur tous les autres ports.

18. Comment changer le délai d'attente de connexion SSH sous Linux

Limiter le temps d'attente de SSH pour qu'un utilisateur se connecte aide à prévenir les attaques par force brute et réduit la fenêtre pour les tentatives d'accès non autorisées, ce qui peut être configuré à l'aide du paramètre LoginGraceTime dans le fichier de configuration du serveur SSH.

Ajoutez ou modifiez la ligne suivante, qui définira le temps maximum (en secondes) qu’SSH attendra pour une connexion réussie avant de se déconnecter.

LoginGraceTime 30

Après avoir enregistré le fichier, redémarrez le service SSH pour appliquer le changement :

sudo systemctl restart sshd

19. Comment activer la compression SSH pour des connexions plus rapides

Activer la compression dans SSH peut améliorer la vitesse de connexion, surtout lors du transfert de grandes quantités de données sur des réseaux plus lents. SSH peut compresser les données avant de les envoyer, réduisant ainsi la quantité de trafic envoyé sur le réseau.

Pour utiliser la compression sur une base par connexion, ajoutez simplement l'option -C lors de la connexion :

ssh -C user@server

Pour une solution permanente, vous pouvez activer la compression dans le fichier de configuration du client SSH.

Compression yes

Une fois activé, SSH compressera automatiquement les données pour toutes les connexions, rendant les transferts plus rapides tout en maintenant le chiffrement et la sécurité.

20. Comment configurer des alias SSH pour un accès plus facile

Gérer plusieurs connexions SSH peut être fastidieux si vous devez vous souvenir des adresses IP, des ports et des noms d'utilisateur pour chaque serveur. L'utilisation des alias SSH simplifie ce processus en vous permettant de créer des raccourcis pour les serveurs auxquels vous accédez fréquemment.

Pour configurer un alias, modifiez votre fichier de configuration client SSH et ajoutez une entrée comme celle-ci :

Host myserver
  HostName 192.168.1.50
  User alice
  Port 2200

Après avoir enregistré le fichier, vous pouvez vous connecter simplement en exécutant :

ssh myserver

21. Comment transférer des applications GUI via SSH (transfert X11)

SSH peut faire plus que simplement accéder à la ligne de commande ; il peut également transférer des applications graphiques d'un serveur distant vers votre machine locale en utilisant le transfert X11, ce qui vous permet d'exécuter des applications GUI sur le serveur comme si elles fonctionnaient localement.

Pour activer le transfert X11, connectez-vous avec l'option -X :

ssh -X user@server

Une fois connecté, vous pouvez lancer des applications GUI, telles que :

gedit

La fenêtre de l'application apparaîtra sur votre machine locale, tandis que tout le traitement se déroule sur le serveur distant.

Astuce : Assurez-vous que le transfert X11 est autorisé dans le fichier de configuration du serveur SSH.

X11Forwarding yes
Pensées finales

SSH est un outil essentiel pour toute personne gérant des serveurs Linux, et l'utiliser correctement peut rendre votre travail à la fois plus facile et plus sûr.

En suivant les conseils de ce guide, vous pouvez protéger vos serveurs contre les accès non autorisés, simplifier vos connexions grâce à l'authentification par clé et aux alias, et surveiller l'activité avec des outils comme fail2ban et les délais d'expiration des sessions.

Commencez par les bases, comme changer le port par défaut, désactiver la connexion root et configurer la connexion par clé, puis explorez progressivement des fonctionnalités avancées comme l'authentification à deux facteurs, le tunneling SSH et le journal détaillé.

Maîtriser ces pratiques vous aidera à gérer les serveurs efficacement, à rester protégé contre les attaques et à travailler comme un administrateur Linux confiant.