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.

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

4. Exécutez la commande iptables
ci-dessous pour afficher un résumé de ce que vous avez configuré dans votre pare-feu.
Ci-dessous, en surbrillance, se trouvent les règles que vous avez ajoutées à votre pare-feu.

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.
6. Enfin, réexécutez la commande iptables
ci-dessous pour afficher vos règles de pare-feu.
Comme indiqué ci-dessous, en surbrillance en rouge se trouvent les nouvelles règles ajoutées à votre pare-feu par Fail2Ban.

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 commandetee
. Cela écrira le contenu du fichierjail.conf
sur votre système de fichiers local (/etc/fail2ban/jail.local
).

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.
Si vous voyez le nouveau fichier jail.local, tel que présenté ci-dessous, alors votre fichier local a été généré correctement.

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.

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.

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

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.

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.

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.

9. Exécutez maintenant les commandes ci-dessous pour redémarrer votre service fail2ban
.
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.
Si le service Fail2Ban fonctionne, vous obtiendrez une sortie similaire à celle ci-dessous.

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.

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.

3. Sur votre serveur Fail2Ban (Ubuntu), relancez la commande iptables
ci-dessous pour afficher vos règles de pare-feu.
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.

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?