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