Aller au contenu
medium

Configuration d'un serveur SSH

16 min de lecture

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.

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 :

  1. 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.

  2. 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.

  3. 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.

  4. 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.

  5. 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.

  6. É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.

L’installation de SSH varie légèrement selon la distribution Linux que vous utilisez. Voici les étapes pour les distributions les plus courantes.

Ouvrez votre terminal et exécutez la commande suivante pour installer le serveur SSH :

Fenêtre de terminal
sudo apt update
sudo apt install openssh-server fail2ban

Une fois l’installation terminée, le service SSH devrait démarrer automatiquement.

Ouvrez votre terminal et exécutez la commande suivante pour installer le serveur SSH :

Fenêtre de terminal
sudo dnf install openssh-server fail2ban

Ouvrez votre terminal et exécutez la commande suivante pour installer le serveur SSH :

Fenêtre de terminal
sudo zypper update
sudo zypper install openssh-server fail2ban
  1. 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 :

    Fenêtre de terminal
    sudo systemctl start sshd
    sudo systemctl enable sshd
  2. Vérifier le Statut du Service : Pour vous assurer que le service SSH fonctionne correctement, vérifiez son statut avec :

    Fenêtre de terminal
    sudo systemctl status sshd
    ssh.service - OpenBSD Secure Shell server
    Loaded: loaded (/lib/systemd/system/ssh.service; enabled; vendor preset: enabled)
    Active: active (running) since Sat 2023-12-02 13:52:08 CET; 2 days ago
    Docs: man:sshd(8)
    man:sshd_config(5)
    Process: 656 ExecStartPre=/usr/sbin/sshd -t (code=exited, status=0/SUCCESS)
    Main PID: 678 (sshd)
    Tasks: 1 (limit: 21485)
    Memory: 15.7M
    CPU: 12.151s
    CGroup: /system.slice/ssh.service
    └─678 "sshd: /usr/sbin/sshd -D [listener] 0 of 10-100 startups"
    déc. 04 14:25:31 internal sshd[53852]: pam_unix(sshd:session): session opened for user bob(uid=1000) by (uid=0)
    déc. 04 14:25:31 internal sshd[53852]: pam_unix(sshd:session): session closed for user bob
    déc. 04 16:20:17 internal sshd[78083]: Accepted publickey for bob from 172.31.208.1 port 55470 ssh2: RSA SHA256:i/cP6dWYgNI419VoENjOZr0yRuPwXVsDN3/9UEV6yt4
    déc. 04 16:20:17 internal sshd[78083]: pam_unix(sshd:session): session opened for user bob(uid=1000) by (uid=0)
    déc. 04 16:20:22 internal sshd[78157]: Accepted publickey for bob from 172.31.208.1 port 55511 ssh2: RSA SHA256:i/cP6dWYgNI419VoENjOZr0yRuPwXVsDN3/9UEV6yt4
    déc. 04 16:20:22 internal sshd[78157]: pam_unix(sshd:session): session opened for user bob(uid=1000) by (uid=0)
    déc. 05 08:00:02 internal sshd[78345]: Accepted publickey for bob from 172.31.208.1 port 55553 ssh2: RSA SHA256:i/cP6dWYgNI419VoENjOZr0yRuPwXVsDN3/9UEV6yt4
    déc. 05 08:00:02 internal sshd[78345]: pam_unix(sshd:session): session opened for user bob(uid=1000) by (uid=0)
    déc. 05 08:19:24 internal sshd[82354]: Accepted publickey for bob from 172.31.208.1 port 56798 ssh2: RSA SHA256:i/cP6dWYgNI419VoENjOZr0yRuPwXVsDN3/9UEV6yt4
    déc. 05 08:19:24 internal sshd[82354]: pam_unix(sshd:session): session opened for user bob(uid=1000) by (uid=0)
    bob@internal ~/Projects/perso/my-blog dev* 08:31:19

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.

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é :

  1. 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.
  2. 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.
  3. É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

Fenêtre de terminal
sudo vi /etc/ssh/sshd_config.d/hardening.conf

Si vous ne maitrisez l’éditeur vi, je vous recommande de lire mon guide sur vi.

Si vous n’êtes pas à l’aise avec l’éditeur vi, remplacez le par nano.

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 :

Fenêtre de terminal
PermitRootLogin no
PubkeyAuthentication yes

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 :

Fenêtre de terminal
sudo systemctl reload sshd

Pour afficher les paramètres actifs, il suffit d’utiliser la commande suivante :

Fenêtre de terminal
sudo sshd- T
port 22
addressfamily any
listenaddress [::]:22
listenaddress 0.0.0.0:22
usepam yes
logingracetime 120
x11displayoffset 10
maxauthtries 5
maxsessions 10
clientaliveinterval 0
clientalivecountmax 2
...
permitopen any
permitlisten any
permituserenvironment no
pubkeyauthoptions none

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)

Section intitulée « 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.

Activez UFW avec la commande suivante :

Fenêtre de terminal
sudo ufw enable

Autorisez les connexions SSH (sur le port 22 par défaut ou un autre si vous avez modifié le port SSH) :

Fenêtre de terminal
sudo ufw allow 22/tcp

Ou, si vous avez changé le port SSH :

Fenêtre de terminal
sudo ufw allow [port]/tcp

Ou si vous voulez restreindre l’accès à des adresses IP spécifiques :

Fenêtre de terminal
sudo ufw allow from [adresse_ip] to any port [port]

Remplacez [adresse_ip] par l’adresse IP spécifique. Répétez cette commande pour chaque adresse IP autorisée.

Pour appliquer les modifications, redémarrez UFW :

Fenêtre de terminal
sudo ufw reload

firewalld est un outil de gestion de pare-feu flexible utilisé sur les distributions Linux à base de Red Hat.

Pour autoriser les connexions SSH (sur le port 22 par défaut), utilisez :

Fenêtre de terminal
sudo firewall-cmd --zone=public --add-service=ssh --permanent

Ou si vous avez changé le port SSH :

Fenêtre de terminal
sudo firewall-cmd --zone=public --add-port=[port]/tcp --permanent

Pour appliquer cette régle :

Fenêtre de terminal
sudo firewall-cmd --reload

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.

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 :

Fenêtre de terminal
sudo cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local
sudo nano /etc/fail2ban/jail.local

Ajoutez les lignes suivantes en adaptant à vos besoins dans la section [sshd]:

[sshd]
enabled = true
ignoreip = 127.0.0.1 192.168.1.0/24
bantime = 180
maxretry = 3

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.

Après avoir configuré Fail2Ban, redémarrez le service pour appliquer les changements :

Fenêtre de terminal
sudo systemctl enable fail2ban
sudo systemctl start fail2ban

Vérifier le Statut de Fail2Ban :

Utilisez la commande suivante pour vérifier que Fail2Ban fonctionne correctement :

Fenêtre de terminal
sudo fail2ban-client status
Status
|- Number of jail: 1
`- Jail list: sshd

Pour voir les détails de la prison SSH, utilisez :

Fenêtre de terminal
sudo fail2ban-client status sshd
Status for the jail: sshd
|- Filter
| |- Currently failed: 0
| |- Total failed: 3
| `- File list: /var/log/auth.log
`- Actions
|- Currently banned: 0
|- Total banned: 1
`- Banned IP list:

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.

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.

Ce site vous est utile ?

Sachez que moins de 1% des lecteurs soutiennent ce site.

Je maintiens +700 guides gratuits, sans pub ni tracing. Aujourd'hui, ce site ne couvre même pas mes frais d'hébergement, d'électricité, de matériel, de logiciels, mais surtout de cafés.

Un soutien régulier, même symbolique, m'aide à garder ces ressources gratuites et à continuer de produire des guides de qualité. Merci pour votre appui.