Protégez-vous des attaques BruteForce avec Fail2Ban !

Critères requis :

Fail2Ban est un utilitaire très pratique qui vous permet d'analyser les logs de votre serveur pour reconnaître les patterns récurrents d'échec vous permettant ainsi de bloquer les IPs essayant de BruteForcer votre serveur.

Nous verrons dans ce tutoriel la mise en place de Fail2Ban pour bloquer les tentatives de BruteForce sur SSH sur une distribution Ubuntu 14.04, mais ce logiciel peut servir pour tous les services générant des logs.

Installation

Rien de plus simple, une petite commande APT :

sudo apt-get install fail2ban

Configuration

Bien recevoir ses mails

Si vous avez suivi le tutoriel sur la mise en place de LogWatch, vous pouvez directement passer à l'étape suivante.

Sinon, procédez comme suit :

Si vous n'avez pas de serveur SMTP, il vous faudra installer postfix :

sudo apt-get install postfix

Lors de la configuration choisissez Internet Site.

Modifiez ensuite votre fichier /etc/aliases avec la ligne suivante :

root: monadresse@provider.tld

En adaptant bien évidemment avec l'adresse mail sur laquelle vous souhaitez recevoir les rapports.

Puis, activez le nouvel alias :

sudo newaliases

Fail2Ban

Nous allons commencer par copier le fichier de configuration :

cd /etc/fail2ban && sudo cp jail.conf jail.local

Le fichier jail.conf restera le fichier de configuration avec les paramètres de référence.
jail.local lui sera prioritaire sur jail.conf si des paramètres sont modifiés.

Nous ferons donc tous nos ajouts dans jail.local directement.

Éditez donc le fichier /etc/fail2ban/jail.local avec votre éditeur préféré.

Voici les paramètres que vous pourriez être amené à modifier :

ignoreip = 127.0.0.1/8 : Par défaut nous n'appliquons pas le filtrage sur les IPs localhost, s'auto-bannir n'aurait que peu d'intérêt.
Vous pouvez cependant rajouter vos propres IPs pour éviter d'être banni par erreur.

bantime = 600 : Le temps par défaut de bannissement d'une IP. 10 Minutes, donc, le temps étant exprimé en secondes. Je vous recommande d'augmenter cela à une heure, voire une journée.

findtime = 600 : Le temps dans lequel le maxretry est pris en compte. Si vous souhaitez par exemple bannir quelqu'un qui a fait plus de 3 essais infructueux sur la dernière heure, ou les dernières 10 minutes.

maxretry = 3 : Nombre d'essais avant d'être banni

destemail = root@localhost : À qui envoyer le mail ? Si vous avez suivi le début du tutoriel, vous pouvez laisser le paramètre en l'état, il fonctionnera correctement.

sendername = Fail2Ban : Qui envoie le mail ? La configuration par défaut devrait suffire.

action = %(action_)s : Cela permet de définir l'action à exécuter lorsqu'une limite est atteinte.
Par défaut, cela bloque juste l'utilisateur. Si vous souhaitez recevoir un e-mail à chaque bannissement, il vous faut utiliser :

action = %(action_mw)

Et si vous souhaitez que les logs soient inclus :

action = %(action_mwl)

Vient ensuite ce que l'on appel les “Jails”. Ce sont des blocks paramétrables par service pour filtrer les logs et bannir les méchants.

À minima, nous recommanderons d'activer la jail ssh comme suit :

[ssh]

enabled  = true
port     = ssh
filter   = sshd
logpath  = /var/log/auth.log

La syntaxe est plutôt claire. Nous commençons par activer la jail, par lui renseigner le port, le filtre, et le chemin vers le logs.

Les filtres sont des fichiers de configuration pré-faits indiquant de quelle manière il faudra parser le log pour savoir si c'est bien une tentative infructueuse, et récupérer l'IP qui en découle pour le bannissement.

Ils se trouvent dans /etc/fail2ban/filter.d.
Vous pouvez créer vos propres filtres au besoin.

Concernant le port, si vous avez fait écouter votre démon SSH sur plusieurs ports, ou sur un port différent, il vous faudra modifier la ligne port avec les bons paramètres.
Voici un exemple :

port    = ssh,2222

Ici, Fail2Ban analysera les logs et bannira les utilisateurs qui ont plusieurs essais infructueux sur les ports 22 (SSH par défaut) & 2222.


Une fois toutes ces modifications effectuées, vous pouvez redémarrer le service pour prendre en compte les changements :

sudo service fail2ban restart

Et tout devrait alors être bon. Vous pouvez consulter les logs de Fail2Ban dans /var/log/fail2ban.log.

Aller plus loin

Fail2Ban permet de faire bien plus de chose que cela. Vous pouvez modifier le type d'action à réaliser, lors d'une limite dépassée, le configurer sur de nombreux services, et même créer vos propres filtres !

Son seul inconvénient est qu'il ne supporte pas encore l'IPv6, bien que des patch existent pour cela.

N'hésitez pas à consulter la page de man et à visiter leur site officiel : http://www.fail2ban.org/wiki/index.php/Main_Page