Configuration d'un serveur SSH
Mise à jour :
SSH, ou Secure Shell, est un protocole permettant d’établir une communication chiffrée, donc sécurisée qui permet aux administrateurs d’accéder à distance à des serveurs.
SSH (Secure Shell) opère principalement dans la couche application du modèle OSI (Open Systems Interconnection) et utilise le protocole TCP (Transmission Control Protocol) au niveau de la couche transport pour établir une connexion fiable et sécurisée entre le client et le serveur.
Histoire
L’histoire de SSH (Secure Shell) remonte au milieu des années 1990 et est étroitement liée à l’évolution de la sécurité Internet. Voici un aperçu de son développement :
-
Origines (1995) : SSH a été créé par Tatu Ylönen, un chercheur en sécurité informatique de l’Université de Technologie d’Helsinki, en réponse à une attaque par écoute (“sniffing attack”) sur le réseau de son université. Cette attaque a mis en évidence les vulnérabilités des protocoles de connexion à distance existants, comme Telnet et Rlogin, qui ne chiffraient pas leurs communications.
-
SSH-1 (1995) : La première version de SSH (SSH-1) a été développée pour remplacer ces protocoles non sécurisés. Elle offrait un cryptage des communications, empêchant ainsi l’interception des données transmises entre l’hôte et le client. SSH-1 est rapidement devenu populaire dans les communautés universitaires et scientifiques.
-
SSH-2 (1996) : Une nouvelle version, SSH-2, a été introduite pour corriger des vulnérabilités de sécurité dans SSH-1. SSH-2 n’était pas rétrocompatible avec SSH-1, mais apportait des améliorations significatives, notamment une architecture plus modulaire et un cryptage plus robuste.
-
Commercialisation (1996) : Tatu Ylönen a fondé SSH Communications Security pour commercialiser le protocole SSH. La société a développé des versions propriétaires de SSH, mais la version originale est restée open-source.
-
OpenSSH (1999) : Face à la version propriétaire de SSH, la communauté open-source a créé OpenSSH, un fork gratuit et open-source de SSH développé par le projet OpenBSD ↗. OpenSSH est devenu la version la plus utilisée de SSH et est intégré dans de nombreuses distributions Linux et systèmes Unix.
-
Évolution Continue : SSH continue d’évoluer, avec des améliorations constantes en matière de sécurité et de fonctionnalités. De nouvelles méthodes d’authentification, des algorithmes de cryptage plus robustes et des fonctionnalités avancées comme le tunneling et le port forwarding sont régulièrement ajoutés.
Installation de SSH
L’installation de SSH varie légèrement selon la distribution Linux que vous utilisez. Voici les étapes pour les distributions les plus courantes.
Sur Debian et Ubuntu
Ouvrez votre terminal et exécutez la commande suivante pour installer le serveur SSH :
Une fois l’installation terminée, le service SSH devrait démarrer automatiquement.
Sur Fedora et CentOS
Ouvrez votre terminal et exécutez la commande suivante pour installer le serveur SSH :
Sur OpenSuse
Ouvrez votre terminal et exécutez la commande suivante pour installer le serveur SSH :
Gestion du service sshd
-
Démarrer et Activer le Service SSH : Une fois installé, vous devez démarrer le service SSH et l’activer pour qu’il démarre automatiquement lors du démarrage du système. Utilisez les commandes suivantes :
-
Vérifier le Statut du Service : Pour vous assurer que le service SSH fonctionne correctement, vérifiez son statut avec :
Configuration de ssh
Après avoir installé SSH, il est important de le configurer correctement pour assurer une sécurité optimale, c’est ce qu’on appelle le durcissement. Voici les étapes pour configurer SSH sur votre serveur Linux.
Accès au Fichier de Configuration
Le fichier de configuration principal pour SSH est /etc/ssh/sshd_config
.
Par contre, une meilleure pratique est de créer un fichier dans le répertoire
/etc/ssh/sshd_config.d
.
L’utilisation d’une structure de répertoires *.d
pour la configuration de SSHD
offre plusieurs avantages, notamment en termes de modularité, de maintenabilité
et d’évolutivité :
-
Modularité :
- Simplicité de Gestion : Les configurations sont plus faciles à gérer et à comprendre car elles sont réparties en fichiers plus petits et plus ciblés.
- Personnalisation Facile : Permet d’ajouter, de modifier ou de supprimer des paramètres spécifiques sans avoir à parcourir un long fichier de configuration.
-
Maintenabilité :
- Moins de Conflits lors des Mises à Jour : Diminue le risque de
conflits lors des mises à jour du package SSH, car le fichier principal
sshd_config
est moins susceptible d’être modifié directement. - Facilité de Suivi : Les changements individuels sont plus faciles à suivre et à documenter lorsqu’ils sont isolés dans des fichiers séparés.
- Moins de Conflits lors des Mises à Jour : Diminue le risque de
conflits lors des mises à jour du package SSH, car le fichier principal
-
Évolutivité :
- Déploiement Automatisé : Simplifie le processus de réplication des configurations sur plusieurs systèmes, ce qui est particulièrement utile dans les environnements DevOps et pour la gestion centralisée des configurations.
- Adaptabilité : Permet une adaptation rapide aux nouvelles exigences ou changements, en ajoutant ou en modifiant simplement un fichier spécifique sans perturber l’ensemble de la configuration.
Pour le créez, ouvrez le avec un éditeur de texte en tant que root
, par
exemcréer
Si vous n’êtes pas à l’aise avec l’éditeur vi
, remplacez le par nano
.
Paramètres Importants à Configurer
Pour des raisons de sécurité, il est recommandé de désactiver l’accès SSH direct
pour l’utilisateur root
. Ajoutez la ligne PermitRootLogin no
.
L’authentification par clé publique est plus sécurisée que l’authentification
par mot de passe. Ajoutez la ligne PubKeyAuthentication yes
.
Ce qui donne :
Après avoir effectué les modifications, sauvegardez le fichier et quittez l’éditeur de texte. Pour que les changements prennent effet, redémarrez le service SSH :
Vérification de l’application des paramètres
Pour afficher les paramètres actifs, il suffit d’utiliser la commande suivante :
Sécurisation Avancée de SSH
Après avoir configuré le service SSH, il est essentiel d’adopter des mesures de sécurité avancées pour renforcer la protection de votre serveur. Voici comment utiliser les pare-feu firewalld ou ufw pour sécuriser votre serveur SSH.
Configuration du Pare-feu avec UFW (Uncomplicated Firewall)
UFW est un outil de gestion de pare-feu convivial pour les systèmes basés sur Debian et Ubuntu.
Activation de UFW
Activez UFW avec la commande suivante :
Configuration des Règles pour SSH
Autorisez les connexions SSH (sur le port 22 par défaut ou un autre si vous avez modifié le port SSH) :
Ou, si vous avez changé le port SSH :
Ou si vous voulez restreindre l’accès à des adresses IP spécifiques :
Remplacez [adresse_ip]
par l’adresse IP spécifique. Répétez cette commande
pour chaque adresse IP autorisée.
Application des Règles
Pour appliquer les modifications, redémarrez UFW :
Configuration du Pare-feu avec firewalld
firewalld est un outil de gestion de pare-feu flexible utilisé sur les distributions Linux à base de Red Hat.
Règles de Base pour SSH
Pour autoriser les connexions SSH (sur le port 22 par défaut), utilisez :
Ou si vous avez changé le port SSH :
Pour appliquer cette régle :
Configuration de fail2ban
Le service SSH (Secure Shell) est souvent la cible principale des attaques par force brute, où des assaillants tentent de deviner les identifiants de connexion par des essais répétés. Pour contrer ces menaces, une solution de sécurité robuste et proactive est indispensable. C’est ici que Fail2Ban, un outil de prévention des intrusions, entre en jeu.
Fail2Ban est un logiciel de sécurité qui surveille les journaux de votre système à la recherche de signes d’activités suspectes, en particulier des tentatives de connexion SSH répétées et infructueuses. Lorsqu’un schéma d’attaque est détecté, Fail2Ban intervient automatiquement pour “bannir” l’adresse IP de l’attaquant, en la bloquant temporairement de l’accès au service SSH. Cette action réduit considérablement le risque d’une intrusion réussie, décourageant l’attaquant et protégeant le système contre les accès non autorisés.
Configuration de Base de Fail2Ban
Il est recommandé de ne pas modifier directement le fichier de configuration par
défaut jail.conf
de Fail2Ban, car il peut être écrasé lors des mises à jour.
Créez plutôt un fichier jail.local
pour vos configurations personnalisées :
Ajoutez les lignes suivantes en adaptant à vos besoins dans la section [sshd]
:
Où :
ignoreip
: Adresses IP à ignorer.bantime
: Durée du bannissement.findtime
: Intervalle de temps pendant lequel les échecs sont comptés.maxretry
: Nombre de tentatives de connexion échouées avant bannissement.
Démarrage et Test de Fail2Ban
Après avoir configuré Fail2Ban, redémarrez le service pour appliquer les changements :
Vérifier le Statut de Fail2Ban :
Utilisez la commande suivante pour vérifier que Fail2Ban fonctionne correctement :
Pour voir les détails de la prison SSH, utilisez :
Conclusion
Maîtriser SSH est une compétence précieuse pour tout professionnel de l’informatique ou utilisateur de Linux. Nous espérons que ce guide vous a aidé à comprendre et à appliquer les principes fondamentaux de SSH pour une utilisation sécurisée et efficace.
L’installation et la configuration correctes de SSH sont des étapes importantes pour assurer une gestion sûre et efficace de vos serveurs Linux. En suivant les instructions fournies dans cette documentation, vous avez appris comment installer SSH sur différentes distributions Linux, comment le configurer pour une sécurité minimale et comment établir une connexion sécurisée avec votre serveur.
Dans le prochain guide, je vous propose de voir comment durcir encore plus sa configuration.
Plus loin
-
Les autres documentations sur SSH :
-
Automaisation de la configuration SSH :
Pour ceux qui utilisent Ansible et qui cherche à améliorer les temps d’exécution des playbooks à destination de nombreuses cibles, je vous propose de lire cette documentation.