SSH
Introduction au SSH (Secure Shell)
Le SSH (Secure Shell) est un protocole de communication sécurisé permettant de se connecter à un serveur distant de manière cryptée. Il est principalement utilisé pour l'administration à distance des systèmes Unix/Linux et pour transférer des fichiers en toute sécurité sur un réseau non sécurisé, comme Internet.
Le fonctionnement du SSH repose sur un modèle client-serveur. Le client SSH établit une connexion avec un serveur SSH et authentifie l'utilisateur avant de lui permettre d'exécuter des commandes à distance ou de transférer des fichiers.
Installation de SSH sur Linux (Debian 11)
Sur une distribution Debian 11, vous pouvez installer SSH en suivant ces étapes :
Vérifiez que le service SSH est bien actif avec la commande suivante :
Pour démarrer le service SSH si ce n’est pas déjà fait, utilisez :
Pour activer SSH au démarrage, exécutez :
Se connecter à un serveur via SSH
Pour établir une connexion SSH, utilisez la commande suivante :
Exemple :
Lors de la première connexion, vous devrez accepter l'empreinte de la clé du serveur. Tapez "yes" pour accepter et continuer.
Authentification avec SSH
L'authentification par défaut utilise un mot de passe. Lors de la connexion SSH, vous serez invité à entrer le mot de passe associé à l'utilisateur du serveur distant.
Il est recommandé d'utiliser des clés SSH pour renforcer la sécurité. Voici comment procéder :
Générer une paire de clés SSH
Sur votre machine locale, générez une paire de clés SSH avec la commande suivante :
Copiez ensuite votre clé publique sur le serveur avec la commande :
Maintenant, vous pouvez vous connecter sans mot de passe avec :
Sécuriser SSH
Changer le port par défaut (22) est une bonne pratique pour sécuriser l'accès SSH. Modifiez le fichier de configuration SSH (/etc/ssh/sshd_config) :
Changez la ligne Port 22
par un autre numéro de port, par exemple 2222.
Après modification, redémarrez SSH pour que le changement prenne effet :
Désactiver l'authentification par mot de passe
Pour forcer l'utilisation des clés SSH et désactiver l'authentification par mot de passe, modifiez à nouveau le fichier de configuration SSH (/etc/ssh/sshd_config)
:
N'oubliez pas de redémarrer SSH pour appliquer les changements :
Limiter l'accès aux utilisateurs
Dans le fichier de configuration SSH, vous pouvez limiter l'accès à certains utilisateurs uniquement :
Redémarrez le service SSH après cette modification :
Tunnels SSH
Un tunnel local permet de rediriger un port de votre machine locale vers un port du serveur distant. Exemple :
Un tunnel inversé permet de rediriger un port du serveur distant vers un port de votre machine locale :
Transfert de fichiers avec SSH
Le protocole SCP permet de transférer des fichiers de manière sécurisée entre votre machine locale et le serveur distant. Exemple pour copier un fichier vers le serveur :
Le protocole SFTP permet de gérer les fichiers de manière interactive. Pour démarrer une session SFTP :
Dépannage SSH
Si vous obtenez l'erreur "Connection refused", assurez-vous que le service SSH est en cours d'exécution avec la commande :
Si l'erreur est "Permission denied", vérifiez que votre clé publique est correctement installée dans le fichier ~/.ssh/authorized_keys
sur le serveur et que les permissions sont correctes.
Comprendre et Configurer Fail2ban
Dans cette section, nous allons explorer Fail2ban, un outil de sécurité essentiel pour protéger votre serveur contre les attaques par force brute, notamment les tentatives de connexion répétées via SSH.
Qu'est-ce que Fail2ban ?
Fail2ban est un logiciel qui protège les serveurs contre les attaques par force brute en surveillant les journaux des services (comme SSH) et en ajoutant automatiquement des règles dans le pare-feu pour bloquer les adresses IP qui tentent de se connecter trop souvent avec des identifiants incorrects.
Par exemple, un attaquant peut essayer de se connecter à votre serveur en envoyant plusieurs tentatives de connexion avec des mots de passe incorrects. Fail2ban bloque l'IP de l'attaquant après un certain nombre de tentatives échouées.
Installation de Fail2ban
Pour installer Fail2ban sur Debian 11, vous pouvez utiliser la commande suivante :
Une fois installé, Fail2ban commence à fonctionner avec une configuration par défaut qui protège plusieurs services, y compris SSH. Toutefois, pour une personnalisation plus poussée, vous devez configurer Fail2ban via son fichier de configuration.
Configurer Fail2ban pour protéger SSH
Le fichier de configuration principal de Fail2ban est situé dans /etc/fail2ban/jail.local
. C'est ici que vous pouvez activer des protections spécifiques pour les services que vous souhaitez sécuriser, y compris SSH.
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. Il serait préférable de créer un fichier jail.local pour vos configurations.
Exemple de configuration dans /etc/fail2ban/jail.local
Voici un exemple de configuration pour le service SSH dans le fichier jail.local :
Explication des paramètres :
[sshd] : Cette section configure Fail2ban pour protéger le service SSH (sshd). Le nom entre crochets définit le nom du "jail" ou "prison" (un ensemble de règles pour un service).
enabled = true : Cette directive active la protection Fail2ban pour SSH. Si vous mettez false, Fail2ban ne surveillera pas les connexions SSH.
port = ssh : Cela définit le port sur lequel SSH écoute. Par défaut, SSH écoute sur le port 22, mais il est recommandé de changer ce port pour des raisons de sécurité. Si vous avez configuré SSH pour écouter sur un autre port, vous devez modifier cette ligne en conséquence.
logpath = /var/log/auth.log : Ce paramètre indique à Fail2ban quel fichier journal il doit surveiller pour détecter les tentatives de connexion échouées. Le fichier /var/log/auth.log contient des informations sur les connexions SSH et les échecs d'authentification.
maxretry = 3 : Ce paramètre définit le nombre maximal de tentatives de connexion échouées avant que l'IP source ne soit bannie. Si une adresse IP échoue à se connecter trois fois dans la période définie, elle sera bannie.
bantime = 600 : Ce paramètre définit la durée pendant laquelle l'adresse IP bannie restera bloquée. Ici, elle est définie à 600 secondes (10 minutes).
findtime = 600 : Ce paramètre définit la période pendant laquelle Fail2ban surveille les tentatives échouées de connexion. Si une adresse IP dépasse le nombre maximal de tentatives échouées dans cette période, elle sera bannie.
ignoreip = 127.0.0.1 192.168.100.0/24 : Cette directive permet d'indiquer les adresses IP ou les sous-réseaux qui doivent être ignorés par Fail2ban. Cela peut être utile si vous voulez autoriser l'accès depuis votre propre réseau interne ou votre machine locale.
Redémarrer Fail2ban pour appliquer les modifications
Une fois que vous avez modifié le fichier jail.local pour protéger SSH, vous devez redémarrer Fail2ban afin d'appliquer les changements :
Vérification du statut de Fail2ban
Après avoir configuré Fail2ban, il est important de vérifier que le service fonctionne correctement et protège votre serveur. Pour cela, vous pouvez utiliser la commande suivante pour afficher l'état du service Fail2ban :
Pour voir la liste des "jails" (règles de sécurité) activées et leurs statuts, vous pouvez utiliser la commande suivante :
Pour obtenir des détails spécifiques sur un service comme SSH, vous pouvez exécuter :
Personnalisation et sécurité avancée
Les paramètres de Fail2ban peuvent être adaptés pour différents scénarios de sécurité. Par exemple, si vous souhaitez que les adresses IP soient bannies pendant une période plus longue après un grand nombre de tentatives échouées, vous pouvez ajuster maxretry
, findtime
, et bantime
en fonction de votre politique de sécurité.
Utilisation d'une IP whitelist
Si vous avez des utilisateurs ou des systèmes qui doivent toujours avoir accès à votre serveur, vous pouvez les ajouter à une liste blanche. Cela évite que Fail2ban ne les bannisse par erreur, même s'ils échouent plusieurs fois à se connecter.
Fail2ban n'est pas limité à SSH. Vous pouvez configurer des protections pour d'autres services comme Apache, Nginx, FTP, ou encore SFTP. Pour cela, il suffit d'activer le "jail" correspondant dans le fichier jail.local
.
Exemple de configuration pour Apache
Avec cette configuration, Fail2ban protège un serveur Apache contre les tentatives d'accès non autorisées en surveillant les fichiers de log des accès et en bloquant temporairement les adresses IP qui effectuent trop de tentatives échouées dans un court laps de temps (ici, 5 tentatives en 10 minutes).
Désactivation de Fail2ban
Si vous souhaitez temporairement désactiver Fail2ban, vous pouvez le faire avec la commande suivante :
Cela arrêtera le service, mais les configurations restent intactes pour que vous puissiez les réactiver plus tard avec la commande :
Débannir une ip
Remplacez <jail>
par le nom du jail (par exemple, sshd
) et <IP_ADDRESS>
par l'adresse IP que vous souhaitez débannir.
Exemple :
Conclusion
Fail2ban est un outil puissant pour renforcer la sécurité de votre serveur contre les attaques par force brute. En configurant correctement Fail2ban, vous pouvez protéger des services essentiels comme SSH et d'autres applications web contre les tentatives de connexion malveillantes. Il est recommandé de personnaliser les paramètres pour correspondre à vos besoins spécifiques et de garder un œil sur les logs et les actions de Fail2ban pour vous assurer que votre serveur reste sécurisé.
Last updated
Was this helpful?