Serveur dédiés : bloquer les ips qui scannent les vulnérabilités web avec fail2ban

Dans les logs de mon serveur j’ai des milliers de lignes qui correspondent à des analyses de vulnérabilités.
Les serveurs concernés essayent de lire le contenu des fichier .env , de l’admin wordpress … 
Voici une capture d’illustration : 

Attention à bien identifier les élément à bloquer sinon vous pouvez bloquer du traffic légitime !

Nous allons voir comment bloquer ces ips dès leur première tentative.
Pour cela nous allons utiliser fail2ban, si besoin de l’installer, cet article est assez ancien mais toujours fonctionnel. : Sécuriser votre serveur dédié : installation de fail2ban 

Pour commencer nous allons créer une nouvelle règle « apache-scan » qui sera stockée dans le fichier /etc/fail2ban/filter.d/apache-scan.conf
Et dans ce fichier nous allons mettre en place toute nos règles d’exclusion.
Dans mon cas je n’ai pas de site wordpress, du coup je bloque toutes les tentatives de récupération de contenu wordpress.
Ainsi qu’un certain nombre d’autres patterns que je retrouve dans mes logs.
Cette règle n’est pas exhaustive et devra être complétée au fur et à mesure.

[Definition]
failregex = ^ -.*"(GET|POST).*wp-login\.php
            ^ -.*"(GET|POST).*xmlrpc\.php
            ^ -.*"(GET|POST).*wp-admin
            ^ -.*"(GET|POST).*wp-content
            ^ -.*"(GET|POST).*wp-includes
            ^ -.*"(GET|POST).*/wp-json
            ^ -.*"(GET|POST).*/wp-cron\.php
            ^ -.*"(GET|POST).*/administrator
            ^ -.*"(GET|POST).*/typo3
            ^ -.*"(GET|POST).*/vendor/phpunit
            ^ -.*"(GET|POST).*/owa
            ^ -.*"(GET|POST).*/\.git
            ^ -.*"(GET|POST).*/\.svn
            ^ -.*"(GET|POST).*/docker/
            ^ -.*"(GET|POST).*/aws
            ^ -.*"(GET|POST).*/\.env
            ^ -.*"(GET|POST).*/composer\.json
            ^ -.*"(GET|POST).*/package\.json
            ^ -.*"(GET|POST).*/config\.php

Il faut ensuite activer la règle en créant le fichier /etc/fail2ban/jail.d/apache-scan.conf avec le contenu suivant 
En complétant les fichiers de logs à analyser.
Cette configuration va bannir pour 24h chaque ip qui va tenter d’accéder à une url qui fait partie du pattern détaillé plus haut.

[apache-scan]
enabled  = true
port     = http,https
filter   = apache-scan
logpath  = /var/log/apache2/access.log
           /var/log/apache2/other_vhost_access.log
maxretry = 1
bantime  = 86400
findtime = 600

Pour finir il est nécessaire de recharger fail2ban pour prendre en compte la configuration.

sudo systemctl restart fail2ban

Si tout est bon après quelques heures on pourra constater que des ips sont bien bloquées par fail2ban.
Que ce soit via un monitoring via munin ( cf. capture plus bas ), ou via la console en saisissant la commande : sudo fail2ban-client status apache-scan

Laisser un commentaire

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