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.
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.
# /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 :
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.local — en complément de l’
action d’interdiction habituelle (%(action_)s), et non à la place de celle-ci :
# /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
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.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 :
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 journal | Signification |
|---|---|
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 :
{"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) :
| Jail | categories | Signification |
|---|---|---|
sshd | 18,22 | Brute-Force, SSH |
postfix-sasl, dovecot | 11,18 | Email Spam, Brute-Force |
proftpd, vsftpd | 5 | FTP Brute-Force |
nginx-http-auth, apache-auth | 18,21 | Brute-Force, Web App Attack |
nginx-badbots, apache-badbots | 14,19 | Port Scan, Bad Web Bot |
apache-sqli, exploits Web | 16,21 | SQL Injection, Web App Attack |
WordPress / wp-login | 18,21 | Brute-Force, Web App Attack |
recidive (récidivistes) | 15,18 | Hacking, Brute-Force |
Signaler plusieurs « jails »
Associez l'action à chaque « jail » et remplacez les catégories en ligne afin que chaque rapport soit précis :
# /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
ignoreipune 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 deactionbansignifie qu’un incident réseau au niveau de ReportedIP n’empêchera pas fail2ban de bannir localement. - Seuils raisonnables. Des valeurs très basses
maxretrysur 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ôme | Solution |
|---|---|
get <jail> actions n'affiche que l'action de bannissement | Vous avez rechargé au lieu de redémarrer. Exécutez systemctl restart fail2ban. |
unknown smtpd restriction / jail ne démarre pas | Faute 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 / quota | Limite quotidienne de rapports atteinte pour votre forfait ; voir Authentification. |
| Aucune mention dans le journal concernant l’interdiction | L'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. |
Dernière mise à jour : · Géré par l'équipe ReportedIP