Installer et configurer Fail2ban

Comment protéger votre serveur SSH contre les attaques par force brute avec Fail2ban.

Fail2ban est un daemon qui surveille vos fichiers de logs et bannit automatiquement les adresses IP au comportement suspect — trop de tentatives de connexion échouées, scans de ports et autres schémas similaires. C'est l'une des façons les plus simples et les plus efficaces de protéger votre serveur SSH contre les attaques par force brute.

Installation

Ubuntu / Debian :

apt-get install fail2ban

CentOS :

yum install fail2ban

Structure de la configuration

Fail2ban dispose de deux fichiers de configuration principaux :

  • /etc/fail2ban/fail2ban.conf — contrôle le démarrage et le fonctionnement du processus Fail2ban lui-même
  • /etc/fail2ban/jail.conf — définit les règles de protection pour des services spécifiques, dont SSH

Le fichier jail.conf est divisé en sections appelées jails — chacune cible un service et un type d'attaque particuliers :

[DEFAULT]
ignoreip = 127.0.0.1/8
bantime  = 600
maxretry = 3
banaction = iptables-multiport

[ssh]
enabled  = true
port     = ssh
filter   = sshd
logpath  = /var/log/auth.log
maxretry = 6

Les paramètres de la section [DEFAULT] s'appliquent à tous les jails, sauf s'ils sont explicitement redéfinis dans une section spécifique.

Le jail [ssh] gère la protection contre les tentatives de connexion échouées répétées — le brute-force classique.

Description des paramètres clés

  • ignoreip — adresses IP qui ne seront jamais bannies. Accepte une liste d'IPs, de masques de sous-réseau ou de noms DNS séparés par des espaces.
  • bantime — durée (en secondes) pendant laquelle une IP reste bannie avant d'être automatiquement libérée.
  • maxretry — nombre d'événements correspondants qui déclenche un bannissement. Pour [ssh], il s'agit du nombre de tentatives de connexion échouées.
  • findtime — la fenêtre de temps (en secondes) durant laquelle maxretry événements doivent survenir pour qu'un bannissement soit appliqué. Par défaut : 600 secondes (10 minutes).
  • enabled — mettre à true pour activer un jail, false pour le désactiver.
  • port — le port sur lequel votre service écoute. Pour SSH, c'est 22 ou l'alias ssh.
  • filter — le nom du fichier de filtre contenant les expressions régulières que Fail2ban utilise pour détecter les événements suspects. Le filtre sshd se trouve dans /etc/fail2ban/filter.d/sshd.conf.
  • logpath — le fichier de log que Fail2ban surveille. Toute l'activité de connexion (réussie ou échouée) est enregistrée par défaut dans /var/log/auth.log.

Bonnes pratiques de configuration

Ne modifiez jamais jail.conf directement. Fail2ban est conçu pour être personnalisé via des fichiers .local — ils sont chargés automatiquement et ont priorité sur les valeurs par défaut. Vos modifications survivront ainsi aux mises à jour du paquet.

Créez votre propre fichier de surcharge :

nano /etc/fail2ban/jail.local

Voici une configuration de départ solide :

[DEFAULT]
# L'IP statique de votre serveur — évite de vous bannir accidentellement vous-même.
# Si vous ne définissez pas ignoreip ici, commentez-le dans jail.conf.
ignoreip = 57.66.158.131

[ssh]
# Si en l'espace d'1 heure...
findtime  = 3600
# ...6 tentatives de connexion échouées sont détectées...
maxretry  = 6
# ...cette IP est bannie pour 24 heures.
bantime   = 86400

Pourquoi modifier ignoreip : la valeur par défaut 127.0.0.1/8 est une faille de sécurité sur les serveurs partagés. Si un attaquant compromet n'importe quel compte shell sur la machine, il peut lancer un outil de brute-force en local — et Fail2ban l'ignorera, car le trafic semble provenir de localhost.

Pourquoi augmenter findtime : les botnets qui mènent des attaques par « brute-force lent » sont précisément conçus pour contourner la fenêtre par défaut de 10 minutes. Avec maxretry = 6, un attaquant peut essayer 5 mots de passe, attendre 10 minutes, en essayer 5 autres et recommencer indéfiniment sans jamais être banni. Augmenter findtime à une heure ou plus ferme cette brèche.

Redémarrage de Fail2ban

Une fois votre configuration en place, redémarrez le service :

service fail2ban restart

Aide

Une question ou besoin d'un coup de main ? Écrivez-nous via le système de tickets — nous sommes toujours là pour vous aider !

Besoin d’aide?Nos ingénieurs vous aideront gratuitement pour n’importe quelle question en quelques minutesNous contacter