Sécuriser ses machines avec l’aide de fail2ban

De nos jours les connexions plus importantes, le niveau d’informatique des « gamins » augmente, les logiciels de bruteforce de plus en plus répandus sur la toile nous posent à nous administrateurs système des problèmes. Il suffit d’attaquer un serveur par bruteforce avec quelques milliers d’essais par minutes pour le faire pédaler dans la semoule et inpacter les conditions d’utilisateurs de nos clients. Depuis quelques années le nombre de ces attaques n’ont pas cessé d’augmenter et tous les services sont impactés : SSH, Apache, FTP, Mails, Asterisk … Pour se protéger de ces attaques malveillantes il existe une solution qui consiste à bannir totalement un utilisateur après un nombre de tentatives échouées (vous pouvez le paramétrer en fonction du service à protéger). Cette solution s’apelle fail2ban, elle est appuyée par l’utilisateur de NetFiler/Iptables. Son interface est au départ un peu compliquée mais on s’y fait très vite. En quelques jours il devient possible de paramétrer fail2ban sur l’ensemble de son parc de serveurs.

1. Fonctionnement

Le principe de fail2ban est relativement simple, on le configure en lui donnant un fichier de log à analyser goutte à goutte, une ou plusieurs expressions régulières pour un service, le nombre d’essais maximum pour chaque service et hop le tour est joué 🙂 De base fail2ban intègre une bonne vingtaine de filtres qui vont surveiller les services les plus utilisés (Apache, proftpd, open-ssh, Qmail, Postfix … Mais ce qui rend encore plus puissant fail2ban c’est la possibilité de créer ses propres filtres ! Suivez le guide !

2. Architecture de fail2ban

Fail2ban est composé de deux parties, le client et le serveur.

Serveur fail2ban : Le serveur est multitâche, il écoute sur un socket Unix et attend des instructions de la part du client. Il n’utilise pas les fichiers de configuration.

[nice_info]La commande fail2ban-server ne doit pas être utilisée directement sauf en cas de debug[/nice_info]

Options de la commande fail2ban-server :

Option Description
-b Lance le serveur en arrière-plan
-f Lance le serveur au premier plan
-s <FICHIER> Spécifie le chemin du socket Unix
-x Force l’exécution du serveur (Supprime le socket au démarrage si il existe)
-h, –help Affiche ce message d’aide
-V, –version Affiche la version de fail2ban

_______________________________

Client fail2ban : C’est l’interface qui va envoyer les commandes au serveur fail2ban, il se connecte à celui-ci via le socket Unix et lui pousse les commandes pour la configuration.

Options de la commande fail2ban-client :

Option Description
-c <DIR> Indication sur le chemin de la configuration
-s <CHEMIN> Indication du chemin jusqu’au socket
-d Dump de la configuration pour le debug
-i Mode interactif
-v Mode verbeux
-q Mode silencieux
-x Force l’exécution du serveur (Supprime le socket au démarrage si il existe)
-h, –help Affiche ce message d’aider
-V, –version Affiche la version de fail2ban

Vous pouvez aussi passer des commandes à fail2ban :

Commande Description
start Démarre le serveur et les « jails »
start Active le « jail » spécifié en paramètre
reload Recharge la configuration
reload <JAIL> Recharge la configuration du « jail » spécifié en paramètre
stop Arrête tous les « jails » et le démon fail2ban
stop <JAIL> Désactive le « jail » spécifié en paramètre
status Donne la liste des « jails » actifs
status <JAIL> Donne le statut du « jail » spécifié

Une fois de plus les commandes citées font partie d’une liste, pour plus d’informations, RTFM ! fail2ban-client –help

3. Installation

L’installation est simple, nous allons installer fail2ban via un dépôt de paquets mais libre à vous si vous souhaitez le bon vieux make 😉

Voici la commande pour ma distribution favorite (Debian) :

aptitude install fail2ban

Voilà c’est installé, passons à la suite.

4. Premiers pas

Les fichiers de configuration de fail2ban sont situés dans le répertoire /etc/fail2ban.

Configuration générale : /etc/fail2ban/fail2ban.conf. C’est lui qui permet de configurer le démon.

[Definition]
 
loglevel = 3
#Défini le niveau le log, 1: Erreurs, 2: Warning, 3: Info, 4: Debug
 
logtarget = /var/log/fail2ban.log
#Cible de journalisation, Un fichier, STOUT, STDERR, STDOUT ou SYSLOG
 
socket = /var/run/fail2ban/fail2ban.sock
#Chemin du Socket

Configuration de la surveillance des services : /etc/fail2ban/jail.conf

C’est dans ce fichier que l’on défini les services à surveiller. D’une manière globale vous avez un bloc ou définir des options générales qui pourront êtres reprises dans chacun des blocs de services.

[DEFAULT]
 
ignoreip = 127.0.0.1
bantime  = 600
maxretry = 3
Paramètre Description
ignoreip Permet de préciser des adresses IP qui ne seront jamais bannies (Adresse IP, sous réseau, nom dns).
bantime Temps de bannisement de l’hôte, -1 permet de bannir sur une durée infinie.
maxretry Nombre de tentatives échouées avant bannissement.

Un service à surveiller est défini par une prison (un jail). Un jail est un bloc qui défini comment fail2ban doit réagir :

[ssh]
 
enabled = true
port    = ssh
filter  = sshd
logpath  = /var/log/auth.log
maxretry = 6
 
[apache]
 
enabled = false
port    = http,https
filter  = apache-auth
logpath = /var/log/apache*/*error.log
maxretry = 6
 
[postfix]
 
enabled  = false
port     = smtp,ssmtp
filter   = postfix
logpath  = /var/log/mail.log
Paramètre Description du paramètre
enabled Spécifier si la prison est activée (true: active, false:inactive)
port Spécifie le ou les port(s) du service
filter Spécifie le filtre à utiliser (les filtres sont dans /etc/fail2ban/filter.d/
logpath Spécifie le chemin du fichier de log du service
maxretry Nombre de tentatives échouées avant bannissement

Les options définis dans le bloc DEFAULT ne seront pas prises en compte dans un jail qui comporte aussi ces paramètres.

Les filtres

les filtres sont dans le dossier /etc/fail2ban/filter.d/

Il est possible de créer ses propres filtres, je vous laisse découvrir comment fonctionnent ceux déja intégrés afin d’écrire le votre. N’hésitez pas à chercher sur la toile des exemples déja faits avant de vous lancer 😉

Faire sortir un hôte de la prison

Si une adresse s’est retrouvée bannie et que vous souhaitez la libérer, entrez cette commande :

iptables –D fail2ban-NOM_SERVICE–s  -j DROP

5. Conclusion

fail2ban est un outil très puissant bien qu’il soit léger. Une configuration assez rapide permet de vous protéger efficacement en cas d’attaque bruteforce.