Linux : comment protéger son serveur avec Fail2ban ?

Linux

Linux : comment protéger son serveur avec Fail2ban ?

I. Présentation

Vous souhaitez apprendre à utiliser Fail2ban ? Cet article est là pour vous guider dans l’installation et la configuration de Fail2ban pour protéger vos services contre certaines attaques et comportements malveillants.

Fail2ban est un outil open source conçu pour protéger vos serveurs de certaines attaques en se basant sur les journaux d’évènements. Très simple à installer et configurer, il est aussi hautement personnalisable, ce qui permet de l’intégrer à de nombreux projets, contextes et infrastructures.

Son principe est simple : il surveille en temps réel les logs locaux de vos services (SSH, Apache, FTP, etc.), détecte les tentatives d’intrusion répétées, et bloque automatiquement les adresses IP suspectes.

Il permet donc d’exposer plus sereinement des services sur le réseau ou Internet.

Version originale de cet article : 26 août 2013.

II. Surface d’attaque : pourquoi utiliser Fail2ban ?

A. La surface d’attaque des services exposés

Chaque service accessible depuis un réseau, et encore plus sur Internet (SSH, web, FTP, etc.), représente une porte d’entrée potentielle pour un attaquant. Par exemple :

  • Un serveur SSH exposé peut être ciblé par des bots tentant des milliers de combinaisons de mots de passe.
  • Un formulaire de connexion web mal sécurisé peut être la cible de tentatives de brute-force.
  • Un service FTP ouvert peut attirer des scans automatisés à la recherche de vulnérabilités connues.

Sans protection, ces attaques augmentent considérablement le risque de compromission de votre système.

Imaginez une porte d’entrée avec une serrure basique. Si quelqu’un essaie 100 clés différentes, il finira par entrer. Fail2ban agit comme un système d’alarme qui verrouille la porte après 3 tentatives infructueuses.

Si vous souhaitez aller plus loin dans cette notion de surface d’attaque et de tentatives répétées (brute force), je vous invite à consulter nos différents articles :

B. Comment Fail2ban réduit-il ce risque ?

Fail2ban fonctionne de la manière suivante :

Fonctionnement de Fail2ban.Fonctionnement de Fail2ban.
Fonctionnement de Fail2ban.

Ainsi, même si un attaquant dispose d’un dictionnaire de mots de passe, il ne pourra pas les tester indéfiniment, car son adresse IP sera bannie rapidement. Nous allons aussi voir que les actions réalisables par Fail2ban vont au-delà d’un simple bannissement.

III. Fail2ban en pratique : comprendre les principaux concepts

Pour comprendre rapidement et facilement Fail2ban, nous allons maintenant aborder quelques-uns des principaux concepts liés à son fonctionnement et sa configuration.

A. Les “prisons” (jails)

Une prison (ou jail en anglais) est une règle de surveillance appliquée à un service spécifique (SSH, Apache, etc.). Chaque prison définit :

  • Le service à protéger (ex : SSH, port TCP/22).
  • Le fichier de log à surveiller (ex : pour SSH).
  • Le nombre maximal de tentatives autorisées avant blocage (ex : 5 échecs).
  • La durée du blocage (ex : 10 minutes).

Nous allons détailler l’installation et la configuration de fail2ban un peu plus tard dans ce tutoriel, mais pour vous donner une idée, voici un exemple de configuration d’une prison :


B. Les filtres (filters)

Les filtres sont des règles de détection écrites en expressions régulières. Elles permettent à Fail2ban d’identifier les lignes suspectes dans les logs.

  • Exemple : une ligne comme Failed password for root from 192.168.1.100 dans déclenchera le filtre .

Heureusement, Fail2ban est installé par défaut avec une grande quantité de filtres prêts à l’emploi, notamment pour les services les plus courants.

C. Les actions

Lorsqu’une IP est bloquée, Fail2ban peut :

  • Ajouter une règle de pare-feu (iptables/nftables) pour interdire tout trafic depuis cette IP.
  • Envoyer une alerte par e-mail à l’administrateur.
  • Exécuter un script personnalisé (ex : notifier un système de monitoring).

Vous êtes libres de créer toutes les actions que vous souhaitez, il faudra alors passer par du scripting bash. Cela rend l’outil hautement personnalisable.

Maintenant que nous connaissons ces différents éléments, nous pouvons passer à la pratique.

IV. Installation et configuration de Fail2ban

A. Installation du paquet Fail2ban

Le paquet Fail2ban est présent dans tous les dépôts des principales distributions UNIX. Nous pouvons donc l’installer via les gestionnaires de paquets habituels : 


Cette commande vous permettra de confirmer que le service est bien installé et lancé :


Passons à présent à la prise en main de la configuration de Fail2Ban.

B. Configuration initiale

Les fichiers de configuration de Fail2Ban se trouvent dans le dossier :


Son organisation est assez claire et gérée de façon modulaire. Chaque fichier situé dans les dossiers , et sera lu et interprété au lancement de Fail2ban. Vous pourrez donc y rajouter vos propres configurations.

Le fichier de configuration principal de Fail2ban est le suivant : . Il s’agit d’un fichier d’une taille assez conséquente qui est déjà bien rempli. Je vous encourage à prendre le temps de parcourir ses différentes directives pour vous familiariser avec l’outil. 

Comme son nom l’indique, son rôle est de faire le lien entre les filtres et actions pour créer des prisons (jail) :

Extrait du fichier /etc/fail2ban/jail.confExtrait du fichier /etc/fail2ban/jail.conf
Extrait du fichier /etc/fail2ban/jail.conf

Par défaut, nous voyons par exemple une pré-configuration pour différents services SSH/HTTP qui pointent vers leurs fichiers de logs respectifs. Prenez notamment le temps de consulter les paramètres par défaut définis dans ce fichier, comme le temps de ban par défaut, qui peut être surchargé pour chaque prison que nous allons créer :

Paramètres par défaut importants du fichier /etc/fail2ban/jail.confParamètres par défaut importants du fichier /etc/fail2ban/jail.conf
Paramètres par défaut importants du fichier /etc/fail2ban/jail.conf

Non voyons, par exemple le , et . Quel que soit le service lié à une prison, Fail2ban cherchera 5 occurrences d’une même expression régulière pour une même IP dans un créneau de 10 minutes. Il déclenchera ensuite un bannissement de cette adresse IP pour 10 minutes.

Bonnes pratiques : ne modifiez pas ce fichier directement. Créez plutôt un fichier pour surcharger les paramètres ou les prisons souhaitées.

Nous allons, dans ce fichier de configuration personnalisé, créer une prison pour le service SSH avec les caractéristiques suivantes :

  • Service SSH (fichier )
  • Nombre d’essais pour déclencher l’action : 3 authentification infructueuses
  • Action : bannissement de l’IP pendant 1 heure

Exemple de configuration personnalisée () :


Notre prison sera identifiée par son nom. Nous spécifions ensuite le temps de bannissement, le nombre d’essais maximal toléré, le port (abrégé ici par le nom du service), le filtre associé (ici, un filtre par défaut que vous retrouverez dans ) et le chemin vers le fichier de log.

Si le port d’écoute de votre service n’est pas celui par défaut, il peut être précisé directement en étant précédé d’une virgule (ex: “port =ssh, 2569,…”). Cela sera utile pour la mise en place des règles de bannissement via nftables/iptables.

Pourquoi nous ne spécifions pas d’action ? 

Dans Fail2ban, l’action par défaut est déjà définie globalement dans le fichier . Cette action est généralement qui bloque l’IP via le pare-feu :

Action par défaut paramétrée dans le fichier /etc/fail2ban/jail.confAction par défaut paramétrée dans le fichier /etc/fail2ban/jail.conf
Action par défaut paramétrée dans le fichier /etc/fail2ban/jail.conf

Lorsque vous maitriserez pleinement la configuration de Fail2ban, vous pourrez modifier cette action, voir en créer de nouvelles.

Si vous êtes curieux et souhaitez savoir exactement comment sont configurées les actions et filtres par défaut auxquels nous faisons ici appel, je vous encourage à consulter le contenu des fichiers suivants : 

Redémarrons à présent Fail2Ban pour appliquer notre nouvelle prison :


C. Vérifier l’état des prisons

Pour savoir quelles sont les prisons actives et opérationnelles, il nous faut utiliser la commande suivante : 


Ici, nous en avons 2 : la prison par défaut, et la nôtre . Pour que cela soit plus propre, nous pourrons ensuite désactiver la prison par défaut dans le fichier :


Nous pourrons ensuite à nouveau redémarrer notre service Fail2ban.

V. Tester et valider la protection

A. Simuler une attaque

À présent, nous allons simuler un comportement malveillant en lançant 5 tentatives de connexion SSH sur notre serveur avec un mot de passe incorrect. Cela peut être fait manuellement depuis une autre machine du réseau local (ou VM) :


Mais sachez que lors d’une cyberattaque réelle, un attaquant va utiliser des outils automatisés pour effectuer des milliers de tentatives par minute ! Par exemple via l’outil :



Si vous souhaitez apprendre à maitriser l’outil de scan réseau et de recherche de vulnérabilité⁣s , je vous oriente vers mon livre (papier ou ebook) dédié à son sujet :

Livre NmapLivre Nmap

B. Constater le blocage

De retour sur notre serveur protégé par Fail2ban, nous pouvons à présent vérifier que l’adresse IP de notre système d’attaque est bloquée. D’abord par ce que vos 4ᵉ et 5ᵉ tentatives n’ont certainement pas abouties :


Puis, via la commande Fail2ban nous permettant d’obtenir le statut de notre prison :


Nous savons ici que le service SSH a reçu trois tentatives infructueuses d’authentification, et que l’adresse IP a été bannie.

Enfin, nous pouvons aussi consulter les journaux d’évènements de Fail2ban afin d’avoir un suivi plus détaillé, et même en temps réel, des évènements :


Le comportement de Fail2ban est ici bien visible : il a trouvé trois matchs pour son filtre pour les logs SSH (expression régulière), tous liés à une même adresse IP, qu’il a ensuite décidé de bannir. Nous avons ici les détails de l’attaque, heure, adresse IP, service, puis la décision de Fail2ban concernant le bannissement de l’adresse IP. Lorsqu’une adresse IP est retirée du pool des adresses bloquées, cette décision est également journalisée :


Nous venons ici de voir la configuration simple d’une prison SSH avec travers les principaux paramètres utiles. Mais Fail2ban est très complet et peut couvrir de nombreux services, même avec ses règles et ses filtres par défaut. Je vous encourage à consulter toute sa configuration et notamment les différentes actions possibles ().

Vous pourrez aussi constater la présence de la règle de blocage sur votre gestion de règles de pare-feu (iptables -L ou nft list ruleset). Attention ! Même si votre configuration Fail2Ban mentionne iptables, il est probable que ce soit nft (nftables) qui soit en fait utilisé en arrière-plan, notamment sur les systèmes récents.

VI. Conclusion

Fail2ban est un outil simple mais puissant pour automatiser la protection de vos services exposés. En quelques minutes, vous réduisez significativement le risque d’intrusion par force brute, sans effort manuel.

Il faut cependant aussi être conscient des limites de cet outil, il ne s’agit pas d’un système qui va bloquer 100% des attaques possibles. On parle notamment des failles 0-Day ou de tout autre type d’attaque qui, soit ne génère pas les logs nécessaires à leur blocage, soit ne se base pas sur des patterns connus. Égarement, la génération d’actions et de filtres qui n’existent pas déjà dans l’outil nécessite de bonnes compétences système et réseau, mais aussi des compétences en scripting.

Et vous, utilisez-vous déjà Fail2ban ? Quelles prisons avez-vous configurées ? Partagez vos retours en commentaires !

FAQ

Peut-on utiliser Fail2ban sur Windows ?

Non, Fail2ban est conçu pour les systèmes UNIX/Linux (Debian, Ubuntu, CentOS, etc.) et dépend d’outils comme iptables/nftables, absents sur Windows.

Fail2ban est-il efficace contre les attaques DDoS ?

Non, Fail2ban n’est pas conçu pour les DDoS (Distributed Denial of Service). Il bloque des IP individuellement, pas des flux massifs.

Solutions complémentaires :

  • Utilise un CDN (Cloudflare, Akamai) pour absorber le trafic.
  • Configure des règles de rate-limiting côté pare-feu ou load balancer.

Quelles sont les alternatives à Fail2ban ?

Fail2ban est l’outil le plus connu pour bloquer les attaques par force brute, mais il existe d’autres solutions :

  • DenyHosts : similaire à Fail2ban, mais spécifique à SSH.
  • CrowdSec : outil moderne, collaboratif et open source, qui partage des listes d’IP malveillantes entre utilisateurs (consultez nos articles sur CrowdSec)

SOURCE