16/05/2024

Pare-FeuServices

Bannir les IP avec Fail2ban, comment ça marche chez Cloudflare

I. Présentation

Pour ceux qui se servent de Cloudflare comme proxy, voici comment on peut configurer Fail2ban pour bannir automatiquement les IP attaquantes de son serveur.

- Créer un fichier d’action spécifique pour Cloudflare
- Régler ses "jails" pour envoyer les bans à Cloudflare

Le problème quand on a un site Internet qui propose des services, c’est de devoir souffrir des sollicitations de ses confrères, en plus d’un assez grand nombre d’attaques sur un petit blog WordPress en apparence inactif. Cela ne correspond évidemment pas à la réalité, le nombre de personnes qui ne demandent qu’à obtenir plus de commentaires sur leur blog ou amorcer la réaction d’autant d’internautes sur leur propre site est évidemment proche de 100%. Mais cela ne me laisse guère de temps pour enrichir le mien…

II. Créer un fichier d’action spécifique pour Cloudflare :

Fail2ban me permet désormais de monitorer en grande partie des accès, à distance sur le protocole HTTP, ce qui se révèle essentiel lorsqu’on a une activité sur le Web. De base, les "jails" en rapport avec le serveur Apache sont désactivées, ce qui ne me gêne pas personnellement, puisque j’utilise NginX. De même, les requêtes sur mon blog passent par CloudFlare, et ce n’est pas prévu dans le programme… La première étape passe donc par la mise en œuvre d’une action spécifique pour avertir Cloudflare d’une IP à bannir, et de l’activer dans une nouvelle "jail". J’ai trouvé sur Internet un fichier d’action qui va bien et je l’ai recopié dans action.d :

# Author: Mike Rushton
# Referenced from from http://www.normyee.net/blog/2012/02/02/adding-cloudflare-support-to-fail2ban by NORM YEE
# To get your Cloudflare API key: https://www.cloudflare.com/my-account

[Definition]
actionstart =
actionstop =
actioncheck =
actionban = curl https://www.cloudflare.com/api_json.html -d 'a=ban' -d 'tkn=< cftoken >' -d 'email=< cfuser >' -d 'key=< ip >'
actionunban = curl https://www.cloudflare.com/api_json.html -d 'a=nul' -d 'tkn=< cftoken >' -d 'email=< cfuser >' -d 'key=< ip >'

[Init]
# Default Cloudflare API token
cftoken = VOTRE CLÉ API CLOUDFLARE

# Default Cloudflare username
cfuser = L'ADRESSE EMAIL DE VOTRE COMPTE CLOUDFLARE

Pour voir (ou revoir) comment marche le logiciel, l’installer correctement et le configurer, n’hésitez pas à consulter, voire même ouvrir les Premiers pas avec Fail2ban dans une nouvelle fenêtre, car c’est un prérequis… Les actions supplémentaires comme celle-ci doivent ensuite être formulées au programme de Fail2ban dans jail.local (ou jail.conf si vous avez écrit vos règles par-dessus les "jails" d’origine). Comme vous l’avez remarqué, les requêtes envoyées à Cloudflare le sont par le biais de cURL, et il faut que ce programme soit installé au préalable sur votre serveur… À chaque fois qu’une IP est contrôlée positive dans le filtre, Fail2ban envoie avec cURL une requête qui prend 4 paramètres :

1. L’action à entreprendre : ban, wl (whitelist), nul (unban) ;

2. L’IP à traiter ;

3. Votre clé API Cloudflare ;

4. L’email dont vous vous servez pour vous connecter à votre compte.

III. Régler ses "jails" pour envoyer les bans à Cloudflare :

Maintenant, on va créer des "jails" spécifiques à partir du format de celles qui nous sont présentées par défaut dans jail.conf :

[apache-noscript]

enabled = false
port = http,https
filter = apache-noscript
logpath = /var/log/apache*/*error.log
maxretry = 6

[fail2ban-filter]
enabled = true
port = http
filter = fail2ban-filter
action = cloudflare-action[name=fail2ban-filter, port="http", protocol="tcp"]
sendmail-whois-lines[name=fail2ban-filter, dest="[email protected]", logpath="/var/log/apache*/example.error.log"]
logpath = /var/log/apache*/example.error.log
maxretry = 3
bantime = 2419200

On voit en comparant les règles 1 et 2 que j’ai nommées fail2ban-filter que l’appel à Cloudflare nécessite une instruction spécifique pour l’action, car elle est différente de celle qui est proposée par défaut, au début du fichier. Dans l’exemple que je donne, j’ai en plus superposé plusieurs actions, qui sont exécutées les unes à la suite des autres. Dans mon cas :

1. Un appel à l’action chez Cloudflare

2. Un envoi de courrier électronique.

Les différentes actions sont libellées séparément avec un retour chariot et une tabulation (pour faire joli). L’action à faire passer chez Cloudflare est caractérisée par le nom du fichier d’action spécifique à Cloudflare, qui va référencer le nom du filtre, et éventuellement d’autres informations, telles que le port et le protocole. Rien de très différent en somme, par rapport à d’autres actions à effectuer, mais de façon différente de celles qui le sont par défaut. Ainsi, l’envoi de courrier électronique référence aussi le filtre, le destinataire et le journal (d’erreur ou d’accès) que considère le filtre en question. Chez Cloudflare, les bans sont interceptés grâce aux requêtes en cURL de votre serveur, de la façon suivante :

input: curl https://www.cloudflare.com/api_json.html \
-d 'a=wl' \
-d 'tkn=8afbe6dea02407989af4dd4c97bb6e25' \
-d '[email protected]' \
-d 'key=0.0.0.0' \

output: {
"response": {
"result": {
"ip": "[IP]",
"action": "WL"
}
},
"result": "success",
"msg": null
}

On termine en rechargeant la configuration de Fail2ban :

service fail2ban reload

Pour conclure avec une image et abréger le discours, voici celle que vous aurez la satisfaction d’observer sur le panneau "Thread Control" de votre compte Cloudflare, avec la liste des IP attaquantes qui ont été bannies, de manière complètement automatique, et sans plus d’intervention de la part de l’administrateur du serveur…

cloudflare-banned
Aperçu des IP bannies sur l'interface Cloudflare

Quand le délai du ban arrive à terme, un autre appel sera effectué par Fail2ban à Cloudflare, pour lui demander de déréférencer l’IP concernée par le ban. Fail2ban est un logiciel réellement intéressant quand on pousse la configuration, et on peut même pousser un peu plus loin encore…

À vous d’essayer maintenant !

author avatar
Philippe Gras
Se met à votre disposition pour finaliser vos projets d’entrepreneur sur le Web : commentaires de blog et de fiches Wikipédia pour du bon SEO, du bonnet et du branding, configuration DNS, développement d’extensions et de blogs Wordpress.
Partagez cet article Partager sur Twitter Partager sur Facebook Partager sur Linkedin Envoyer par mail

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.