Debian11, Serveur, Installation de fail2ban pour bloquer les attaquants
Fail2ban parcourt les fichiers de journaux à la recherche de tentatives d’attaques et réagit pour bannir les attaquants temporairement ou définitivement en utilisant IPTables et TCPWrappers. Cette configuration utilise la cible TARPIT d’IPTables pour « punir » les attaquants. Cet article décrit l’installation d’une configuration de base, commune à tout type de serveur, je la spécialiserai en fonction du serveur souhaité (public ou routeur/passerelle) dans les articles suivants.
Présentation de Fail2ban
Fail2ban parcourt les fichiers de journalisation à la recherche de motifs d’attaque typiques, lorsque la même adresse IP source est la cause de plusieurs tentatives de connexion infructueuse ou tente de scanner les ports du server, … L’attaque a été déjouée par la première ligne de défense, les règles IPTables ou TCPWrappers, mais continue. Ce n’est probablement pas une erreur mais une véritable attaque et il est temps de bloquer plus que les tentatives individuelles.
Fail2ban peut exécuter des commandes arbitraires pour bloquer l’adresse IP source pour une certaine période, il peut aussi envoyer des courriels avec les détails à l’administrateur, ajouter l’IP à des liste noire publiques, ou déclencher des contre-mesures actives.
Les contremesures actives ne sont pas une bonne idée, les notifications par courriel peuvent rapidement remplir une boite aux lettres sans valeur ajoutée, et l’ajout d’IP dans des listes noires nécessiteraient d’ouvrir des connexions réseau sortantes sur le pare-feu. Personnellement, je ne pense pas que les ajouts automatiques dans les blacklist soient une action fiable. Il faut garder en tête que ce ne sont que rarement les machines des attaquants qui exécutent les attaques, mais celles d’un réseau de machines inocentes infectées par un virus. Toutes ces actions punieraient d’innocentes victimes de manière bien trop sévères à mon sens.
- Présentation de Fail2ban
- Pré-requis
- Installation commune
- Administration
- Supports et liens
- Notes de bas de page
Pré-requis
Cet article ne dépend que de la Préparation d’une machine générique.
Variables existantes
Nous avons besoin des variables LAN_*
déjà définies dans le fichier de configuration par l’article sur les Variables de configuration.
Rechargement des variables
Assurons-nous que les variables soient bien chargées dans l’environnement.
source /root/config.env
Installation commune
Le paquetage est très petit, facile et rapide à installer, il ne pose aucune question par défaut.
apt-get install -y fail2ban
Bannir les bannis récidivistes
Lorsqu’un motif d’attaque se répète, Fail2ban déclenche une action temporaire pour bloquer les tentatives suivantes pendant un temps défini. Cette règle ajoute un second niveau pour appliquer une règle encore plus restrictive si les bannis continuent à tenter des attaques.
cat << EOF > /etc/fail2ban/jail.d/recidive.conf
[recidive]
enabled = true
EOF
Utilisation de la cible IPTables TARPIT
Au lieu de simplement ignorer les paquets réseau pour les bloquer, avec la cible DROP, j’utilise la cible TARPIT. J’ai déjà expliqué cette cible IPTable dans l’article sur IPTables, on sait déjà que le traffic est malicieux, cela ne fait pas de mal, ne consomme pas plus de ressources locales et devrait arrêter les tentatives d’attaque directement à la source.
cat << EOF > /etc/fail2ban/action.d/iptables-common.local
[Init]
blocktype = TARPIT
EOF
Ajout d’une IP ou d’un LAN en liste blanche
L’utilisation normale ne devrait pas poser de problème, mais il reste prudent d’ajouter en liste blanche ma propre adresse IP pour éviter d’être banni en cas de fausse manipulation. Je commence donc par ajouter mon adresse IP publique (ou classe) en liste blanche.
cat << EOF > /etc/fail2ban/jail.local
[DEFAULT]
ignoreip = 127.0.0.1/8 ${LAN_IP}/${LAN_NM}
#action = %(action_mw)s
EOF
Ajutement de la durée de banissement
J’ajuste ensuite la durée de banissement temporaire à une heure, bien plus longtemps que la durée par défaut.
cat << EOF >> /etc/fail2ban/jail.local
bantime = 3600
EOF
Ajustement des seuils de détection
Enfin, j’indique à fail2ban
de déclencher une contre-mesure lorsqu’il trouve plus de 3 tentatives pendant les 10 dernières minutes, afin de détecter les attaques lentes.
cat << EOF >> /etc/fail2ban/jail.local
findtime = 600
maxretry = 3
EOF
Application de la configuration
systemctl restart fail2ban
Administration
Il faut garder en tête que cet outil bloque dynamiquement les connexions. On peut utiliser fail2ban-client
pour gérer les hôtes
actuellement bannis grâce aux commandes banned
, ban
et unban
. Ces commandes sont disponibles dans la version inclue dans
Debian 11 Bullseye, mais pas dans la version inclue dans Debian 10 Buster. Lorsqu’une machine est bannie, elle est ajoutée à des
chaines iptables
que l’on peut consulter avec la commande iptables -L -n -v
ainsi que dans le fichier blacklist de TCPWrapper
/etc/hosts.deny
.
Supports et liens
J’ai trouvé ces quelques resources intéressantes, en anglais et en Français.