Principe de fail2ban pour voir les nouvelles IP bannies

Salut,

Il y a déjà quelques temps que j’avais installé fail2ban mais, je ne sais pas trop pourquoi, je n’avais pas grand chose à tester vu qu’aucun ban n’était remonté.

A présent j’ai remarqué avoir des IP bannies et je m’occupe du sujet.

Le problème c’est que la liste des IP bannies sur la journée ou la dernière IP bannie est toujours la même, ça m’interroge donc je fouille

Dernière IP bannie apache-noscript 34.86.18.234
Banni apache-noscript 65

On voit clairement sur le graphique qu’il y a un passage à 0 toujours à la même heure (11h40) et que ça remonte à 65, toujours à la même heure (03h40)

En regardant un peu le fonctionnement de fail2ban, que je connais très mal, je vois qu’il y a une conf dans /etc/fail2ban/jail.d/jeedom.conf et qui contient ces lignes là :

.....
# ban de  60 minutes
bantime  = 28800

# on regarde les attaques sur les 2 dernières heures. Les 5 minutes par défaut, ça ne marche plus, les pirates se sont adaptés
findtime = 7200
maxretry = 3

......

[apache-noscript]
enabled  = true
port     = http,https
filter   = apache-noscript
logpath   = /var/www/html/log/http*.error
maxretry = 1

En regardant le(s) fichier(s) de log analysé(s) je vois :

ls -al /var/www/html/log/http*.error
-rwxrwxr-x 1 www-data www-data 1614101 14 nov.  06:28 /var/www/html/log/http.error

J’ai donc visiblement un seul fichier http.error, qui ne tourne jamais, j’imagine que c’est donc pour ça que fail2ban parcours sans arrêt les mêmes lignes de logs, ban donc toujours les mêmes IP et que le plugin-fail2ban suis le mouvement en signalant finalement toujours la même chose.

sudo fail2ban-client status apache-noscript
Status for the jail: apache-noscript
|- Filter
|  |- Currently failed: 0
|  |- Total failed:     60061
|  `- File list:        /var/www/html/log/http.error
`- Actions
   |- Currently banned: 65
   |- Total banned:     3168
   `- Banned IP list:   69.50.95.89 164.90.228.7...........

Est-ce que quelque chose est mal configuré coté Jeedom (la rotation de http.error par exemple) ?
Est-ce que je n’ai pas compris la logique de fail2ban ?

Version bêta du 2025-08-07 01:13:23

1 « J'aime »

Bonjour

Il ya déjà quelque temps lorsque j’ai configuré Fail2ban sur mon Jeedom, je m’étais appuyé sur ce TUTO : Premiers pas avec Fail2ban | Commandes et Système | IT-Connect

Qu’entends-tu par :

Si tu consultes tes logs, dans http.error tu devrais constater que ce fichier évolue bien au fil du temps et des tentatives de connexion.

0520|[Fri Nov 14 10:03:27.436364 2025] [access_compat:error] [pid 2175109:tid 2175109] [client 213.209.157.254:49016] AH01797: client denied by server configuration: /var/www/html/.git
0521|[Fri Nov 14 10:09:30.947796 2025] [access_compat:error] [pid 2181571:tid 2181571] [client 220.179.138.205:33778] AH01797: client denied by server configuration: /var/www/html/cgi-bin
0522|[Fri Nov 14 10:16:53.847017 2025] [access_compat:error] [pid 2191006:tid 2191006] [client 167.172.87.35:49987] AH01797: client denied by server configuration: /var/www/html/wp-includes
0523|[Fri Nov 14 10:16:54.204931 2025] [php7:error] [pid 2191006:tid 2191006] [client 167.172.87.35:49987] script '/var/www/html/xmlrpc.php' not found or unable to stat
0524|[Fri Nov 14 10:18:18.078231 2025] [access_compat:error] [pid 2190107:tid 2190107] [client 170.64.222.229:56390] AH01797: client denied by server configuration: /var/www/html/.env
0525|[Fri Nov 14 10:18:20.023769 2025] [access_compat:error] [pid 2189633:tid 2189633] [client 170.64.222.229:56396] AH01797: client denied by server configuration: /var/www/html/.git
0526|[Fri Nov 14 10:43:07.755723 2025] [access_compat:error] [pid 2200940:tid 2200940] [client 20.169.105.51:37338] AH01797: client denied by server configuration: /var/www/html/developmentserver
0527|[Fri Nov 14 11:06:17.019216 2025] [access_compat:error] [pid 2215861:tid 2215861] [client 147.182.198.95:33200] AH01797: client denied by server configuration: /var/www/html/+CSCOL+
0528|[Fri Nov 14 11:06:18.138742 2025] [access_compat:error] [pid 2216298:tid 2216298] [client 147.182.198.95:33214] AH01797: client denied by server configuration: /var/www/html/+CSCOE+
0529|[Fri Nov 14 11:06:19.280619 2025] [access_compat:error] [pid 2210261:tid 2210261] [client 147.182.198.95:33222] AH01797: client denied by server configuration: /var/www/html/+CSCOL+

D’ailleurs si ta jail apache-noscript contient 65 IP bannies, c’est que Fail2ban fait bien son boulot.

C’est peut-être au niveau du plugin (que je n’utilise pas) que tu aurais mal configuré quelque chose et qui fait que la dernière IP ne bouge pas, sauf si c’est vraiment toujours la même qui revient après XX secondes (selon ton bantime).

Si c’est le cas, tu devrais peut-être ajouter un banissement incrémental.
Voir ce sujet : Fail2ban qui ne bannit pas - #37 par dan_73

Quant à ta dernière IP bannie, c’est celle qui est listée lorsque tu exécutes ta commande

sudo fail2ban-client status apache-noscript

Bonjour Bison

Pour vérifier le bon fonctionnement de fail2ban tu peux consulter le log de fail2ban ( fail2ban.log) se trouvant dans /var/log. 4 archives de fail2ban doivent se trouver dans ce répertoire.
Tu peux le comparer avec le fichier http.error, les fichiers archives n’existe pas, c’est Jeedom qui gère sa taille voir paramètres des log.

Il est possible avec le plugin ssh manager de créer des commandes qui remontent les infos des règles et de les comparer avec celles du plugin fail2ban, l’avantage du plugin c’est qu’il fait tout le travail et géolocalise les IP:

Il y a peut être une désynchronisation entre fail2ban et le fichier http.error.

  • Arrêter le service fail2ban: sudo systemctl stop fail2ban
  • Vider le fichier http.error par l’interface Jeedom
  • Redémarrer le service fail2ban: sudo systemctl stop fail2ban

J’ai regardé le contenu de ton fichier de configuration qui est celui que jeedom créait dans les versions précédentes. C’est le même que le mien. Les versions actuelles n’installent plus fail2ban et ne créent pas le fichier jeedom.conf.

Bonsoir,

Merci pour vos réponses.

@dan_73

  • oui le fichier http.error évolue, bien sûr
  • oui fail2ban fait le boulot puisqu’il bannie des IP en lisant http.error

Ce que je « reproche » et ne comprends pas c’est qu’il fait la même chose chaque jour.

@echo, j’ai été regardé dans le répertoire et j’ai pris une des IP au hasard

sudo cat fail2ban* | grep 34.86.18.234
2025-11-16 03:38:15,513 fail2ban.filter         [531]: INFO    [apache-noscript] Found 34.86.18.234 - 2025-11-16 03:38:15
2025-11-16 03:38:15,687 fail2ban.actions        [531]: NOTICE  [apache-noscript] Ban 34.86.18.234
2025-11-16 03:38:15,710 fail2ban.actions        [531]: ERROR   Failed to execute ban jail 'apache-noscript' action 'iptables-multiport' info 'ActionInfo({'ip': '34.86.18.234', 'family': 'inet4', 'fid': <function Actions.ActionInfo.<lambda> at 0x7f3297c82c10>, 'raw-ticket': <function Actions.ActionInfo.<lambda> at 0x7f3297c88310>})': Error starting action Jail('apache-noscript')/iptables-multiport: 'Script error'
2025-11-16 11:38:15,687 fail2ban.actions        [531]: NOTICE  [apache-noscript] Unban 34.86.18.234
2025-11-09 03:38:15,280 fail2ban.filter         [531]: INFO    [apache-noscript] Found 34.86.18.234 - 2025-11-09 03:38:15
2025-11-09 03:38:15,379 fail2ban.actions        [531]: NOTICE  [apache-noscript] Ban 34.86.18.234
2025-11-09 03:38:15,387 fail2ban.actions        [531]: ERROR   Failed to execute ban jail 'apache-noscript' action 'iptables-multiport' info 'ActionInfo({'ip': '34.86.18.234', 'family': 'inet4', 'fid': <function Actions.ActionInfo.<lambda> at 0x7f3297c82c10>, 'raw-ticket': <function Actions.ActionInfo.<lambda> at 0x7f3297c88310>})': Error starting action Jail('apache-noscript')/iptables-multiport: 'Script error'
2025-11-09 11:38:15,367 fail2ban.actions        [531]: NOTICE  [apache-noscript] Unban 34.86.18.234
2025-11-10 03:38:16,151 fail2ban.filter         [531]: INFO    [apache-noscript] Found 34.86.18.234 - 2025-11-10 03:38:16
2025-11-10 03:38:16,212 fail2ban.actions        [531]: NOTICE  [apache-noscript] Ban 34.86.18.234
2025-11-10 03:38:16,219 fail2ban.actions        [531]: ERROR   Failed to execute ban jail 'apache-noscript' action 'iptables-multiport' info 'ActionInfo({'ip': '34.86.18.234', 'family': 'inet4', 'fid': <function Actions.ActionInfo.<lambda> at 0x7f3297c82c10>, 'raw-ticket': <function Actions.ActionInfo.<lambda> at 0x7f3297c88310>})': Error starting action Jail('apache-noscript')/iptables-multiport: 'Script error'
2025-11-10 11:38:16,373 fail2ban.actions        [531]: NOTICE  [apache-noscript] Unban 34.86.18.234
2025-11-11 03:38:14,070 fail2ban.filter         [531]: INFO    [apache-noscript] Found 34.86.18.234 - 2025-11-11 03:38:14
2025-11-11 03:38:14,195 fail2ban.actions        [531]: NOTICE  [apache-noscript] Ban 34.86.18.234
2025-11-11 03:38:14,202 fail2ban.actions        [531]: ERROR   Failed to execute ban jail 'apache-noscript' action 'iptables-multiport' info 'ActionInfo({'ip': '34.86.18.234', 'family': 'inet4', 'fid': <function Actions.ActionInfo.<lambda> at 0x7f3297c82c10>, 'raw-ticket': <function Actions.ActionInfo.<lambda> at 0x7f3297c88310>})': Error starting action Jail('apache-noscript')/iptables-multiport: 'Script error'
2025-11-11 11:38:14,083 fail2ban.actions        [531]: NOTICE  [apache-noscript] Unban 34.86.18.234
2025-11-12 03:38:15,793 fail2ban.filter         [531]: INFO    [apache-noscript] Found 34.86.18.234 - 2025-11-12 03:38:15
2025-11-12 03:38:15,871 fail2ban.actions        [531]: NOTICE  [apache-noscript] Ban 34.86.18.234
2025-11-12 03:38:15,878 fail2ban.actions        [531]: ERROR   Failed to execute ban jail 'apache-noscript' action 'iptables-multiport' info 'ActionInfo({'ip': '34.86.18.234', 'family': 'inet4', 'fid': <function Actions.ActionInfo.<lambda> at 0x7f3297c82c10>, 'raw-ticket': <function Actions.ActionInfo.<lambda> at 0x7f3297c88310>})': Error starting action Jail('apache-noscript')/iptables-multiport: 'Script error'
2025-11-12 11:38:16,009 fail2ban.actions        [531]: NOTICE  [apache-noscript] Unban 34.86.18.234
2025-11-13 03:38:15,418 fail2ban.filter         [531]: INFO    [apache-noscript] Found 34.86.18.234 - 2025-11-13 03:38:15
2025-11-13 03:38:15,474 fail2ban.actions        [531]: NOTICE  [apache-noscript] Ban 34.86.18.234
2025-11-13 03:38:15,481 fail2ban.actions        [531]: ERROR   Failed to execute ban jail 'apache-noscript' action 'iptables-multiport' info 'ActionInfo({'ip': '34.86.18.234', 'family': 'inet4', 'fid': <function Actions.ActionInfo.<lambda> at 0x7f3297c82c10>, 'raw-ticket': <function Actions.ActionInfo.<lambda> at 0x7f3297c88310>})': Error starting action Jail('apache-noscript')/iptables-multiport: 'Script error'
2025-11-13 11:38:15,563 fail2ban.actions        [531]: NOTICE  [apache-noscript] Unban 34.86.18.234
2025-11-14 03:38:14,494 fail2ban.filter         [531]: INFO    [apache-noscript] Found 34.86.18.234 - 2025-11-14 03:38:14
2025-11-14 03:38:14,578 fail2ban.actions        [531]: NOTICE  [apache-noscript] Ban 34.86.18.234
2025-11-14 03:38:14,586 fail2ban.actions        [531]: ERROR   Failed to execute ban jail 'apache-noscript' action 'iptables-multiport' info 'ActionInfo({'ip': '34.86.18.234', 'family': 'inet4', 'fid': <function Actions.ActionInfo.<lambda> at 0x7f3297c82c10>, 'raw-ticket': <function Actions.ActionInfo.<lambda> at 0x7f3297c88310>})': Error starting action Jail('apache-noscript')/iptables-multiport: 'Script error'
2025-11-14 11:38:14,605 fail2ban.actions        [531]: NOTICE  [apache-noscript] Unban 34.86.18.234
2025-11-15 03:38:17,344 fail2ban.filter         [531]: INFO    [apache-noscript] Found 34.86.18.234 - 2025-11-15 03:38:17
2025-11-15 03:38:17,393 fail2ban.actions        [531]: NOTICE  [apache-noscript] Ban 34.86.18.234
2025-11-15 03:38:17,400 fail2ban.actions        [531]: ERROR   Failed to execute ban jail 'apache-noscript' action 'iptables-multiport' info 'ActionInfo({'ip': '34.86.18.234', 'family': 'inet4', 'fid': <function Actions.ActionInfo.<lambda> at 0x7f3297c82c10>, 'raw-ticket': <function Actions.ActionInfo.<lambda> at 0x7f3297c88310>})': Error starting action Jail('apache-noscript')/iptables-multiport: 'Script error'
2025-11-15 11:38:17,487 fail2ban.actions        [531]: NOTICE  [apache-noscript] Unban 34.86.18.234

On voit bien que chaque jour, il « found », il « ban », il « unban ».

On est d’accord que c’est pas un comportement normal ? fail2ban ne devrait probablement pas reparcourir l’ensemble du fichier http.error et donc retrouver les mêmes IP encore et encore ? Ou alors le problème réside dans les ERROR Failed to execute ban jail ?

Je vais essayer de lancer les commandes que tu indiques pour repartir à zéro, on sait jamais

Il n’y aura plus de fail2ban sur les prochaines version de Jeedom ?

Je pense qu’il faut effectivement se pencher sur l’erreur du log.
J’ai rapidement fait des recherches avec cette erreur et souvent ça pointe vers iptables.
Le package est installé chez toi ?

ça n’a pas l’air non

sudo dpkg -l iptables
Souhait=inconnU/Installé/suppRimé/Purgé/H=à garder
| État=Non/Installé/fichier-Config/dépaqUeté/échec-conFig/H=semi-installé/W=attend-traitement-déclenchements
|/ Err?=(aucune)/besoin Réinstallation (État,Err: majuscule=mauvais)
||/ Nom            Version      Architecture Description
+++-==============-============-============-=====================================
un  iptables       <aucune>     <aucune>     (aucune description n'est disponible)

Enfin je me questionne, pourquoi, lors de l’installation initiale, Jeedom aurait installé fail2ban et pas iptables ?

J’ai quand même pas l’intuition que ça puisse être la raison. Après tout on voit bien les lignes de found, ban, unban … donc que le ban réel échoue parce que iptables n’est pas présent ne me semble pas influencer ce comportement de relecture chaque jour des mêmes infos du fichier http.error

J’ai stoppé fail2ban, purgé le fichier http.error et redémarré fail2ban, on va déjà voir ce que ça donne comme ça.

Entre temps j’ai mis un filtrage géolocalisé sur mon routeur donc j’aurais moins de visiteurs, on va surement devoir attendre un petit moment pour voir les effets :face_with_hand_over_mouth:

Iptables semble pourtant requis .

When Fail2ban identifies and locates an attempted compromise using your chosen parameters, it will add a new rule to iptables to block the IP address from which the attack originates. This restriction will stay in effect for a specific length of time or on a long-term basis

https://dev1galaxy.org/viewtopic.php?id=5605

C’est peut être pour éviter d’aller installer des packages que l’installation de Jeedom n’intègre pas (ou plus, je n’ai pas connu avec depuis 2021) Fail2ban.

Edit: à priori iptables est remplacé par nftables depuis Debian 11, voire même 10.
Dans ce cas, tu peux essayer de modifier ton fichier de configuration et écrire :

# banaction = iptables-multiport
banaction = nftables-multiport

En complément :
Chez moi Debian 11.11

sudo dpkg -l iptables
Souhait=inconnU/Installé/suppRimé/Purgé/H=à garder
| État=Non/Installé/fichier-Config/dépaqUeté/échec-conFig/H=semi-installé/W=attend-traitement-déclenchements
|/ Err?=(aucune)/besoin Réinstallation (État,Err: majuscule=mauvais)
||/ Nom            Version      Architecture Description
+++-==============-============-============-=================================================
ii  iptables       1.8.7-1      amd64        administration tools for packet filtering and NAT

Bonsoir

Oui iptables est requis. Lorsque fail2ban scrute le fichier http.error et veut bannir ou débannir une ip, il ajoute une règle dans iptables. Après avoir installé iptables relancer fail2ban. Tu peux vérifier les nouvelles règles en faisant iptables -L.

Je suis sur Debian 12 avec fail2ban, j’ai intallé iptables. Mais il y a peut être d’autres alternatives.

Jeedom a un mécanisme interne pour bannir les ip inédésirables. Sur les nouveaux fichiers install.sh je ne trouve plus de commandes d’installation de fail2ban. La team Jeedom je pense ne désire plus supporter fail2ban ayant intégré un mécanisme interne de bannissement.

Personellement je préfère doubler les protections. Sur mon reverse proxy nginx proxy manager je suis monté à plus de 1000 adresses bannies.

En effet j’ai bien nftables, j’ai modifié la ligne banaction et restart fail2ban.

ça me parait une bonne idée plutôt que d’installer un nouveau package qui pourrait potentiellement rentrer en conflit.

De toute façon quand Jeedom passera en 4.5 je réinstallerais Debian 12 + Jeedom 4.5 donc exit fail2ban si Jeedom gère les bans sans outils tiers

1 « J'aime »

Lequel ?

Le seul mécanisme que je connaisse est celui qui bloque des connexions infructueuses après X tentatives, mais rien au niveau des IP.

La discussion est intéressante, je vais regarder sur mon Jeedom si nftables est installé sur ma Debian 12. J’ai lu que nftables est plus efficace que iptables. J’étais tellement habitué à utiliser iptables que je ne me suis pas posé la question. Merci dan_73 pour l’info, je vais creuser.

Je suis d’accord, autant limiter les problèmes.

Vous pouvez lire cette discussion, tout ce que je sais c’est le propos de Loic de la team Jeedom.

fail2ban a fait ses preuves depuis longtemps, certains reprochent qu’il prend trop de ressources.
Crowdsec semble plus évolué mais je le trouve compliqué à installer.

Je préfère jouer la prudence et doubler la sécurité, je conserve fail2ban.
J’ai un VPS exposé sur internet avec fail2ban il n’a jamais été piraté depuis 10 ans.

Quand on voit le nombre d’IPs bannies suite à des tentatives au travers de différents scripts, je ne suis pas tout à fait d’accord pour dire que Fail2ban n’est pas utile et que le mécanisme de Jeedom soit suffisant. D’autant que SSH n’est pas exposé chez moi, uniquement http et https.

Pour éviter de trop charger, j’utilise le mécanisme incremental sur 5 semaines, et avec ça j’ai près de 250 IPs bannies. Donc cela a quand même un certain intérêt pour limiter les entêtés.

1 « J'aime »