Aller directement au contenu principalAller directement au pied de page

Intégration de fail2ban

Transférez chaque adresse IP bannie par fail2ban sur votre serveur vers la liste noire de ReportedIP . Une petite action personnalisée appelle l'API de signalement à chaque bannissement, de sorte 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 zone DNS/RBL.

Vous avez besoin d'une clé API avec le report autorisation. Créez-en une gratuitement dans votre tableau de bord; voir Authentification en matière de limites. N'indiquez que les adresses IP que votre propre serveur a effectivement détectées.

Comment fonctionne fail2ban (en 30 secondes)

fail2ban surveille les fichiers journaux (ou le journal systemd). A filtre correspond aux modèles d'attaque, un prison compte le nombre de correspondances par adresse IP au sein de findtime, et dès qu'une adresse IP est détectée maxretry la prison gère son actions (bannissement + tout ce que vous ajoutez). Nous ajoutons une deuxième action qui signale l'adresse IP bannie à ReportedIP.

1. Créer l'action de rapport

Enregistrer sous /etc/fail2ban/action.d/reportedip.conf. À chaque blocage, il envoie une requête POST contenant l'adresse IP bloquée, les catégories de menaces et un bref commentaire à l'endpoint de signalement.

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.de/wp-json/reportedip/v2/report
api_key    = <your-api-key>
categories = 18,22

Restriction des droits d'accès 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és par fail2ban ; <api_key>, <categories> et <report_url> proviennent de [Init] bloc.

2. L'activer sur une cellule

Ajouter l'action à une prison dans /etc/fail2ban/jail.localen plus de la mesure d'exclusion habituelle (%(action_)s), et non à la place de celui-ci :

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

Vous pouvez redéfinir les catégories pour chaque prison en les spécifiant directement dans le code, par exemple : reportedip[categories="16,21"] sur une instance d'application web.

3. Appliquer et vérifier

Ajouter un nouveau Cette opération nécessite un redémarrage complet — fail2ban-client reload fait pas fixez-le solidement. 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

Consulter le journal de fail2ban

les journaux de fail2ban vers /var/log/fail2ban.log (ou la revue : journalctl -u fail2ban). Les lignes qui vous intéressent :

journal
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
SynopsisSignification
Found <ip>Le filtre a détecté une tentative d'attaque. L'utilisateur n'a pas encore été banni.
Ban <ip>Seuil atteint — le jail a exécuté ses actions, y compris l'envoi du rapport à ReportedIP.
Unban <ip>bantime Le délai s'est écoulé ; la règle de pare-feu a été supprimée (aucun rapport).
Restore Ban <ip>fail2ban a redémarré et a réappliqué une interdiction toujours en vigueur.

Le rapport lui-même ne fait aucune mention de la réussite (-o /dev/null). Pour surveiller l'envoi des rapports, suivre le journal pendant les tests ou exécuter l'action curl manuellement pour une seule adresse IP — une opération réussie affiche le nouveau rapport :

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.de/wp-json/reportedip/v2/verify-key et lire limits.dailyReportUsage, ou ouvrez le tableau de bord.

Choix des catégories de menaces par prison

Transmettez les identifiants de catégorie correspondant à ce que la prison détecte. Mappages courants (liste complète dans Catégories de menaces) :

PrisoncategoriesSignification
sshd18,22Force brute, SSH
postfix-sasl, dovecot11,18Courriels indésirables, attaques par force brute
proftpd, vsftpd5Attaque par force brute sur FTP
nginx-http-auth, apache-auth18,21Attaque par force brute, attaque contre une application web
nginx-badbots, apache-badbots14,19Analyse de ports, bot web malveillant
apache-sqli, failles de sécurité sur le Web16,21Injection SQL, attaque d'application web
WordPress / wp-login18,21Attaque par force brute, attaque contre une application web
recidive (récidivistes)15,18Piratage, attaque par force brute

Déclarer plusieurs établissements pénitentiaires

Associez l'action à chaque prison et remplacez les catégories directement dans le code afin que chaque rapport soit exact :

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é

  • Signalez uniquement les interdictions qui vous concernent. Ne signalez jamais des adresses IP que vous n'avez pas constatées en train d'attaquer vos propres systèmes : les faux signalements nuisent à la qualité de l'ensemble de données (et peuvent entraîner la suspension de votre clé).
  • Ajoutez vos propres plages à la liste blanche. Conserver ignoreip Configurez les adresses IP de votre bureau et de vos systèmes de surveillance afin de ne jamais vous signaler vous-même.
  • Ne divulguez pas votre clé (chmod 600). Il n'est pas accessible aux pirates, mais toute personne en possession de ce fichier peut envoyer des rapports en se faisant passer pour vous. En cas de fuite, modifiez-le depuis le tableau de bord.
  • Un signalement rejeté n'empêche jamais une exclusion. Le || : à la fin de actionban signifie qu'un problème de réseau au niveau de ReportedIP empêchera ReportedIP fail2ban de bloquer l'accès localement.
  • Des seuils raisonnables. Très faible maxretry les jails bruyantes peuvent surestimer le nombre de clients temporaires ; les valeurs par défaut (3–5) conviennent parfaitement.

Dépannage

SymptômeCorriger
get <jail> actions n'affiche que la mesure d'exclusionVous avez actualisé la page au lieu de la recharger. Exécutez systemctl restart fail2ban.
unknown smtpd restriction / jail ne démarre pasFaute de frappe dans la configuration jail.local; vérifiez l'indentation de la ligne suivante sous action.
Rapports rejetés (HTTP 401/403)La touche manquante report des droits d'accès incorrects ou un en-tête erroné — il doit être X-Key.
HTTP 429 / quotaLa limite quotidienne de rapports a été atteinte pour votre forfait ; consultez la section « Authentification ».
Rien dans le journal concernant l'interdictionLe rapport ne mentionne pas si l'opération a abouti. Vérifiez auprès de fail2ban-client get <jail> actions et un manuel curl.
Vous souhaitez également bloquer l'utilisation des données de la communauté ? Importez le flux de la liste noire dans nftables/ipset, ou, pour les serveurs de messagerie, interrogez la zone DNS/RBL.
Axé sur la sécurité
Conforme au RGPD
Fabriqué en Allemagne
Retour à la documentation