Recherche de site Web

Comment bloquer les IP suspectes avec iptables et Fail2Ban


Aujourd'hui, je vais vous montrer une manière simple mais efficace de bloquer automatiquement les IP suspectes en utilisant un petit script et des outils comme iptables et Fail2Ban. Ces outils sont puissants, légers et peuvent aider à sécuriser votre serveur Linux contre les attaques par force brute, les bots ou tout trafic malveillant.

Ce guide est adapté aux débutants et idéal pour les administrateurs système, les étudiants ou toute personne qui utilise un VPS, un serveur web ou même un serveur Linux domestique.

Qu'est-ce que iptables et Fail2Ban ?

Avant d'aller plus loin dans la configuration, comprenons les deux outils clés que nous utilisons – iptables et Fail2Ban.

iptables

iptables est un utilitaire de pare-feu en ligne de commande intégré dans la plupart des distributions Linux, qui fonctionne en appliquant un ensemble de règles (appelées chaînes de politiques) pour contrôler le trafic réseau.

Ces règles peuvent filtrer les paquets en fonction de l'adresse IP, du numéro de port ou du protocole. Vous pouvez considérer iptables comme un gardien se tenant à la porte de votre serveur, ne laissant entrer que le trafic de confiance tout en bloquant le reste.

Fail2Ban

D'un autre côté, Fail2Ban est un outil de surveillance des journaux qui détecte et répond automatiquement aux comportements malveillants. Il surveille les fichiers journaux en temps réel et recherche des motifs suspects tels que de multiples tentatives de connexion échouées.

Lorsqu'il détecte quelque chose de suspect, comme une attaque par force brute sur votre SSH, il intervient et interdit l'IP en cause en ajoutant une règle de blocage dans iptables. Vous pouvez définir combien d'échecs sont autorisés, combien de temps bloquer l'IP, et même personnaliser la réponse.

Utilisés ensemble, iptables et Fail2Ban offrent un moyen simple mais puissant de protéger votre serveur. Alors que iptables agit comme le muscle du pare-feu, Fail2Ban ajoute de l'intelligence en détectant les menaces et en mettant à jour vos règles de pare-feu à la volée.

Pourquoi utiliser un script de blocage d'IP personnalisé ?

Alors que Fail2Ban fait déjà un excellent travail en bannissant automatiquement les adresses IP suspectes sur la base de modèles de journaux prédéfinis, disposer d'un script personnalisé de blocage d'IP ajoute une couche supplémentaire de flexibilité et de contrôle.

Un script personnalisé vous permet d'ajouter ou de supprimer rapidement des adresses IP de votre liste de blocage sans modifier directement des règles de pare-feu complexes. Il vous donne également la possibilité de créer une logique basée sur des journaux ou des déclencheurs personnalisés que Fail2Ban pourrait ne pas surveiller.

Par exemple, si vous avez une application web qui écrit ses propres journaux, ou un outil de surveillance qui détecte des motifs spécifiques, vous pouvez facilement relier ces alertes à votre script pour un blocage automatique.

De plus, ce script peut être intégré dans d'autres tâches d'automatisation ou outils de gestion de serveur, ce qui le rend particulièrement utile dans des environnements plus vastes ou pour les administrateurs système gérant plusieurs serveurs.

Étape 1 : Installation d'iptables et de Fail2Ban

Avant de commencer à configurer les choses, assurons-nous que iptables et Fail2Ban sont installés sur votre système. Ces outils sont disponibles dans les dépôts de paquets par défaut pour la plupart des principales distributions Linux, donc l'installation est simple.

Si vous utilisez un système basé sur Debian comme Ubuntu ou Debian lui-même, commencez par mettre à jour votre liste de paquets pour vous assurer que tout est à jour.

sudo apt update

Une fois la mise à jour terminée, installez à la fois iptables et fail2ban en exécutant :

sudo apt install iptables fail2ban

Pour les systèmes basés sur RPM, vous pouvez installer les deux outils en utilisant le gestionnaire de paquets yum.

sudo yum install iptables-services fail2ban

Une fois l'installation terminée, vous serez prêt à configurer votre pare-feu et à mettre en place une protection automatique en utilisant Fail2Ban.

Étape 2 : Création d'un script simple de blocage d'IP

Maintenant que iptables et Fail2Ban sont installés, créons un script bash simple (block-ip.sh) qui vous permet de bloquer manuellement n'importe quelle adresse IP en utilisant iptables.

sudo nano /usr/local/bin/block-ip.sh

À l'intérieur de ce fichier, collez le code suivant :

#!/bin/bash

if [ -z "$1" ]; then
  echo "Usage: $0 "
  exit 1
fi

IP=$1

Check if IP is already blocked
if iptables -L INPUT -v -n | grep -q "$IP"; then
  echo "IP $IP is already blocked."
else
  iptables -A INPUT -s $IP -j DROP
  echo "IP $IP has been blocked."
fi

Ce script vérifie d'abord si vous avez fourni une adresse IP en tant qu'argument. Sinon, il affiche un message d'utilisation et se termine. Si une IP est fournie, il vérifie si cette IP est déjà bloquée à l'aide d'iptables. Si elle ne fait pas déjà partie des règles du pare-feu, il ajoute une nouvelle règle pour bloquer tout le trafic provenant de cette adresse IP et confirme l'action.

Une fois que le contenu du script est en place, appuyez sur CTRL+O pour enregistrer et sur CTRL+X pour quitter l'éditeur. Maintenant, rendez le script exécutable afin qu'il puisse être exécuté directement depuis la ligne de commande :

sudo chmod +x /usr/local/bin/block-ip.sh

Avec le script prêt, testons-le en bloquant une adresse IP d'exemple. Par exemple, pour bloquer l'IP 192.168.1.100, exécutez :

sudo /usr/local/bin/block-ip.sh 192.168.1.100

Si tout fonctionne correctement, vous devriez voir un message disant :

IP 192.168.1.100 has been blocked.

Pour confirmer que l'IP a effectivement été bloquée, vous pouvez afficher les règles actuelles de iptables en exécutant :

sudo iptables -L -n -v

Ce script est très utile lorsque vous souhaitez bloquer des IPs manuellement ou à partir de journaux personnalisés.

Étape 3 : Configuration de Fail2Ban avec iptables

Avec iptables prêt et notre script personnalisé en place, il est temps de configurer Fail2Ban afin qu'il puisse détecter automatiquement et bloquer les IP malveillantes tentant de compromettre des services comme SSH, Apache ou toute autre application exposée à Internet sur votre serveur.

Fail2Ban utilise un concept appelé “jails“, qui sont simplement des blocs de configuration conçus pour surveiller des services spécifiques. Chaque jail indique à Fail2Ban quels journaux surveiller, quels motifs rechercher et comment réagir lorsqu'une attaque est détectée.

Pour commencer, nous devons modifier ou créer le fichier jail.local, qui est l'endroit où vous définissez vos paramètres personnalisés sans affecter la configuration par défaut.

sudo nano /etc/fail2ban/jail.local

Collez le bloc suivant dans le fichier :

[sshd]
enabled = true
port = ssh
filter = sshd
logpath = /var/log/auth.log
maxretry = 5
bantime = 3600
findtime = 600

Décomposons ce que chacune de ces options signifie :

  • enabled=true : Cela active la prison afin qu'elle surveille activement SSH.
  • port=ssh : Cela indique à Fail2Ban quel port surveiller.
  • filter=sshd : Cela spécifie le filtre utilisé pour détecter les échecs de connexion.
  • logpath=/var/log/auth.log : Il s'agit du fichier journal que Fail2Ban analysera pour détecter les tentatives de connexion SSH échouées.
  • maxretry=5 : Si une IP échoue à se connecter 5 fois dans la fenêtre temporelle, elle sera bannie.
  • bantime=3600 : Cela définit la durée de l'interdiction à 3600 secondes (1 heure).
  • findtime=600 : Cela définit la fenêtre temporelle (en secondes) pendant laquelle les tentatives maxretry sont comptées, dans ce cas, 10 minutes.

Si vous utilisez un système basé sur CentOS ou RHEL, vous devrez changer le chemin du journal pour correspondre à l'endroit où les journaux SSH sont stockés.

/var/log/secure

Après avoir enregistré le fichier de configuration de la prison, redémarrez le service Fail2Ban pour appliquer les modifications :

sudo systemctl restart fail2ban

Pour vérifier que votre jail fonctionne correctement, utilisez la commande suivante pour vérifier l'état du jail SSH :

sudo fail2ban-client status sshd

Cela vous montrera combien d'IP ont été bannies, combien de tentatives totales ont été détectées, et si la prison est active.

Si vous souhaitez voir quelles adresses IP sont actuellement bloquées par iptables (y compris celles interdites par Fail2Ban), exécutez :

sudo iptables -L -n

Enfin, si vous souhaitez débloquer une adresse IP spécifique qui a été automatiquement bloquée par Fail2Ban, vous pouvez la supprimer manuellement en utilisant la commande ci-dessous :

sudo fail2ban-client set sshd unbanip 192.168.1.100

Étape 4 : Combiner votre script avec Fail2Ban (optionnel)

Par défaut, Fail2Ban utilise ses propres actions internes pour bloquer les adresses IP en utilisant iptables. Cependant, si vous préférez que Fail2Ban appelle votre script de blocage d’IP personnalisé à la place, peut-être parce que vous avez ajouté une logique ou une journalisation personnalisée, vous pouvez configurer une action Fail2Ban personnalisée.

Pour ce faire, vous devrez d'abord créer un nouveau fichier de définition d'action.

sudo nano /etc/fail2ban/action.d/customblock.conf

Dans ce fichier, collez la configuration suivante :

[Definition]
actionstart =
actionstop =
actioncheck =
actionban = /usr/local/bin/block-ip.sh 
actionunban = iptables -D INPUT -s  -j DROP

[Init]

Cette configuration indique à Fail2Ban d'utiliser votre script personnalisé chaque fois qu'il doit bannir une adresse IP. La ligne actionban exécute votre script et lui transmet l'adresse IP en infraction. Pour le débanissement, elle supprime directement la règle de blocage d'iptables.

Ensuite, vous devez dire à Fail2Ban d'utiliser cette action personnalisée dans votre configuration de jail.

sudo nano /etc/fail2ban/jail.local

Sous votre [sshd] jail ou tout autre jail que vous avez configuré, mettez à jour la ligne d'action pour pointer vers votre action personnalisée :

[sshd]
enabled = true
port = ssh
filter = sshd
logpath = /var/log/auth.log
maxretry = 5
bantime = 3600
findtime = 600
action = customblock

Après avoir effectué ces modifications, redémarrez le service Fail2Ban pour les appliquer :

sudo systemctl restart fail2ban

Maintenant, chaque fois que Fail2Ban détecte une IP suspecte, il appellera votre script pour gérer le blocage, vous offrant la flexibilité d'enregistrer, d'alerter ou d'effectuer des actions supplémentaires si nécessaire.

Sauvegarder les règles iptables

Une chose importante à noter est que les règles iptables ne sont pas persistantes par défaut, ce qui signifie que toutes les règles ajoutées, que ce soit manuellement ou par Fail2Ban, seront perdues après un redémarrage du serveur à moins que vous ne les sauvegardiez explicitement.

Sur les systèmes Debian ou Ubuntu, vous pouvez rendre les règles du pare-feu persistantes en installant le paquet iptables-persistent :

sudo apt install iptables-persistent

Une fois installé, enregistrez vos règles actuelles avec :

sudo netfilter-persistent save

Sur CentOS ou RHEL, le processus est légèrement différent, vous pouvez enregistrer vos règles en utilisant la commande de service suivante :

sudo service iptables save

Alternativement, vous pouvez enregistrer manuellement les règles dans le fichier de configuration approprié comme ceci :

sudo iptables-save > /etc/sysconfig/iptables

En sauvegardant vos règles, vous vous assurez que les IP bloquées manuellement ou via Fail2Ban restent bloquées même après le redémarrage du système.

Conclusion

Sécuriser votre serveur Linux ne doit pas être compliqué. En combinant la puissance de iptables avec l'intelligence de Fail2Ban, vous pouvez créer une défense solide et flexible contre les attaques par force brute, les tentatives de connexion indésirables et l'activité suspecte des adresses IP.

Alors que Fail2Ban automatise le processus de détection et de blocage, un script de blocage IP personnalisé vous donne un contrôle manuel lorsque vous en avez le plus besoin.