Fail2Ban est un script surveillant les accès réseau grâce aux logs des serveurs.

Lorsque Fail2ban décèle des erreurs d’authentification répétées, il prend des contre-mesures en bannissant l’adresse IP grâce à IPtables.

Cela permet d’éviter nombre d’attaques bruteforce et/ou par dictionnaire.

Fail2Ban se base sur un système de prisons (jails) que l’on peut définir, activer ou désactiver dans un simple fichier de configuration (/etc/fail2ban/jail.conf).


Installation

L’installation s’effectue via la commande suivante :

apt-get install fail2ban

Configuration

La configuration s’effectue à partir du fichier suivant :

vi /etc/fail2ban/fail2ban.conf

Niveau de détail des logs (défaut 3)

Chemin vers le fichier de log (description des actions entreprises par fail2ban)

Les services à monitorer sont stockés dans jail.conf
Il est recommandé d’en effectuer une copie nommée jail.local qui sera automatiquement utilisée à la place du fichier exemple.

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

Quelques paramètres globaux :

Liste des adresses IP de confiance à ignorer par fail2ban

Temps de ban en secondes

Nombre d’essais autorisés pour une connexion avant d’être banni

Adresse e-mail destinataire des notifications

Action à entreprendre en cas de détection positive (voir dans /etc/fail2ban/action.d/)

Chaque section possède ses propres paramètres qui prennent le pas sur les globaux s’ils sont mentionnés :

Monitoring activé (true) ou non (false)

Voir ci-dessus

Port IP concerné

Fichier de log à analyser pour détecter des anomalies

Filtre utilisé pour l’analyser du log

Les filtres par défaut sont stockés dans /etc/fail2ban/filter.d. Ils contiennent en général une instruction failregex suivie d’une expression régulière matchant la détection d’une authentification erronée.

Par exemple pour le service Courier :

failregex = LOGIN FAILED, ip=[<HOST>]$

Note : Celle-ci peut être précisée directement dans jail.local à la section appropriée pour prendre le pas sur la directive filter.

Exemple avec d’une configuration pour une jail ssh :

[ssh-iptables]
enabled  = true
filter   = sshd
action   = iptables-allports{name=SSH, port=ssh, protocol=tcp]
logpath  = /var/log.auth.log
maxretry = 7
bantime  = 1800
ignoreip = 85.31.192.0/26 85.31.193.0/26

Vous pouvez aussi modifier le port si nécessaire :

enabled = true
port    = 2222

Une fois les modifications effectuées, fail2ban doit être redémarré :

/etc/init.d/fail2ban restart

Pour lister les adresses IP bannies :

iptables -L -n -v

On remarque bien 3 IP bloquées dans l’exemple ci-dessous :

Chain fail2ban-SSH (1 references)
pkts  bytes target    prot opt in   out     source          destination
26    1848  REJECT    all  --  *    *   113.195.145.13      0.0.0.0/0       reject-with icmp-port-unreachable
9     468   REJECT    all  --  *    *   112.101.136.48      0.0.0.0/0       reject-with icmp-port-unreachable
54    3560  REJECT    all  --  *    *   116.31.116.45       0.0.0.0/0       reject-with icmp-port-unreachable
8270K 3035M RETURN    all  --  *    *    0.0.0.0/0      0.0.0.0/0

Fail2ban-client

Cette commande permet d’effectuer un grand nombre d’action comme changer le loglevel unban une IP changer une regex le tout à la volé.Néanmoins les modifications ne sont pas sauvegardés si elles ne sont pas rajoutés dans les fichiers de configuration. En cas de redémarrage du service ou du serveur, vous perdez vos manipulation. Cela reste un bon outil pour debug ou effectuer une action rapide.

Exemple d’un deban d’IP sans restart (donc en gardant le reste des IP bloquées) : ssh-iptables étant le nom de la jail

fail2ban-client set ssh-iptables unbanip 113.195.145.13