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.
[…] un précédent article j’ai présenté comment protéger son serveur des attaques bruteforce a…. Comme décrit dans cet article de nos jours, il est très important de se protéger de ce type […]
pour faire sortir un hôte de prison, le DROP correspond à l’ip ?
J’en ai mis un pour le ssh. Etant donné que c’est le seul port que j’ai ouvert sur ma freebox il ne devrait pas y avoir de soucis.
Je l’ai ouvert hier soir sur la toile et ce matin, mon log était plein de tentatives. Je vais mettre un ban définitif comme ça c’est réglé.
Sinon tu changes de port à rediriger sur la FB, ca fait que tu rediriges de 38000 et ca pointe vers le 22 de ton serveur 😉
Et autre chose, peux-tu rajouter un tag sécu ? ça peut être plus pratique pour les recherches 😉
Pas faux mais c’est aussi simple comme ça. J’ai eu pleins de tentatives cette nuit mais une seule dans la journée et il a été ban direct.
Pas mal comme système en tout cas 😉 Merci pour le tuto.