Protéger votre serveur des tentatives d’intrusions avec Fail2ban.

Fail2ban lit les fichiers de log et bannit les adresses IP qui ont obtenu un trop grand nombre d’échecs lors de l’authentification. Il peut mettre à jour les règles du pare-feu pour rejeter cette adresse IP. Fail2ban peut lire plusieurs fichiers de log comme ceux de sshd ou du serveur Apache entre autre.

Installation de Fail2Ban.

On peut créer des prisons par services (ssh, http, …), on renseigne quelques informations (fichier de log, filtre à appliquer, …) et lorsque le filtre trouve une concordance, une action est réalisée (bannissement, mail, whois, …).

Le tutoriel est réalisé sur Ubuntu Server.

Pour installer le logiciel il suffit d’utiliser la commande suivante :

#sudo apt-get install fail2ban

Fail2ban_2

Le répertoire Fail2ban contient les fichiers et répertoires suivants :

  • action.d : contient les actions à mettre en oeuvre à un tentative d’intrusion
  • filter.d : contient les expressions régulières permettant de parser les logs d’un service donné
  • jail.conf : Contient les paramètres de chacun des services surveillés (bantime, maxretry, mail etc…). Ce fichier n’est plus à modifier directement. Nous activerons les jails dans ce fichier /etc/fail2ban/jail.d/defaults-debian.conf.
  • fail2ban.conf : Le fichier de configuration global qui se trouve dans/etc/fail2ban/fail2ban.conf ne contient pas grand chose à modifier. Vous pourrez paramétrer l’endroit où Fail2Ban doit enregistrer ses logs, la verbosité de ces derniers et modifier quelques réglages réglages du socket Unix. En ce qui me concerne, je ne touche à rien.

Surveiller les connexions SSH.

Pour surveiller les connexions SSH, nous allons éditer le fichier /etc/fail2ban/jail.d/defaults-debian.conf pour activer les prisons. Que se soit pour SSH, Apache ou d’autres logiciels toutes les activations des jails se font dans ce fichier.

Comme c’est la première fois que vous éditer le fichier, nous allons paramétrer les options communes à toutes les prisons.

Paramètres communs à tous les jails de Fail2ban

  • destemail saisissez ici l’adresse email qui recevra les alertes
  • sender permet d’afficher le nom de la personne qui envoie le mail
  • igonoreip permet d’autoriser des adresses spécifique, il est important à configurer pour éviter de se faire bannir de son propre serveur. Vous pouvez rajouter d’autres ip en laissant un espace entre.
Vous pourrez personnaliser ces paramètres dans chaque section de jails du fichier. Si par exemple vous souhaitez envoyer des alertes sur une adresse mail spécifique pour le SSH, il suffira de l’indiquer dans la section SSH du fichier.

Maintenant pour activer les protections sur le SSH, voici comment les déclarer.

Activation du Jail SSH sur un serveur Linux avec Fail2ban

Pensez bien à parcourir les filtres prédéfinis dans le répertoire filter.d afin de voir ce qui existe par défaut et activez ou non des jails selon vos besoins.

Liste des filtres par défaut dans le répertoire filter.d de Fail2ban

Je viens d’activer les jails sshd et sshd-ddos, mails il est possible d’ajouter et de personnaliser d’autres options pour les jails. SI vous ne mettez rien, c’est les paramètres par défaut du fichier jail.conf qui s’applique.

  • maxretry nombre d’essais autorisés pour une connexion avant d’être banni
  • findtime permet de spécifier le laps de temps pendant lequel on considère les occurrences (au delà de findtime, on repart à zéro)
  • bantime définit le temps que l’ip restera bloquée via Fail2Ban
  • port permet de préciser les ports à bloquer
  • logpath indique le fichier de log à analyser

exemple de paramètres pour le jail sshd et sshd-ddos de Fail2ban

Maintenant que vous avez paramétrer  votre première prison pour le SSH, vous devez redémarrer le service.

# service fail2ban restart

Puis on s’assure que toutes les prisons soient bien en service :

# fail2ban-client status

Vérifier que toutes les prisons soient bien en service avec la commande fail2ban-client status

Test de la configuration.

Il est important avant d’enregistrer la configuration, de vérifier que tout est fonctionnel. L’idéal étant de tester sur le fichier auth.log (du moins pour le SSH) en ayant des entrées avec des intrus par exemple.

Cette commande va vous être utile si vous créer vos propres jail. Vous pourrez tester vos regex pour savoir si elles trouvent bien les éléments recherchés.

Pour cela vous devez utiliser la commande suivante :

fail2ban-regex <chemin_de_log> <chemin_du_filter> <argument_affichage>
fail2ban-regex /var/log/auth.log /etc/fail2ban/filter.d/sshd.conf

texter la configuration de sa configuration pour les jails avec l'utilitaire fail2ban-regex

Les commandes de base de l’utilitaire fail2ban-client.

Voici une liste de commandes de bases que vous allez sûrement utiliser avec Fail2ban. Si la plupart d’entre elles se passent d’explications, attardons nous sur :

  • start : Lance le serveur et les jails.
  • reload : Recharge la configuration.
  • reload <JAIL> : Recharge la configuration d’une jail uniquement.
  • stop : Arrête le serveur.
  • status : Retourne le statut du serveur : nombre de jails, filtres, nombres de fails…
  • ping : Permet simplement de s’assurer que le serveur répond.
  • -h : Retourne l’ensemble des commandes possibles et qui ne sont pas listées ici.

Commande fail2ban-client status pour visualiser les jails ou prisons actives et ping pour vérifier si le serveur est toujours en vie

Fail2Ban possède une base de données interne en SQLite. Cette base permet de stocker les informations entre les redémarrages, notamment les ips à bloquer et de recréer les règles iptables au démarrage.

  • set dbfile : Définir la localisation de la base de données.
  • set dbpurgeage : Définit la durée de rétention des informations dans la base de données.
  • get dbfile : Retourne le chemin de la base de données.
  • get dbpurgeage : Récupère le nombre de secondes de rétentions des informations en base de données de la configuration actuelle.

Commande fail2ban-client pour récupérer des informations sur la base SQL de Fail2ban

Surveiller en direct le bannissement des IP.

Grâce à la commande ci-dessous, vous allez pouvoir suivre les IP qui scannent votre serveur sur Internet (et je dois dire que c’est assez impressionnant).

# tail -f /var/log/fail2ban.log

Surveiller en direct le bannissement des IP avec Fail2ban

Créer un rapport journalier des IP bannies.

Fail2ban permet d’envoyer un mail lorsqu’une IP est bannie. Au bout de quelques jours et lorsque votre boite aux lettres sera saturée par 3000 mails vous n’utiliserez plus cette fonctionnalité pourtant bien pratique pour savoir ce qui se passe sur votre serveur.

Dans ce tutoriel nous allons mettre en place un rapport quotidien avec toutes les IP qui ont essayé d’attaquer votre serveur. 1 seul mail qui va recenser toutes les attaques de la journée. pas mal non !

La première étape consiste à créer un fichier mail-daily.conf dans /etc/fail2ban/action.d/ avec le code suivant :

# Fail2Ban configuration file
#
# Author: Guillaume REYNAUD
# Version: 1.0 (04/12/2019)
# Web: https://quick-tutoriel.com
# Source: https://kdecherf.com/
#

[Definition]

actionstart = echo -en "***** Fail2Ban *****\n\nNotification Type: RECOVERY\n\nService: <name>\nHost: <server>\nAddress: <serverip>\nState: STARTED\n\nDate/Time: `date`\n\nAdditional Info:\n\n" | mail -a "From: <from>" -s "** RECOVERY alert - <server>/<name> jail is STARTED **" <dest>

actionstop = echo -en "***** Fail2Ban *****\n\nNotification Type: ALERT\n\nService: <name>\nHost: <server>\nAddress: <serverip>\nState: STOPPED\n\nDate/Time: `date`\n\nAdditional Info:\n\n" | mail -a "From: <dest>" -s "** ALERT alert - <server>/<name> jail is STOPPED **" <dest>

actioncheck =

actionban = echo `date | awk -F ' ' '{print $4}'`" - <ip> (<failures> attempts against <name>)" >> <tmpfile>

actionunban =

[Init]

tmpfile = /temp/fail2ban-mail.txt

# default dest
dest = root

Concrètement à chaque fois que le service Fail2ban s’arrêtera et/ou redémarrera vous recevrez un mail (actionstart et actionstop).

Ensuite lorsqu’une IP sera bannie au lieu de vous envoyer un mail à chaque fois, l’IP sera enregistrée dans un fichier temporaire appelé fail2ban-mail.txt se trouvant dans le répertoire /temp/ de votre serveur (tmpfile) avec quelques infos : IP, service attaqué et tentatives.

La deuxième étape consiste à activer les mails dans les jails (=prisons) que l’on souhaite. Maintenant Il faut aller dans le répertoire /etc/fail2ban/jail.d, puis éditer le fichier defaults-debian.conf.

Toujours faire une copie du fichier de production avant de faire des modifications dans celui-ci

Attention!!! Avant toute modification sur des fichiers de production, je vous conseille avant de faire une sauvegarde de celui-ci. Par exemple je renomme systématiquement le fichier en nom-fichier.conf.date
# cp defaults-debian.conf defaults-debian.conf.20191204

Activation de l'alerte mail pour les jails dans Fail2ban

  • 1 : Afin que le script s’exécute correctement vous devez paramétrer 4 variables qui sont fromt (Nom de l’expéditeur), servert (Nom du serveur concerné par l’attaque), serveript (adresse ip publique du serveur) et emailt (adresse mail de destination).
  • 2: Dans chaque jail, vous devez rajouter une ligne action en précisant bien quelle action vous choississez, ici c’est mail-daily, le fichier que nous avons créé précédemment. Pour l’instant je n’active les mails que pour le SSH.
# action = mail-daily[name=SSH, dest=%(emailt)s, from=%(fromt)s, server=%(servert)s, serverip=%(serveript)s]

La troisième étape consiste à créer un script bash qui va générer le rapport. Eh oui le rapport n’est pas réalisé par Fail2ban mais par un script.

Vous devez créer votre script dans /etc/fail2ban/action.d/. Le script porte le nom report-mail-daily.sh.

#!/bin/sh

SERVER="Server_Name"
IP="Server_IP"
FROM="Fail2ban "
TO="Mail"

TMP=/temp/fail2ban-mail.txt

if [ -f $TMP ]; then
echo "***** Fail2Ban *****\n\nNotification Type: INFO\n\nService: *\nHost: $SERVER\nAddress: $IP\nState: OK\n\nDate/Time send of report : `date +"%d-%m-%Y %H:%M:%S"`\n\nAdditional Info:\n\nThese hosts have been banned on `date --date '1 days ago' +"%a %d %b"`\n`cat $TMP`" | mail -a "From: $FROM" -s "** INFO alert - $SERVER ($IP) jail REPORT **" $TO
rm $TMP
fi

Attention!!! Vous devez rendre exécutable votre script bash pourqu’il soit exécuté par Linux avec la commande chmod u+x puis le nom de votre script

Créer un rapport journalier avec les adresses IP qui ont essayés de hack ton serveur

  • 1: Pour que le script fonctionne vous devez paramétrer 4 variables qui sont FROM (Nom de l’expéditeur), SERVER (Nom du serveur concerné par l’attaque), IP (adresse ip publique du serveur) et TO (adresse mail de destination).
  • 2: Indiquer le chemin ou se trouve le fichier .txt contenant les IP bloquées du jour.
  • 3: Si aucun fichier n’est présent, aucun mail n’est envoyé. Il faut savoir que lorsque le mail est envoyé le fichier .txt est supprimé.

La dernière étape consiste à créer une tâche planifiée pour envoyer le rapport 1 fois par jour.

Création d’une tâche CRON pour envoyer le rapport journalier.

  • Si vous souhaitez voir les tâches CRON en cours sur votre système vous pouvez utiliser cette commande :
# crontab -l
  • Si vous souhaitez éditer ou ajouter une tâche CRON :
# crontab -e

Créer une tâche CRON sous ubuntu pour envoyer un rapport journalier des attaques recensées par Fail2ban

Dans le fichier CRON, j’ai rajouté une ligne qui permet d’envoyer tous les jours à 6 heures du matin le rapport journalier des attaques sur mon serveur VPS, avec la tâche CROM suivante (1) :

# 0 6 * * * /etc/fail2ban/action.d/report-mail-daily.sh > /dev/null

Pour prendre en compte toutes ces modifications, vous devez redémarrer le service Fail2ban.

Maintenant à 6 heures du matin, vous recevrez un mail avec toutes les IP bannies pendant la journée par prison (jail).

Rapport journalier des IP bloquées par Fail2ban.

That’s All.

Laisser un commentaire

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