Débannir (unban) une IP avec fail2ban : fail2ban-client et iptables

Fail2Ban c'est génial mais parfois on bannit à tort.
Voici comment débannir (unban) une IP bannie par Fail2Ban.

En résumé, en root sur le serveur :

fail2ban-client status <jail>
fail2ban-client set <jail> unbanip <ip>

La première commande affiche les IP bannies par une jail, la seconde débannit l'IP. La méthode iptables, utile sur les très anciennes versions ou quand la règle est restée dans le pare-feu, est détaillée plus bas.

Trouver la jail qui a banni l'IP

Passez root sur le serveur et listez les jails actives :

fail2ban-client status

Vous obtiendrez quelque chose du genre :

Status
|- Number of jail:      2
`- Jail list:   apache-botseeker-adf, sshd

Affichez ensuite le détail d'une jail, la liste des IP bannies est sur la dernière ligne :

fail2ban-client status apache-botseeker-adf
Status for the jail: apache-botseeker-adf
|- Filter
|  |- Currently failed: 0
|  |- Total failed:     42
|  `- File list:        /var/log/apache2/error.log
`- Actions
   |- Currently banned: 3
   |- Total banned:     18
   `- Banned IP list:   66.249.71.209 88.184.109.30 109.8.129.47

Si vous ne savez pas quelle jail a banni l'IP, regardez dans les logs de Fail2Ban :

grep 66.249.71.209 /var/log/fail2ban.log

Débannir l'IP avec fail2ban-client

fail2ban-client set apache-botseeker-adf unbanip 66.249.71.209

Il faudra bien entendu remplacer "apache-botseeker-adf" par le nom de la jail et l'IP par celle à débannir. La commande renvoie 1 si l'IP a été débannie, 0 si elle n'était pas bannie par cette jail.

Depuis la version 0.10, on peut aussi débannir une IP de toutes les jails d'un coup :

fail2ban-client unban 66.249.71.209

Relancez fail2ban-client status <jail> pour vérifier que l'IP n'est plus dans la liste des adresses bannies.

Passer par fail2ban-client plutôt que par iptables a deux avantages : Fail2Ban met à jour son propre état (sinon il croit toujours l'IP bannie), et la commande fonctionne quel que soit le pare-feu utilisé (iptables, nftables, firewalld…).

Éviter que l'IP soit de nouveau bannie

Dans mon cas, Fail2Ban avait banni le crawler de Google, rien que ça. Je ne sais pas pour vous, mais ce n'est pas une cible que je comptais bannir. Si l'IP risque de déclencher à nouveau la règle, ajoutez-la à ignoreip dans /etc/fail2ban/jail.local :

[DEFAULT]
ignoreip = 127.0.0.1/8 ::1 66.249.71.209

Puis rechargez la configuration :

fail2ban-client reload

Annexe : débannir avec iptables

C'est la méthode que j'utilisais à l'origine. Elle reste utile sur les très anciennes versions de Fail2Ban, ou quand fail2ban-client dit que l'IP n'est pas bannie alors qu'elle est toujours bloquée dans iptables (règle restée après un redémarrage de Fail2Ban, par exemple).

Listez les ip bannies avec la commande :

iptables -L

Vous obtiendrez quelque chose du genre :

...
Chain fail2ban-apache-botseeker-adf (1 references)
target     prot opt source               destination
DROP       all  --  APoitiers-551-1-48-250.w92-146.abo.wanadoo.fr  anywhere
DROP       all  --  ip-83-134-25-126.dsl.scarlet.be  anywhere
DROP       all  --  ADijon-154-1-14-132.w90-33.abo.wanadoo.fr  anywhere
DROP       all  --  cnv94-6-88-185-61-237.fbx.proxad.net  anywhere
DROP       all  --  mau78-1-88-184-109-30.fbx.proxad.net  anywhere
DROP       all  --  APlessis-Bouchard-154-1-33-207.w90-3.abo.wanadoo.fr  anywhere
DROP       all  --  crawl-66-249-68-133.googlebot.com  anywhere
DROP       all  --  ABordeaux-257-1-85-192.w90-50.abo.wanadoo.fr  anywhere
DROP       all  --  47.129.8.109.rev.sfr.net  anywhere
DROP       all  --  ANancy-256-1-30-55.w90-26.abo.wanadoo.fr  anywhere
DROP       all  --  AAnnecy-158-1-62-25.w90-48.abo.wanadoo.fr  anywhere
DROP       all  --  ALagny-152-1-28-44.w83-112.abo.wanadoo.fr  anywhere
DROP       all  --  pub30-175.mobius.fr  anywhere
DROP       all  --  APuteaux-651-1-273-223.w90-44.abo.wanadoo.fr  anywhere
DROP       all  --  81-67-122-188.rev.numericable.fr  anywhere
DROP       all  --  209.151.95.79.rev.sfr.net  anywhere
DROP       all  --  190.195.22.93.rev.sfr.net  anywhere
DROP       all  --  crawl-66-249-71-209.googlebot.com  anywhere
RETURN     all  --  anywhere             anywhere
...

On peut voir sur l'avant-dernière ligne le crawler de Google.

Il faut compter le nombre de lignes d'IP bannies jusqu'à celle que l'on veut débannir. Ici la 18e ligne. Pour éviter de compter, ajoutez --line-numbers (et -n pour afficher les IP sans résolution DNS, beaucoup plus rapide) :

iptables -L fail2ban-apache-botseeker-adf -n --line-numbers

Ensuite une petite ligne de commande, il faudra bien entendu remplacer "fail2ban-apache-botseeker-adf" par le nom de la chaîne qui a banni l'IP (f2b-<jail> sur les versions récentes) et "18" par le numéro de ligne correspondant.

iptables -D fail2ban-apache-botseeker-adf 18

Relancez la première commande pour vérifier que l'IP n'est plus dans la liste des adresses bannies.

Attention : avec cette méthode, Fail2Ban n'est pas prévenu et considère toujours l'IP comme bannie. Sur les distributions récentes, les règles peuvent aussi être dans nftables (nft list ruleset) et non dans iptables. Dans les deux cas, préférez fail2ban-client.

Surveiller ce que Fail2Ban bannit

Si comme moi, vous avez mis en place une stratégie de bannissement basée sur les logs d'erreur d'Apache pour éviter les robots, pensez à monitorer Fail2Ban avec un outil comme Munin ou Cacti et à vérifier de temps en temps qui vous avez banni.

Il y a 2 commentaires.

Ecrit par cloonn le 10 nov. 2014

Merci, ce fu trés utile pour ne pas rester sur le pas de ma porte...

Ecrit par Pulpe le 2 oct. 2017

Yep, ça a été utile pour moi aussi car fail2ban disait ne pas avoir banni mon ip, en essayant les commandes pour deban. Or elle était bien bannie dans iptables.

Ajouter un commentaire