SSH est un protocole de communication et un programme service et Daemon Linux qui permet un accès en ligne de commande à une machine Unix dont Linux.
C’est un programme client/serveur dont la communication est chiffrée.
L’authentification se fait soit à partir d’un mot de passe, soit par un échange de clés asymétriques.
Enfin, la connexion SSH peut se faire à partir d’un client Unix ou Windows.
Voici un tutoriel qui explique comment sécuriser son accès SSH.

Table des matières
- 1 Désactiver l’accès root
- 2 Utiliser l’authentification par clés SSH
- 3 Bloquer les attaques par bruteforce
- 4 Comment protéger SSH avec Fail2ban
- 5 Restreindre l’accès par adresse IP
- 6 Limiter les connexions sur le port SSH (port 22)
- 7 Changer le port d’écoute par défaut (port 22)
- 8 Désactiver SSH pour certains utilisateurs
- 9 Mettre en place du Port knocking
- 10 Liens
Désactiver l’accès root
L’accès root via SSH est un risque de sécurité important. Il est préférable de se connecter avec un utilisateur normal et d’utiliser sudo
pour les commandes administratives.
Dans le fichier /etc/ssh/sshd_config
, modifiez :
PermitRootLogin no
Utiliser l’authentification par clés SSH
Comme indiqué dans l’introduction, l’authentification SSH peut s’effectuer de deux façons différentes.
- par des mots de passe
- par clés asymétriques. Les clés publiques sont générées par le serveur à partir d’une clé privée (fonctionnement des clés privée/publique)
Avantages | Désavantages | |
Mot de passe | – Simplicité : Facile à configurer et à comprendre. Aucun besoin de générer ou de gérer des clés. – Accès depuis n’importe quel appareil : Vous pouvez vous connecter à un serveur SSH depuis n’importe quel appareil tant que vous connaissez le mot de passe. – Pas de gestion de fichiers : Il n’y a pas de clé privée à sauvegarder ou à transporter entre différents appareils, ce qui peut être pratique dans certains cas. – Plus flexibles pour l’administrateur : Les mots de passe sont gérés par l’administrateur contrairement aux clefs : Ils peuvent forcer le changement et sur une période. | – Moins sécurisé : Les mots de passe peuvent être devinés, volés ou forcés via des attaques par force brute, surtout s’ils sont faibles ou réutilisés sur plusieurs comptes. – Vulnérabilité à l’hameçonnage (phishing) : Les mots de passe peuvent être volés par des attaques de phishing. – Sujet aux attaques : Les mots de passe sont envoyés vers le serveur, et peuvent éventuellement être récupérés (attaque MiT ) ou par /etc/shadow (attaque par bruteforce / base de données) – Gestion compliquée des mots de passe : Le besoin de gérer et de mémoriser des mots de passe forts et uniques peut être complexe, surtout si vous avez plusieurs serveurs. – Exposition des mots de passe : Lorsqu’un mot de passe est compromis, il est facile pour un attaquant de se connecter, surtout si des mesures comme la limitation des tentatives de connexion ne sont pas en place. |
Échange de clés | – Sécurité renforcée : Les clés SSH sont beaucoup plus difficiles à compromettre que les mots de passe. La clé privée reste sur l’appareil de l’utilisateur, et même si la clé publique est interceptée, elle ne peut pas être utilisée seule pour accéder au serveur. – Protection contre les attaques par force brute : Puisqu’il n’y a pas de mot de passe à deviner, les attaques par force brute sont pratiquement inefficaces. – Facilité d’utilisation : Une fois configurée, l’authentification par clé permet une connexion rapide et automatique, sans avoir besoin de saisir un mot de passe. – Gestion centralisée des accès : L’ajout ou la révocation d’accès se fait en modifiant les clés autorisées sur le serveur, ce qui est plus sécurisé et plus facile à gérer dans un environnement multi-utilisateurs. | – Complexité initiale : La configuration des clés SSH est plus complexe que l’utilisation de mots de passe, surtout pour les utilisateurs non techniques. Gestion des clés : Il est nécessaire de sauvegarder et de protéger la clé privée. Si elle est perdue, l’accès au serveur est perdu, et si elle est compromise, un attaquant pourrait potentiellement l’utiliser pour se connecter. – Accès limité aux appareils : L’authentification par clé nécessite que la clé privée soit présente sur l’appareil que vous utilisez pour vous connecter. Cela peut être contraignant si vous changez souvent d’appareil ou si vous devez vous connecter depuis un appareil non sécurisé. –Révocation difficile : Si une clé est compromise, elle doit être manuellement révoquée sur tous les serveurs où elle a été autorisée, ce qui peut être fastidieux dans un environnement avec de nombreux serveurs. |
L’authentification par clé est beaucoup plus sécurisée que l’utilisation de mots de passe.
- Générer une paire de clés SSH sur votre machine locale et ajouter la clé publique sur le serveur.
ssh-keygen -t rsa -b 4096
- Copier la clé publique sur le serveur :
ssh-copy-id <utilisateur>@<serveur>
Vous pouvez aussi interdire l’authentification par mot de passe, si vous ne souhaitez qu’utiliser l’authentification par échange de clés.
Les deux options suivantes du fichier /etc/ssh/sshd_config permettent d’activer/désactiver l’authentification par mot de passe ou clés.
Il suffit de positionner celles-ci à Yes ou No.
PasswordAuthentication PubkeyAuthentication
Bloquer les attaques par bruteforce
Les attaques par bruteforce consiste à tenter une authentification en testant plusieurs couples d’utilisateur / mot de passe.
Le but étant de trouver un couple d’utilisateur ayant un mot de passe faible, exemple l’utilisateur john avec le mot de passe admin.
Les serveurs SSH sont très ciblées par ces attaques par bruteforce.
Plus d’informations sur les attaques brute-force, lire :
Mais plutôt dans une bonne gestion des mots de passe par les utilisateurs.
Pour limiter les attaques par bruteforce, configurez SSH pour limiter le nombre de tentatives de connexion :
MaxAuthTries 3
Comment protéger SSH avec Fail2ban
SSH est un service très visé par les scans et attaques bruteforce et parfois les attaques DoS (déni de service).
Dans ce tutoriel, je vous montre comment configurer Fail2ban pour protéger SSH :
Restreindre l’accès par adresse IP
Si vous connaissez les adresses IP à partir desquelles vous vous connectez, vous pouvez restreindre l’accès SSH à ces adresses.
- Dans le fichier
/etc/hosts.allow
, autorisez une IP ou une classe d’IP comme ceci :
sshd: 192.168.1.0/24
- Puis dans
/etc/hosts.deny
, ajouez la ligne suivante :
sshd: ALL
A lire :
- /etc/hosts.allow et /etc/hosts.deny : Comprendre les fichiers de configuration sur Linux
- SSH : bloquer une adresse IP
Limiter les connexions sur le port SSH (port 22)
Iptables permet de limiter les requêtes sur le port 22 pour limiter les attaques par bruteforce.
Voici quelques syntaxes qui peuvent être utilisées :
#!/bin/bash
inet_if=eth1
ssh_port=22
$IPT -I INPUT -p tcp --dport ${ssh_port} -i ${inet_if} -m state --state NEW -m recent --set
$IPT -I INPUT -p tcp --dport ${ssh_port} -i ${inet_if} -m state --state NEW -m recent --update --seconds 60 --hitcount 5 -j DROP
ou encore cet exemple :
$IPT -A INPUT -i ${inet_if} -p tcp --dport ${ssh_port} -m state --state NEW -m limit --limit 3/min --limit-burst 3 -j ACCEPT
$IPT -A INPUT -i ${inet_if} -p tcp --dport ${ssh_port} -m state --state ESTABLISHED -j ACCEPT
$IPT -A OUTPUT -o ${inet_if} -p tcp --sport ${ssh_port} -m state --state ESTABLISHED -j ACCEPT
# another one line example
# $IPT -A INPUT -i ${inet_if} -m state --state NEW,ESTABLISHED,RELATED -p tcp --dport 22 -m limit --limit 5/minute --limit-burst 5-j ACCEPT
Plus d’informations sur iptables :
Changer le port d’écoute par défaut (port 22)
Utile contre les attaques automatisées qui visent principalement le port SSH par défaut.
Toutefois, inutile contre les attaques ciblées puisqu’un scan de port permet de trouver le port SSH.
Pour changer le port d’écoute par défaut :
- Éditez le fichier /etc/ssh/sshd_config :
- Changez le contenu du paramètre Port qui doit être sur 22.
- Par exemple pour mettre sur le port 3333
Port 3333
- Relancez le service SSHD avec la commande suivante :
/etc/init.d/sshd restart
Désactiver SSH pour certains utilisateurs
Vous pouvez limiter les utilisateurs autorisés à se connecter via SSH en utilisant les directives AllowUsers
ou AllowGroups
dans le fichier de configuration SSH.
AllowUsers <utilisateur1> <utilisateur2>
Pour interdire, certains utilisateurs, ajoutez :
DenyUsers <utilisateur1> <utilisateur2>
Mettre en place du Port knocking
Le port Knocking est la dissimulation d’un service à travers une séquence de ports prédéfinies.
Le service est inaccessible via des règles Iptables.
En utilisant, une séquence de port, une règle iptables va être créées qui va rendre le service accessible sur l’IP qui émet cette séquence.
Liens
- Générer et se connecter en SSH avec des clés SSH
- SSH : comment ça marche
- Comment générer des clés SSH et se connecter avec OpenSSH de Windows 10, 11
- Comment se connecter en SSH à un serveur distant depuis Windows
- Comment se connecter en SSH à un serveur distant depuis Linux
- SSH agent : authentification par clés SSH avec ou sans keychain
- Activer et installer le serveur OpenSSH sur Windows 10
- Comment activer et utiliser le client OpenSSH de Windows 10
- Exécuter une ou plusieurs commandes à distance en SSH
- Comment configurer le tunnel SSH (redirection de port)
- Sécuriser un serveur SSH
- SSH : bloquer une adresse IP
- Comment protéger SSH avec Fail2ban des attaques DoS / Bruteforce
- Remmina : logiciel de bureau à distance RDP, VNC, SSH pour Linux
- MobaXterm client SSH, RDP pour Windows
- Configurer un port knocking pour protéger SSH