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.209Il 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 -LVous 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
Ecrit par Pulpe le 2 oct. 2017
Ajouter un commentaire