Site icon BLD Web Agency

Fail2ban : Comment protéger un serveur Linux du brute force SSH

Fail2Ban est un outil permettant de bannir un utilisateur en fonction de règles prédéfinies. Il va par exemple bloquer l’IP d’un utilisateur après 3 tentatives de connexion SSH avec un mot de passe incorrect. Mais cet outil va beaucoup plus loin et permet par exemple de parser les logs Nginx ou Apache, d’identifier les IP à l’origine d’erreur 403 et bloquer ces dernières. Mais que se passe t’il une fois que la durée de blocage est écoulée ? Que l’IP en question des retirée du blocage ? Nous allons voir dans cet article comment bien configurer ses Jails de récidive.

Installation de Fail2Ban et mise en service

Dans un premier temps, nous allons installer Fail2ban et procéder à quelques configurations de base :

sudo apt-get install fail2ban
cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.conf.backup

Dans la configuration présentée ci-dessous, nous utiliserons l’action UFW pour bloquer les IP. La configuration de cette action est présente par défaut dans le paquet Fail2ban. Si vous souhaitez mettre en place des jails pour le service FTP, vous aurez besoin de créer un nouveau fichier sous /etc/ufw/applications.d/ftp-server :

[PROFTPd]
title=FTP Server PROFTPd
description=Fully fonctional FTP Server
ports=989,990,21,20/tcp
[VSFTPd]
title=FTP Server VSFTPd
description=Fully fonctional FTP Server
ports=989,990,21,20/tcp 

La commande vous permettant de tester que les nouveaux profils UFW sont créés est la suivante :

❯ ufw app info PROFTPd
Profile: PROFTPd
Title: FTP Server PROFTPd
Description: Fully fonctional FTP Server

Ports:
989,990,21,20/tcp

A ce stade, vous devriez avoir un Fail2Ban fonctionnel avec une configuration minimale vous permettant de protéger le port SSH de votre serveur avec 4 jails de récidives. Pour visualiser l’état de Fail2ban et lister les jails :

❯ fail2ban-client status
Status
|- Number of jail: 5
`- Jail list: recidive, recidive2, recidive3, recidive4, sshd

Pour vérifier l’état de la Jail SSH par exemple :

❯ fail2ban-client status sshd
Status for the jail: sshd
|- Filter
| |- Currently failed: 1
| |- Total failed: 20
| `- File list: /var/log/auth.log
`- Actions
|- Currently banned: 6
|- Total banned: 6
`- Banned IP list: 190.104.146.136 193.106.191.150 188.34.195.145 159.89.226.10 124.239.168.74 73.126.174.11

Détails de la configuration

Vous avez désormais une configuration pleinement fonctionnelle avec :

Cette configuration a été testée et est totalement fonctionnelle. Elle permet de laisser un peu de répit aux erreurs humaines, tout en étant stricte sur le blocage des nerveux.

Protéger son serveur FTP avec Fail2Ban

Si vous disposez d’un serveur FTP ProFTPD ou vSFTPd des jails sont disponibles et commentées dans le fichier jail.local. Pour activer ces jails, décommentez simplement le bloc souhaité :

# [proftpd]
# enabled = true
# port = ftp,ftp-data,ftps,ftps-data
# action = ufw[application="PROFTPd",blocktype=reject]
# bantime = 3600
# findtime = 300
# maxretry = 3
# [vsftpd]
# enabled = true
# port = ftp,ftp-data,ftps,ftps-data
# logpath = %(vsftpd_log)s
# action = ufw[application="VSFTPd",blocktype=reject]
# bantime = 3600
# findtime = 300
# maxretry = 3

Protéger son serveur Web Nginx avec Fail2Ban

De nombreuses jails pour protéger Nginx sont disponibles. Elles permettent par exemple de réduire le nombre de requêtes en définissant un taux limite, de bloquer les utilisateurs cherchants à exécuter des scripts à votre insu ou de bloquer les bots connus qui essayeraient des patterns pré-définis. Voici les jails :

## Blocage des tentatives de connexion sur Nginx
# [nginx-http-auth]
# enabled = true
# filter = nginx-http-auth
# action = ufw
# port = http,https
# logpath = /var/log/nginx/error.log
# bantime = 3600
# findtime = 300
# maxretry = 3

## Blocage des tentatives d'exploitation de script sur Nginx
# [nginx-noscript]
# enabled = true
# port = http,https
# filter = nginx-noscript
# action = ufw
# logpath = /var/log/nginx/access.log
# bantime = 3600
# findtime = 300
# maxretry = 6

## Blocage de chaînes de requêtes provenant de bots connus / malveillants
# [nginx-badbots]
# enabled = true
# port = http,https
# filter = nginx-badbots
# action = ufw
# logpath = /var/log/nginx/access.log
# bantime = 3600
# findtime = 300
# maxretry = 2

## Limitation du nombre de requêtes 
# [nginx-req-limit]
# enabled = true
# filter = nginx-req-limit
# action = ufw
# action = iptables-multiport[name=ReqLimit, port="http,https", protocol=tcp]
# logpath = /var/log/nginx/*error.log
# findtime = 600
# bantime = 7200
# maxretry = 10

Les possibilités avec Fail2Ban sont infinies, si vous creusez un peu, vous pourrez créer vos propre filtres, vos actions personnalisées et les jails qui vont avec. Si vous vous intéressez à la sécurité, n’hésitez pas à fouiller dans nos articles similaires.

Quitter la version mobile