Lorsque vous commencez à gérer un serveur, vous êtes confronté à de nombreuses attaques extérieures. Les attaques par force brute sur SSH, les tentatives de connexion indiscriminées visant les applications web et le port scanning sont des menaces quotidiennes. Ignorer ces menaces peut finalement conduire à une intrusion dans le système. Fail2Ban est une solution de prévention des intrusions, légère et puissante, basée sur Linux, qui résout ces problèmes.

Fail2Ban détecte et bloque automatiquement les IP suspectes. Cela permet aux administrateurs de protéger le serveur sans effort supplémentaire.

Comment installer Fail2Ban

Fail2Ban est disponible sous forme de paquet sur la plupart des distributions Linux, ce qui rend son installation très simple.

Pour les distributions Ubuntu/Debian

sudo apt update
sudo apt install fail2ban

Une fois l'installation terminée, démarrez le service et configurez-le pour qu'il démarre automatiquement au démarrage.

sudo systemctl start fail2ban
sudo systemctl enable fail2ban

Aperçu de Fail2Ban

Comment configurer Fail2Ban de base

Fail2Ban utilise le fichier /etc/fail2ban/jail.conf comme fichier de configuration par défaut, mais il est recommandé de créer un fichier /etc/fail2ban/jail.local pour la personnalisation au lieu de modifier ce fichier directement.

Créer le fichier jail.local :

sudo cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local

Éléments de configuration principaux : - bantime : durée de blocage (en secondes) - findtime : intervalle de temps considéré comme une tentative d'attaque (en secondes) - maxretry : nombre maximal de tentatives échouées autorisées

[DEFAULT]
bantime = 3600
findtime = 600
maxretry = 5

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

Exemples de cas d'application

1. Blocage des tentatives de brute force SSH

En configurant le jail comme dans [sshd], si l'échec de connexion se produit plus de 5 fois, l'IP concernée sera bloquée pendant 1 heure.

2. Blocage des attaques de connexion Apache

[apache-auth]
enabled = true
filter = apache-auth
logpath = /var/log/apache2/error.log
maxretry = 3

Si une authentification échoue 3 fois sur le serveur web, l'IP sera bloquée.

Comment surveiller Fail2Ban

Il existe plusieurs façons de surveiller le bon fonctionnement de Fail2Ban.

1. Vérification de l'état avec fail2ban-client

Vous pouvez vérifier l'état d'un jail spécifique (par ex. sshd).

sudo fail2ban-client status sshd

Exemple de sortie :

Status for the jail: sshd
|- Filter
|  |- Currently failed: 2
|  |- Total failed: 15
|  `- File list:    /var/log/auth.log
`- Actions
   |- Currently banned: 1
   |- Total banned: 3
   `- Banned IP list: 192.168.1.100

2. Surveillance des fichiers de log

Les actions de Fail2Ban sont enregistrées dans le fichier /var/log/fail2ban.log.

tail -f /var/log/fail2ban.log

Cela vous permet de surveiller en temps réel les événements de blocage et de déblocage.

Comment fonctionne Fail2Ban

  1. Surveillance des logs : Fail2Ban surveille en permanence les fichiers de log configurés. (par ex. /var/log/auth.log, /var/log/apache2/error.log)

  2. Application de filtres : Il détecte des modèles spécifiques (échecs de connexion, erreurs d'authentification, etc.) via des filtres.

  3. Exécution d'actions : Si le maxretry configuré est dépassé, il bloque l'IP à l'aide d'iptables ou exécute des commandes de pare-feu comme firewall-cmd, nftables.

  4. Déblocage automatique : Une fois le bantime écoulé, le blocage est automatiquement levé.

Fail2Ban a une structure modulaire permettant des configurations de surveillance et de blocage indépendantes pour divers services (jails), renforçant ainsi la sécurité au-delà de la simple protection SSH.

Comment configurer un blocage permanent pour les attaques SSH

Il est crucial de traiter les attaquants SSH avec fermeté. Avec Fail2Ban, en réglant le bantime à -1, vous pouvez bloquer définitivement une IP.

[sshd]
enabled = true
port = ssh
filter = sshd
logpath = /var/log/auth.log
bantime = -1
findtime = 600
maxretry = 5

Avec cette configuration, toute IP ayant échoué à l'authentification SSH plus de 5 fois sera bloquée de façon permanente, rendant l'accès au serveur impossible.

[Astuce avancée] Comprendre le comportement de blocage par défaut de Fail2Ban

Fail2Ban fonctionne par défaut sans avoir besoin de définir une action séparée. Cela s'explique par le fait que la configuration par défaut inclut des commandes de blocage utilisant iptables.

  • Si vous ne spécifiez pas d'action, la configuration action = %(action_)s de la section [DEFAULT] s'appliquera.
  • Le %(action_)s utilise des commandes iptables en interne pour bloquer les IP malveillantes.
  • Par conséquent, même sans rédiger une action séparée, le blocage par iptables se fait automatiquement.

Exemple de commande de blocage par défaut (voir action_.conf)

iptables -I INPUT -s <ip> -j REJECT

Ainsi, Fail2Ban contrôlera automatiquement iptables pour bloquer les IP attaquantes.

Attention : - Si vous souhaitez utiliser d'autres outils de pare-feu comme UFW ou firewalld, vous devez définir explicitement action. - De plus, les règles de blocage peuvent disparaître après un redémarrage du serveur, il est donc recommandé de configurer le service Fail2Ban pour qu'il démarre automatiquement au démarrage.


En outre, vous pouvez créer des filtres personnalisés ou configurer des alertes par e-mail pour des réglages avancés.


Dès que vous exposez votre serveur au monde Internet, la sécurité n'est pas un choix mais une nécessité.
Un moment d'inattention peut avoir des conséquences fatales.
Fail2Ban sera un bouclier solide pour bloquer ces menaces à l'avance.
N'oubliez pas qu'à cet instant même, quelqu'un cherche à attaquer votre serveur.