Fail2ban permet de bannir les utilisateurs en cas d’échec de certaines actions. Par exemple sur l’erreur 403 d’une page web ou une authentification ssh incorrecte. Mais que pouvons-nous faire s’ils continuent à obtenir des tentatives infructueuses ?
L’idée principale est d’analyser les logs de Fail2ban et de vérifier qui a déjà été banni par d’autres règles, et de le bannir à nouveau à un intervalle plus long.
Pour cela, nous pouvons utiliser le filtre intégré recidive.conf.
Créer un fichier de jail : /etc/fail2ban/jail.d/recidive.conf
avec ce contenu :
[recidive] enabled = true logpath = /var/log/fail2ban.log filter = recidive # find how many times it was banned today findtime = 86400 ; 1 day # if it banned 4 times maxretry = 4 # ban this user for 3 hours bantime = 10800 ; 3 hours
Mais si nous voulons l’utiliser en « second niveau » par exemple pour interdire les utilisateurs pour une durée encore plus longue. Nous devrions modifier recidive.conf et ajouter ignoreregex pour exclure les IP déjà bannies par cette règle.
Il faut donc changer dans le fichier /etc/fail2ban/filter.d/recidive.conf :
ignoreregex =
par
ignoreregex = \[recidive.*\]\s+Ban\s+<HOST>
et créer ou modifier notre fichier /etc/fail2ban/jail.d/recidive.conf
[recidive1] enabled = true filter = recidive bantime = 10800 ; 3 hours findtime = 86400 ; 1 day logpath = /var/log/fail2ban.log maxretry = 4 [recidive2] enabled = true filter = recidive bantime = 86400 ;1 day findtime = 604800 ;1 week logpath = /var/log/fail2ban.log maxretry = 7 [recidive3] enabled = true filter = recidive bantime = 604800 ;1 week findtime = 2592000 ;1 month logpath = /var/log/fail2ban.log maxretry = 10 [recidive4] enabled = true filter =recidive bantime = 2592000 ;1 month findtime = 15552000 ;6 months logpath = /var/log/fail2ban.log maxretry = 20