Fail2ban
est un logiciel de prévention des intrusions qui protège les serveurs informatiques contre les attaques principalement par force brute, en interdisant les agents utilisateurs malveillants, en interdisant les scanners d’URL et bien plus encore. Fail2ban y parvient en lisant les journaux d’accès/d’erreurs de votre serveur ou de vos applications Web. Fail2ban est codé dans le langage de programmation python.
Le tutoriel suivant vous apprendra comment installer Fail2ban et effectuer quelques configurations avec des exemples complets et des conseils essentiels pour vous aider à démarrer
Tutoriel effectué sur Debian 11 Bullseye.
Mettez à jour votre Debian pour vous assurer que tous les packages existants sont à jour :
sudo apt update && sudo apt upgrade -y
Le tutoriel utilisera le commande sudo en supposant que vous ayez le statut sudo.
Pour vérifier le statut sudo sur votre compte :
sudo whoami
Exemple de sortie montrant l’état sudo :
[joshua@debian~]$ sudo whoami
root
Pour configurer un compte sudo existant ou nouveau, visitez le tutoriel disponible ici
Pour utiliser la compte root, utilisez la commande suivante avec le mot de passe root pour vous connecter.
su
Par défaut, Fail2ban
est inclus dans le référentiel Debian 11 Bullseye. Pour installer le logiciel, utilisez la commande suivante dans votre terminal :
sudo apt install fail2ban
Par défaut, fail2ban après l’installation doit être actif et activé. Pour vérifier cela, utilisez ce qui suit commande systemctl:
sudo systemctl status fail2ban
Si votre service fail2ban n’est pas activé, exécutez les commandes suivantes pour démarrer et, si vous le souhaitez, activez-le au démarrage du système par défaut :
sudo systemctl start fail2ban
Ensuite, pour activer fail2ban au démarrage du système, utilisez ce qui suit :
sudo systemctl enable fail2ban
Enfin, vérifiez la version et la build de fail2ban :
fail2ban-client --version
Exemple de sortie:
Fail2Ban v0.11.2
Cela montre que vous avez l’une des dernières versions stables, qui est ver. 0.11.2 (2020/11/23) - (heal-the-world-with-security-tools). Si vous souhaitez savoir à l’avenir où se situe votre version installée dans le calendrier de publication de Fail2ban, visitez la page de publication de Fail2ban sur Github
Une fois l’installation terminée, nous devons maintenant effectuer une configuration et une configuration de base. Fail2ban est livré avec deux fichiers de configuration qui se trouvent dans /etc/fail2ban/jail.conf
et le Fail2ban par défaut /etc/fail2ban/jail.d/defaults-debian.conf
.
Ne modifiez pas ces fichiers. Les fichiers de configuration d’origine sont vos originaux et seront remplacés dans toute mise à jour de Fail2ban à l’avenir.
Maintenant, vous vous demandez peut-être comment nous avons configuré Fail2ban comme si vous mettez à jour et perdez vos paramètres. Simple, nous créons des copies se terminant par .local au lieu de .conf comme Fail2ban lira toujours .local fichiers avant le chargement .conf s’il n’en trouve pas.
Pour ce faire, utilisez la commande suivante :
sudo cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local
Ouvrez maintenant le fichier de configuration pour procéder à la configuration :
sudo nano /etc/fail2ban/jail.local
Ensuite, le didacticiel passera en revue certains paramètres que vous pouvez utiliser ou modifier à votre guise. Notez que la plupart des paramètres sont commentés ; le tutoriel décommentera les lignes en question ou modifiera celles existantes dans les paramètres d’exemple.
N’oubliez pas qu’il s’agit de paramètres facultatifs et que vous pouvez définir ce que vous voulez si vous en savez plus sur fail2ban.
Le premier paramètre que vous rencontrerez est les incréments de temps d’interdiction. Vous devez l’activer à chaque fois que l’attaquant revient. Cela augmentera la durée d’interdiction, évitant ainsi à votre système d’interdire constamment la même adresse IP si la durée de votre interdiction est mineure ; par exemple, 1 heure, vous voudriez que cela soit plus long si l’attaquant revient x5 fois.
Vous devez également définir un multiplicateur ou un facteur pour que la logique d’augmentation des interdictions fonctionne. Vous pouvez choisir l’un d’entre eux ; Cependant, dans notre guide, nous préférons les multiplicateurs, comme le souligne notre exemple ci-dessous, car vous pouvez définir des augmentations personnalisées du temps d’interdiction à votre guise. Une explication supplémentaire se trouve dans la configuration des mathématiques sous-jacentes.
Exemple ci-dessous:
Ensuite, dans la liste, nous rencontrons des options de liste blanche, décommentez les éléments suivants et adressez toutes les adresses IP que vous souhaitez ajouter à la liste blanche.
ignoreip = 127.0.0.1/8 ::1 192.167.5.5 (example IP address)
Assurez-vous d’espacer ou de virgule entre les adresses IP. Vous pouvez également ajouter des plages d’adresses IP à la liste blanche.
Exemple ci-dessous:
Les temps d’interdiction par défaut sont de 10 minutes (bantime) par défaut avec 10 minutes de recherche (findtime) sur 5 tentatives (maxretry). Une explication à cela est que la prison (Jail) Fail2ban avec filtrage interdira votre attaquant pendant 10 minutes après avoir réessayé la même attaque dans 10 minutes (findtime) x 5 fois (maxretry). Vous pouvez définir des paramètres d’interdiction par défaut ici.
Cependant, lorsque vous arrivez dans les prisons, il est conseillé de définir des durées d’interdiction différentes, car certaines interdictions devraient automatiquement être plus longues que d’autres, y compris les nouvelles tentatives qui devraient être inférieures ou supérieures.
Exemple ci-dessous:
Vous pouvez définir une adresse e-mail pour Fail2ban pour envoyer des rapports. Le défaut action = %(action_mw)s qui interdit l’adresse IP incriminée et envoie un e-mail avec un rapport whois pour que vous puissiez l’examiner.
Cependant, dans votre dossier action.d
, d’autres options de courrier électronique existent pour signaler non seulement vous-même, mais également envoyer des courriers électroniques aux fournisseurs d’hébergement sur l’activité de l’attaquant afin que quelque chose puisse être fait. Remarque, ne faites cela que si vous utilisez un proxy de messagerie, car certains attaquants n’accepteront pas cela ou n’obtiendront pas l’e-mail directement avec l’adresse IP de votre serveur, utilisez cette action avec une extrême prudence ou pas du tout.
Exemple ci-dessous:
# Destination email address used solely for the interpolations in
# jail.{conf,local,d/*} configuration files.
destemail = [email protected]
# Sender e-mail address used solely for some actions
sender = [email protected]
Mise en situation :
Notez que par défaut, Fail2ban utilise sendmail MTA pour les notifications par e-mail. Vous pouvez changer cela en procédant comme suit:
Changer de:
mta = sendmail
Changer pour:
mail = sendmail
Nous arrivons aux prisons ou jails. Vous pouvez définir des jails prédéfinies avec des filtres et des actions créés par la communauté couvrant de nombreuses applications populaires. Vous pouvez créer des jails personnalisées ou en trouver d’autres créées par la communauté. Cependant, nous allons configurer ici les prisons par défaut.
Configuration par défaut pour toutes les prisons selon l’image ci-dessous. Remarquez comment rien n’est activé.
Exemple ci-dessous:
[apache-badbots]
# Ban hosts which agent identifies spammer robots crawling the web
# for email addresses. The mail outputs are buffered.
port = http,https
logpath = %(apache_access_log)s
bantime = 48h
maxretry = 1
Donc, nous avons un serveur HTTP Apache 2, et comme filtrer/interdire les mauvais bots, tout ce que vous avez à faire est d’ajouter enabled = true
comme dans l’exemple ci-dessous.
[apache-badbots]
# Ban hosts which agent identifies spammer robots crawling the web
# for email addresses. The mail outputs are buffered.
enabled = true
port = http,https
logpath = %(apache_access_log)s
bantime = 48h
maxretry = 1
Remarquez que le nombre maximal de tentatives est égal à 1 et que la durée d’interdiction est de 48h. Il s’agit d’un paramètre individuel de durée maximale des tentatives et des interdictions pour cette prison qui augmentera automatiquement avec le multiplicateur d’interdiction que nous avons configuré plus tôt dans le guide. S’il manque l’un des filtres, vous pouvez l’ajouter à titre d’exemple.
[apache-noscript]
enabled = true
port = http,https
logpath = %(apache_error_log)s
Modifiez ci-dessus l’exemple suivant ci-dessous :
[apache-noscript]
enabled = true
port = http,https
logpath = %(apache_error_log)s
bantime = 1d
maxretry = 3
Ensuite, vous aimeriez avoir des actions différentes de celles spécifiées dans votre configuration par défaut dans /etc/fail2ban/jail.local
, des actions supplémentaires que vous pouvez trouver dans le répertoire action.d
. Différentes actions de ce répertoire peuvent être facilement configurées en suivant les instructions à l’intérieur de ces lignes de configuration d’action dans les fichiers, en n’oubliant pas de les renommer d’abord en .jail au dessus du .conf, puis en ajoutant ce qui suit à votre configuration de prison.
[apache-botsearch]
enabled = true
port = http,https
logpath = %(apache_error_log)s
banaction = action_mw
cloudflare
bantime = 72h
maxretry = 1
Comme vous pouvez le voir, nous avons ajouté action_mw
, donc il interdit automatiquement selon notre action par défaut et nous envoie un rapport avec whois, puis l’action suivante, si vous utilisez Cloudflare, cela bloquera également l’adresse IP sur le service. N’oubliez pas que Cloudflare doit être configuré avant utilisation. Lire le fichier action.d cloudflare.conf
.
Une fois que vous êtes satisfait de votre configuration, exécutez la commande suivante pour redémarrer fail2ban afin de charger vos nouvelles prisons.
sudo systemctl restart fail2ban
[sshd]
enabled = true
port = 2222
logpath = /var/log/auth.log
maxretry = 5
[ssh-iptables]
#enabled = false
enabled = true
filter = sshd
action = iptables[name=SSH, port=ssh, protocol=tcp]
# mail-whois[name=SSH, [email protected]]
#logpath = /var/log/sshd.log
logpath = /var/log/auth.log
maxretry = 5
[ssh-ddos]
enabled = true
port = ssh,sftp
filter = sshd-ddos
logpath = /var/log/messages
maxretry = 2
[nginx-http-auth]
enabled = true
port = http,https
logpath = %(nginx_error_log)s
Maintenant que vous êtes opérationnel avec Fail2ban, vous devez connaître quelques commandes d’exploitation de base. Nous le faisons en utilisant le commande fail2ban-client
. Vous devrez peut-être avoir des privilèges sudo, selon votre configuration.
sudo fail2ban-client set apache-botsearch banip <ip address>
sudo fail2ban-client set apache-botsearch unbanip <ip address>
– Commande pour afficher le menu d’aide si vous avez besoin de trouver des paramètres supplémentaires ou d’obtenir de l’aide sur un paramètre en particulier.
sudo fail2ban-client -h
Par défaut, Debian n’est pas fourni avec UFW. Pour les utilisateurs qui préfèrent utiliser UFW avec Fail2ban plutôt qu’IPTABLES, suivez les étapes ci-dessous
Tout d’abord, installez UFW :
sudo apt install ufw -y
Ensuite, vérifiez l’installation et compilez :
sudo ufw version
Exemple de sortie:
ufw 0.36
Copyright 2008-2015 Canonical Ltd.
Activez maintenant au démarrage du système et activez fail2ban à l’aide de la commande de terminal :
sudo ufw enable
Exemple de sortie:
Firewall is active and enabled on system startup
Ensuite, ajouter UFW à votre banaction
, qui à la place n’utilisera pas IPTABLES par défaut et vous ce que vous spécifiez :
Exemple :
[apache-botsearch]
enabled = true
port = http,https
logpath = %(apache_error_log)s
bantime = 72h
maxretry = 1
Remplacer/ajouter
:
[apache-botsearch]
enabled = true
port = http,https
logpath = %(apache_error_log)s
banaction = ufw
bantime = 72h
maxretry = 1
Comme vous pouvez le voir, la nouvelle ligne banaction = ufw
a été ajouté pour modifier l’action d’interdiction par défaut. Vous pouvez en ajouter plusieurs, disons que vous souhaitez interdire UFW et également utiliser le script Cloudflare pour interdire l’adresse IP à l’aide de leur service de pare-feu tout en signalant l’adresse IP à AbuseIPDB Fail2ban Intégration:
Mise en situation :
[apache-botsearch]
enabled = true
port = http,https
logpath = %(apache_error_log)s
banaction = ufw
cloudflare
abuseipdb
bantime = 72h
maxretry = 1
Une liste d’actions prédéfinies peut être trouvée dans /etc/fail2ban/actions.d
; toutes les actions ont une configuration de base et des cas d’utilisation.
Pour afficher les adresses IP interdites, utilisez la commande UFW suivante :
sudo ufw status verbrose
Exemple de sortie:
Anywhere REJECT <IP ADDRESS> # by Fail2Ban after 1 attempts against apache-botsearch
Comme vous pouvez le voir, vous pouvez voir que l’UFW est rejet de l’adresse IP après avoir été banni par l’action Fail2ban UFW sur le filtre apache-botsearch
après une tentative. Il ne s’agit que d’un exemple de Fail2ban fonctionnant dans un environnement réel, et pour s’y attendre, vous devez modifier vos filtres en fonction de vos besoins.
Remarque, ne débloquez pas les adresses IP à l’aide d’UFW. Assurez-vous d’utiliser l’action d’annulation de l’interdiction du client fail2ban, sinon l’adresse IP sera à nouveau interdite lors du retour sur le site, car UFW ne peut pas communiquer avec Fail2ban.
Les versions Fail2ban ne sortent pas souvent, vous ne verrez donc pas de changements significatifs chaque semaine ou, d’ailleurs, même mensuellement. Cependant, pour mettre à jour Fail2ban, le même processus s’applique lors de la vérification des mises à jour de votre système Debian.
Tout d’abord, utilisez le mise à jour apt commander:
sudo apt update
Deuxièmement, si une mise à jour est disponible, vous pouvez utiliser un apt upgrade, qui lancera la mise à niveau ainsi que d’autres, ou si vous préférez mettre à niveau fail2ban, utilisez le suivant:
sudo apt upgrade fail2ban
Si vous n’avez plus besoin de Fail2ban, pour le supprimer de votre système, utilisez la commande suivante :
sudo apt autoremove fail2ban --purge
Notez que cela supprimera également toutes les dépendances inutilisées qui ont été installées avec Fail2ban à l’origine pour une suppression complète.
De nombreuses erreurs courantes sont de créer des jails et de s’en aller sans tester ni surveiller ce qu’elles font. L’examen des journaux est essentiel, le journal fail2ban étant dans son chemin par défaut /var/log/fail2ban.log
.
Si vous avez un serveur recevant un trafic décent, une excellente commande pour regarder en direct pour voir tout problème et garder un œil dessus pendant que vous travaillez sur d’autres serveurs est d’utiliser -f
.
sudo tail -f /var/log/fail2ban.log
La commande peut s’avérer utile pour une vérification ponctuelle sans avoir à plonger dans la journalisation.
Le didacticiel vous a montré les bases de l’installation de Fail2ban sur Debian 11 Bullseye et de la configuration de certaines prisons avec les filtres disponibles. Fail2ban est un outil puissant. Vous pouvez le configurer de différentes manières par rapport à ce que j’ai montré ici. C’est juste un exemple de comment s’y retrouver, pour commencer. Fail2ban est activement développé et constitue un choix solide à déployer sur votre serveur en ces temps où les attaques deviennent si fréquentes.
Il existe aussi une nouvelle alternative appellée Crowdsec. Un tuto est disponible ici