Skip to main contentSkip to footer

Intégration de fail2ban

Transformez chaque adresse IP bannie par fail2ban sur votre serveur en un signalement à la liste noire de la communauté ReportedIP. Une petite action personnalisée appelle l’API de signalement à chaque bannissement, afin que votre pare-feu et la communauté se protègent mutuellement — ces mêmes données alimentent également le flux de la liste noire et la DNS / RBL Zone.

Vous avez besoin d’une API Key disposant de l’ report autorisation requise. Créez-en une gratuitement dans votre Dashboard ; consultez la section Authentification pour connaître les limites. Ne signalez que les adresses IP effectivement détectées par votre propre serveur.

Comment fonctionne fail2ban (en 30 secondes)

Fail2ban surveille les fichiers journaux (ou le journal systemd). Un filtre identifie les motifs d’attaque, une « jail » compte les correspondances par adresse IP au sein de findtime, et dès qu’une adresse IP atteint maxretry la limite, la « jail » exécute ses actions (bannissement + tout ce que vous ajoutez). Nous ajoutons une deuxième action qui signale l’adresse IP bannie à reportedIP.

1. Créez l’action de rapport

Enregistrez-la sous le nom /etc/fail2ban/action.d/reportedip.conf. À chaque bannissement, elle envoie via une requête POST l’adresse IP bannie, les Threat Categories et un bref commentaire vers l’Endpoint de rapport.

conf
# /etc/fail2ban/action.d/reportedip.conf
[Definition]
actionstart =
actionstop =
actioncheck =
actionban = curl -sS -m 10 -X POST "<report_url>" \
              -H "X-Key: <api_key>" \
              --data-urlencode "ip=<ip>" \
              --data-urlencode "categories=<categories>" \
              --data-urlencode "comment=fail2ban <name>: <failures> failed attempts" \
              -o /dev/null || :
actionunban =

[Init]
report_url = https://reportedip.com/wp-json/reportedip/v2/report
api_key    = <your-api-key>
categories = 18,22

Restriction des autorisations afin que la clé ne soit pas accessible en lecture par tous :

bash
chmod 600 /etc/fail2ban/action.d/reportedip.conf

Les balises <ip>, <name> (nom de la prison) et <failures> sont renseignées par fail2ban ; <api_key>, <categories> et <report_url> proviennent du [Init] bloc.

2. Activez-la dans une « jail »

Ajoutez l’action à une « jail » dans /etc/fail2ban/jail.localen complément de l’ action d’interdiction habituelle (%(action_)s), et non à la place de celle-ci :

conf
# /etc/fail2ban/jail.local
[sshd]
enabled = true
action  = %(action_)s
          reportedip

Vous pouvez redéfinir les catégories par jail en les passant en ligne, par exemple reportedip[categories="16,21"] sur une jail d’application web.

3. Appliquer et vérifier

L’ajout d’une nouvelle action nécessite un redémarrage complet — fail2ban-client reload cela ne garantit pas son intégration. Utilisez systemctl restart fail2ban, puis vérifiez que les deux actions sont bien chargées.
bash
systemctl restart fail2ban
fail2ban-client get sshd actions
# -> The jail sshd has the following actions:
#    nftables, reportedip

Consultez le journal de fail2ban

fichiers journaux de fail2ban vers /var/log/fail2ban.log (ou dans le journal : journalctl -u fail2ban). Les lignes qui vous intéressent :

log
2026-05-30 21:56:18 fail2ban.filter  [38760]: INFO    [sshd] Found 203.0.113.45 - 2026-05-30 21:56:18
2026-05-30 21:56:26 fail2ban.actions [38760]: NOTICE  [sshd] Ban 203.0.113.45
2026-05-30 22:06:26 fail2ban.actions [38760]: NOTICE  [sshd] Unban 203.0.113.45
Ligne du journalSignification
Found <ip>Le filtre a détecté une tentative d'attaque. Pas encore banni.
Ban <ip>Seuil atteint — le système de mise en quarantaine a exécuté ses actions, y compris l'envoi d'un rapport à reportedIP.
Unban <ip>bantime Le délai s'est écoulé ; la règle de pare-feu a été supprimée (pas de signalement).
Restore Ban <ip>fail2ban a redémarré et a réappliqué un bannissement toujours actif.

L'action de signalement elle-même ne génère aucun message en cas de réussite (-o /dev/null). Pour surveiller l'envoi des rapports, utilisez la commande `tail` sur le journal pendant le test, ou exécutez manuellement l'action curl manuellement pour une seule adresse IP — en cas de succès, le nouveau rapport s’affiche :

json
{"data":{"ipAddress":"203.0.113.45","abuseConfidencePercentage":39,"reportId":"4316026","aggregated":true}}

Compteurs en temps réel : vérifiez votre clé avec curl -H "X-Key: <key>" https://reportedip.com/wp-json/reportedip/v2/verify-key et consultez limits.dailyReportUsage, ou ouvrez le Dashboard.

Choix des Threat Categories par « jail »

Transmettez les identifiants de catégorie correspondant à ce que la « jail » détecte. Mappages courants (liste complète dans Threat Categories) :

JailcategoriesSignification
sshd18,22Brute-Force, SSH
postfix-sasl, dovecot11,18Email Spam, Brute-Force
proftpd, vsftpd5FTP Brute-Force
nginx-http-auth, apache-auth18,21Brute-Force, Web App Attack
nginx-badbots, apache-badbots14,19Port Scan, Bad Web Bot
apache-sqli, exploits Web16,21SQL Injection, Web App Attack
WordPress / wp-login18,21Brute-Force, Web App Attack
recidive (récidivistes)15,18Hacking, Brute-Force

Signaler plusieurs « jails »

Associez l'action à chaque « jail » et remplacez les catégories en ligne afin que chaque rapport soit précis :

conf
# /etc/fail2ban/jail.local
[sshd]
enabled = true
action  = %(action_)s
          reportedip[categories="18,22"]

[postfix-sasl]
enabled = true
action  = %(action_)s
          reportedip[categories="11,18"]

[recidive]
enabled = true
action  = %(action_)s
          reportedip[categories="15,18"]

Bonnes pratiques et sécurité

  • Ne signalez que vos propres bannissements. Ne signalez jamais d’adresses IP que vous n’avez pas observées en train d’attaquer vos propres systèmes — les faux signalements nuisent à la qualité du jeu de données (et peuvent entraîner la suspension de votre clé).
  • Ajoutez vos propres plages d’adresses à la Whitelist. Configurez ignoreip une liste blanche pour les adresses IP de votre bureau ou de vos systèmes de surveillance afin de ne jamais vous signaler vous-même.
  • Gardez la clé confidentielle (chmod 600). Elle n’est pas exposée aux attaquants, mais toute personne en possession du fichier peut soumettre des Reports en votre nom. Remplacez-la depuis le Dashboard en cas de fuite.
  • Un signalement échoué ne bloque jamais une exclusion. Le || : à la fin de actionban signifie qu’un incident réseau au niveau de ReportedIP n’empêchera pas fail2ban de bannir localement.
  • Seuils raisonnables. Des valeurs très basses maxretry sur les jails « bruyantes » peut entraîner un signalement excessif de clients de passage ; les valeurs par défaut (3–5) conviennent parfaitement.

Dépannage

SymptômeSolution
get <jail> actions n'affiche que l'action de bannissementVous avez rechargé au lieu de redémarrer. Exécutez systemctl restart fail2ban.
unknown smtpd restriction / jail ne démarre pasFaute de frappe dans la configuration dans jail.local; vérifiez l'indentation de la ligne suivante sous action.
Reports rejetés (HTTP 401/403)Clé manquant l' report autorisation, ou en-tête incorrect — il doit s’agir de X-Key.
HTTP 429 / quotaLimite quotidienne de rapports atteinte pour votre forfait ; voir Authentification.
Aucune mention dans le journal concernant l’interdictionL'action de rapport ne génère aucun message en cas de réussite. Vérifiez à l'aide fail2ban-client get <jail> actions et une vérification manuelle curl.
Vous souhaitez également bloquer l'utilisation des données de la communauté ? Importez le Blacklist Feed dans nftables/ipset, ou pour les serveurs de messagerie, interrogez la DNS / RBL Zone.

Dernière mise à jour : · Géré par l'équipe ReportedIP

Security Focused
GDPR Compliant
Made in Germany
Retour aux Docs