Comment sécuriser SSH avec Fail2Ban

Protéger votre serveur contre les attaques de force brute est essentiel. La question est : comment exactement ? Heureusement pour vous, Fail2Ban est juste au coin de la rue pour protéger votre serveur, mais la configuration par défaut de Fail2Ban nécessite quelques ajustements pour une sécurité optimale. Ne vous inquiétez pas cependant, ce tutoriel a tout prévu.

Dans ce tutoriel, vous apprendrez comment configurer Fail2Ban et repousser les attaques de force brute en sécurisant votre serveur SSH.

Prêt ? Continuez à lire pour optimiser la sécurité de votre serveur SSH !

Prérequis

Ce tutoriel comprend des instructions étape par étape. Si vous souhaitez suivre, assurez-vous d’avoir ce qui suit en place :

  • Un serveur Ubuntu et Debian – Ce tutoriel utilise un serveur exécutant Ubuntu 18.04 LTS pour configurer Fail2Ban et un serveur Debian 10 pour tester les configurations d’interdiction de Fail2Ban.
  • Accès root ou privilèges sudo sur le serveur pour exécuter des commandes en tant que superutilisateur.
  • Fail2Ban installé sur un serveur Ubuntu ou Debian.

Mise en place d’un pare-feu de base

Fail2Ban protège votre serveur en surveillant les journaux et en bannissant les adresses IP qui effectuent trop de tentatives de connexion dans un certain laps de temps. Mais d’abord, vous allez configurer un pare-feu de base où vous pourrez ajouter des règles pour bloquer les actes malveillants sur votre serveur.

1. Tout d’abord, exécutez la commande service ci-dessous pour arrêter Fail2Ban (fail2ban stop) en cours d’exécution. Arrêtez Fail2Ban lorsque vous apportez des modifications à vos fichiers de configuration afin de pouvoir tester les modifications et vous assurer qu’elles fonctionnent comme prévu.

sudo service fail2ban stop
Stopping the fail2ban service

2. Exécutez la commande apt install pour installer Sendmail et IPTables-persistent. Sendmail est un programme que Fail2Ban utilise pour vous notifier lorsqu’il bannit une adresse IP. Alors que IPTables-persistent est un programme qui enregistre vos paramètres de configuration modifiés dans le fichier /etc/sysconfig/iptables.

Avoir ces programmes installés permet de maintenir vos paramètres de pare-feu intacts même en cas d’événement imprévu, comme une panne de courant.

sudo apt install sendmail iptables-persistent -y

Exécutez maintenant chaque commande iptables ci-dessous pour configurer votre pare-feu. Ces commandes ne généreront aucune sortie mais ajouteront quatre règles à votre pare-feu. Ces règles permettent ou bloquent les connexions vers votre serveur.

## Première règle - Accepte tout le trafic généré par le serveur (interface lo) 
sudo iptables -A INPUT -i lo -j ACCEPT
## Deuxième règle - Accepte tout le trafic qui fait partie 
## d'une connexion établie ou liée
sudo iptables -A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
## Troisième règle - Autorise le trafic SSH sur le port 22
sudo iptables -A INPUT -p tcp --dport 22 -j ACCEPT
## Quatrième règle - Bloque tout autre trafic
sudo iptables -A INPUT -j DROP
Adding four rules to your firewall

4. Exécutez la commande iptables ci-dessous pour afficher un résumé de ce que vous avez configuré dans votre pare-feu.

sudo iptables -S

Ci-dessous, en surbrillance, se trouvent les règles que vous avez ajoutées à votre pare-feu.

Checking your firewall rules

5. Ensuite, exécutez les commandes suivantes pour sauvegarder vos règles dans le fichier /etc/sysconfig/iptables-config et démarrer le service Fail2Ban. Le fichier iptables-config contient toutes vos règles de pare-feu permanentes.

Fail2Ban ajoutera automatiquement quelques règles à votre pare-feu pour protéger votre serveur.

sudo dpkg-reconfigure iptables-persistent
sudo service fail2ban start

6. Enfin, réexécutez la commande iptables ci-dessous pour afficher vos règles de pare-feu.

sudo iptables -S

Comme indiqué ci-dessous, en surbrillance en rouge se trouvent les nouvelles règles ajoutées à votre pare-feu par Fail2Ban.

Previewing your firewall rules

Ajustement de votre configuration locale Fail2Ban

Maintenant que vous avez un pare-feu de base en cours d’exécution, il est temps d’ajuster votre fichier de configuration local Fail2Ban pour ajouter plus de contrôle pour sécuriser votre serveur. Ce tutoriel utilise le fichier de configuration /etc/fail2ban/jail.conf car il contient toutes les options nécessaires pour configurer les paramètres globaux de l’application Fail2Ban.

Peut-être que vous souhaitez créer des règles personnalisées pour votre serveur SSH. Si tel est le cas, vous créerez un nouveau fichier jail.local (basé sur le fichier jail.conf) et mettrez les règles spécifiques à SSH dans le fichier jail.local. Ce faisant, vous pourrez remplacer les paramètres du fichier jail.conf pour votre serveur.

1. Exécutez la commande awk ci-dessous pour effectuer ce qui suit:

  • Affichez le contenu ('{ printf "# "; print; }') du fichier /etc/fail2ban/jail.conf.
  • Créez un fichier nommé jail.local (basé sur le fichier jail.conf), que vous pouvez utiliser pour remplacer les paramètres par défaut dans le fichier jail.conf.
  • Envoyez le contenu du fichier /etc/fail2ban/jail.conf à la commande tee. Cela écrira le contenu du fichier jail.conf sur votre système de fichiers local (/etc/fail2ban/jail.local).
awk '{ printf "# "; print; }' /etc/fail2ban/jail.conf | sudo tee /etc/fail2ban/jail.local
Creating the jail.local file

2. Une fois que vous avez créé le fichier jail.local, exécutez la commande ls ci-dessous. La commande répertorie le contenu du répertoire Fail2Ban de votre serveur (/etc/fail2ban) pour vérifier que votre fichier jail.local est généré correctement.

ls /etc/fail2ban

Si vous voyez le nouveau fichier jail.local, tel que présenté ci-dessous, alors votre fichier local a été généré correctement.

Checking the newly created local file (jail.local)

3. Ouvrez le fichier /etc/fail2ban/jail.local dans votre éditeur de texte préféré et accédez à la section [ssh].

Décommentez les options [sshd] et enabled en supprimant le symbole # devant les options, comme indiqué ci-dessous pour activer SSH.

À partir de ce point jusqu’à la fin du tutoriel, supprimez le symbole # devant les sections ou les options pour les activer.

Enabling the [ssh] section

4. Faites défiler vers le bas et décommentez la section [DEFAULT] indiquée ci-dessous. Cette section est l’endroit où vous configurez les paramètres par défaut pour Fail2Ban. Tous les paramètres de cette section seront appliqués à tous les jails que Fail2Ban gère.

Uncommenting the [DEFAULT] option

5. Ensuite, faites défiler vers le bas jusqu’à la section bantime et définissez un bantime pendant 60 minutes. L’option bantime définit la durée, en minutes, pendant laquelle une adresse IP est bannie après une tentative de connexion échouée.

Le réglage par défaut de la durée de bannissement est de 600 secondes (10 minutes). Vous pouvez ajuster ce paramètre selon vos préférences, mais il est important de noter que plus le temps de bannissement est bas, plus votre serveur sera chargé.

Setting a ban duration

6. Accédez aux options findtime et maxretry. Laissez le findtime tel quel (10m) et réduisez le maxretry à 3.

L’option findtime définit la durée, en minutes, pendant laquelle une adresse IP peut échouer à se connecter avant d’être bannie. Tandis que l’option maxretry définit le nombre de tentatives de connexion échouées avant qu’une adresse IP ne soit bannie.

Le réglage par défaut de findtime est de 10 minutes, et celui de maxretry est de 5 minutes. Par conséquent, une adresse IP qui échoue à se connecter 5 fois dans une période de 10 minutes sera bannie.

Setting a Window Time for an IP Address to Login Before Getting Banned

7. Faites défiler vers le bas, décommentez et configurez les options destemail, sender et mta :

  • destemail – Entrez une adresse e-mail où Fail2Ban envoie des notifications.
  • sender – Définissez le champ « De » dans l’e-mail que Fail2Ban envoie à destemail.
  • mta – Laissez le paramètre par défaut (sendmail) tel quel. L’option mta définit l’agent de livraison de courrier électronique que Fail2Ban utilise pour envoyer des notifications.
Configuring destemail, sender, and mta options

8. Accédez aux options d’action, tel qu’indiqué ci-dessous, et décommentez l’option action_mwl. Ce faisant, Fail2Ban peut envoyer des emails de logwatch. Vous pouvez examiner les emails de logwatch pour enquêter davantage sur d’éventuels problèmes de sécurité sur votre serveur.

Enregistrez les modifications et quittez l’éditeur de texte.

Enabling Logwatch Emails

9. Exécutez maintenant les commandes ci-dessous pour redémarrer votre service fail2ban.

sudo service fail2ban stop
sudo service fail2ban start

10. Enfin, exécutez la commande ci-dessous pour vérifier le statut de votre service fail2ban. sudo service fail2ban status Si le service Fail2Ban fonctionne, vous obtiendrez une sortie similaire à celle ci-dessous.

sudo service fail2ban status

Si le service Fail2Ban fonctionne, vous obtiendrez une sortie similaire à celle ci-dessous.

Checking the Fail2Ban Service Status

Test de vos configurations de bannissement

Vous venez de configurer Fail2Ban, il est donc temps de vérifier si les configurations de bannissement fonctionnent réellement. Tentez plusieurs connexions SSH échouées vers votre serveur Fail2Ban à partir d’un serveur secondaire et voyez si ce serveur secondaire est banni.

1. Connectez-vous à votre serveur secondaire (Debian) et exécutez la commande ci-dessous pour vous connecter en SSH à votre serveur Fail2Ban.

Cette démonstration utilise un serveur Debian 10 avec l’adresse IP 134.122.20.103 pour se connecter en ssh au serveur fail2ban qui a l’adresse IP 69.28.83.134.

2. Entrez un mot de passe aléatoire lorsqu’on vous le demande et appuyez sur Entrée.

Lors du premier essai, le serveur Fail2Ban arrêtera la tentative de connexion SSH et affichera le message Permission denied, comme indiqué ci-dessous. Répétez la tentative de connexion SSH environ deux à trois fois de plus, et le serveur Fail2Ban finira par cesser de répondre à votre tentative de connexion SSH.

À ce stade, vous ne recevrez plus de message Permission denied, mais un écran blanc. Obtenir un écran blanc indique que votre deuxième serveur (Debian) a été interdit par le serveur Fail2Ban.

Testing if a server gets banned from Fail2Ban server after several failed logins

Mais peut-être avez-vous déjà une liste d’adresses IP à bloquer depuis votre serveur Fail2Ban. Si c’est le cas, ouvrez le fichier jail.local et accédez à la section [DEFAULT]. Décommentez l’option ignoreip et définissez les adresses IP à bloquer, comme indiqué ci-dessous.

L’adresse peut être soit plusieurs entrées IPv4 ou IPv6 séparées, soit séparées par des virgules.

Setting IP Addresses to Block from Fail2Ban Server

3. Sur votre serveur Fail2Ban (Ubuntu), relancez la commande iptables ci-dessous pour afficher vos règles de pare-feu.

sudo iptables -S

Remarquez ci-dessous qu’il y a une nouvelle règle qui rejette les tentatives de connexion SSH depuis l’adresse IP 134.122.20.103.

Vous recevrez également un e-mail de Fail2Ban, lors d’un bannissement réussi, avec un fichier journal attaché si vous avez sendmail configuré sur votre serveur Fail2Ban. La notification par e-mail indique que Fail2Ban a réussi à arrêter une attaque par force brute et a protégé votre serveur contre d’éventuels dommages.

Checking additional firewall rules

Conclusion

au cours de ce tutoriel, vous avez appris comment configurer fail2ban sur un serveur ubuntu. à ce stade, vous devriez être bien équipé de connaissances pour protéger votre serveur ssh contre les attaques de force brute.

maintenant, pourquoi ne pas pousser cette nouvelle connaissance à un niveau supérieur? peut-être commencer par bloquer les adresses ip sur tous les ports avec fail2ban sur un hôte docker?

Source:
https://adamtheautomator.com/fail2ban-ssh/