FAIL2BAN: Remédier grâce aux logs

Introduction

La surveillance des logs est une partie essentielle de la maintenance et de la sécurité du serveur. Cela vous permet de garder un œil sur les activités de votre serveur et de détecter toute activité suspecte. Dans cette section, nous allons examiner comment surveiller les logs et être notifié par Telegram.

Présentation de Fail2Ban

Fail2Ban est un outil de prévention des intrusions qui protège les serveurs contre les attaques de force brute. Il fonctionne en surveillant les logs de divers services et en bannissant les adresses IP qui montrent des signes d’activité malveillante[12].

Pour configurer Fail2Ban vous devez d’abord installer Fail2Ban sur votre serveur. Sur un système basé sur Debian, vous pouvez le faire avec la commande suivante :

sudo apt-get install fail2ban

OpenVPN

OpenVPN est un outil de connexion VPN, les logs d’OpenVPN peuvent être trouvés dans le répertoire /var/log/openvpn. Vous pouvez surveiller ces logs pour détecter toute activité suspecte ou non autorisée sur votre réseau VPN[^10^].

Voici un exemple de sortie de log OpenVPN :

Fri Sep 30 12:28:28 2016 us=77480 username/1.2.3.4:56789 MULTI_sva: pool returned IPv4=10.8.0.6, IPv6=(Not enabled)
Fri Sep 30 12:28:28 2016 us=77496 username/1.2.3.4:56789 MULTI: Learn: 10.8.0.6 -> username/1.2.3.4:56789
Fri Sep 30 12:28:28 2016 us=77503 username/1.2.3.4:56789 MULTI: primary virtual IP for username/1.2.3.4:56789: 10.8.0.6

Ces logs montrent une connexion réussie de l’utilisateur “username” depuis l’adresse IP “1.2.3.4”. Si vous voyez des tentatives de connexion échouées répétées depuis la même adresse IP, cela peut indiquer une tentative d’attaque.

utilisons fail2ban pour nous protéger:

Créer un fichier de configuration pour OpenVPN dans le répertoire /etc/fail2ban/jail.d/. Vous pouvez le faire avec la commande suivante :

sudo nano /etc/fail2ban/jail.d/openvpn.conf

Dans ce fichier, ajoutez le contenu suivant :

[openvpn]
enabled  = true
port     = 1194
protocol = udp
filter   = openvpn
logpath  = /var/log/openvpn/openvpn.log # correspond à votre fichier de log OPENVPN
maxretry = 3
bantime  = 86400

Cette configuration indique à Fail2Ban de surveiller le fichier de log /var/log/openvpn/openvpn.log pour toute activité suspecte. Si une adresse IP échoue à se connecter plus de trois fois en une minute, elle sera bannie pendant 24 heures.

Enfin, redémarrez Fail2Ban pour appliquer les modifications :

sudo systemctl restart fail2ban

ENVOY

Envoy est un reverse proxy open source qui est utilisé pour gérer le trafic web. Les logs d’Envoy peuvent être trouvés dans le répertoire /var/log/envoy. Ces logs peuvent vous donner des informations sur le trafic réseau et vous aider à détecter toute activité suspecte[^11^].

Voici un exemple de sortie de log Envoy :

[2020-05-08 03:27:34.400][1][info][main] [source/server/server.cc:238] initializing epoch 0 (hot restart version=11.104)
[2020-05-08 03:27:34.400][1][info][main] [source/server/server.cc:240] statically linked extensions:

Ces logs montrent le démarrage d’Envoy et la liste des extensions liées statiquement. Si vous voyez des erreurs ou des avertissements dans ces logs, cela peut indiquer un problème avec votre configuration Envoy.

Pour utiliser Fail2Ban avec Envoy, vous devez créer un filtre Fail2Ban pour Envoy. Créez un nouveau fichier de filtre dans le répertoire /etc/fail2ban/filter.d/ :

sudo nano /etc/fail2ban/filter.d/envoy.conf

Dans ce fichier, ajoutez le contenu suivant :

[Definition]
failregex = \[error\]\[main\] \[source/server/server.cc:\d+\] initializing epoch 0 \(hot restart version=\d+\.\d+\)
ignoreregex =

Ce filtre détectera les erreurs de démarrage d’Envoy. Ensuite, créez un fichier de configuration pour Envoy dans le répertoire /etc/fail2ban/jail.d/ :

sudo nano /etc/fail2ban/jail.d/envoy.conf

Dans ce fichier, ajoutez le contenu suivant :

[envoy]
enabled  = true
port     = 9901
protocol = tcp
filter   = envoy
logpath  = /var/log/envoy/envoy.log
maxretry = 3
bantime  = 86400

Cette configuration indique à Fail2Ban de surveiller le fichier de log /var/log/envoy/envoy.log pour toute activité suspecte. Si une adresse IP échoue à se connecter plus de trois fois en une minute, elle sera bannie pendant 24 heures.

Redémarrez Fail2Ban pour appliquer les modifications :

sudo systemctl restart fail2ban

NGINX

NGINX est un serveur web open source qui peut également être utilisé comme proxy inverse, chargeur de charge, et serveur de messagerie. Les logs de NGINX peuvent être trouvés dans le répertoire /var/log/nginx. Ces logs peuvent vous aider à comprendre le trafic web et à détecter toute activité suspecte[^15^].

Voici un exemple de sortie de log NGINX :

192.168.1.1 - - [28/Dec/2019:09:35:02 +0000] "GET / HTTP/1.1" 200 612 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.88 Safari/537.36" "-"

Ces logs montrent une requête GET réussie à la racine du site web depuis l’adresse IP “192.168.1.1”. Si vous voyez des erreurs 4xx ou 5xx dans ces logs, cela peut indiquer un problème avec votre configuration NGINX ou une tentative d’accès non autorisé.

Pour utiliser Fail2Ban avec NGINX, vous devez créer un filtre Fail2Ban pour NGINX. Créez un nouveau fichier de filtre dans le répertoire /etc/fail2ban/filter.d/ :

sudo nano /etc/fail2ban/filter.d/nginx.conf

Dans ce fichier, ajoutez le contenu suivant :

[Definition]
failregex = <HOST> -.*GET
ignoreregex =

Ce filtre détectera les tentatives de connexion non autorisées.

Ensuite, créez un fichier de configuration pour NGINX dans le répertoire /etc/fail2ban/jail.d/ :

sudo nano /etc/fail2ban/jail.d/nginx.conf

Dans ce fichier, ajoutez le contenu suivant :

[nginx]
enabled  = true
port     = http,https
filter   = nginx
logpath  = /var/log/nginx/access.log
maxretry = 3
bantime  = 86400

Cette configuration indique à Fail2Ban de surveiller le fichier de log /var/log/nginx/access.log pour toute activité suspecte. Si une adresse IP échoue à se connecter plus de trois fois en une minute, elle sera bannie pendant 24 heures.

Redémarrez Fail2Ban pour appliquer les modifications :

sudo systemctl restart fail2ban

Serveur SSH

POur protéger les accès de nos instances linux on peut analyser les logs SSH trouvés dans le répertoire /var/log/auth.log ou /var/log/secure, selon votre système. Ces logs peuvent vous aider à détecter toute activité suspecte, comme les tentatives de connexion SSH échouées[^17^].

Voici un exemple de sortie de log SSH :

Jan 10 10:20:10 myhost sshd[12345]: Failed password for invalid user admin from 192.168.1.1 port 12345 ssh2

Ces logs montrent une tentative de connexion échouée de l’utilisateur “admin” depuis l’adresse IP “192.168.1.1”. Si vous voyez de nombreuses tentatives de connexion échouées depuis la même adresse IP, cela peut indiquer une tentative d’attaque.

Pour utiliser Fail2Ban avec SSH, vous devez créer un filtre Fail2Ban pour SSH.

Créez un nouveau fichier de filtre dans le répertoire /etc/fail2ban/filter.d/ :

sudo nano /etc/fail2ban/filter.d/sshd.conf

Dans ce fichier, ajoutez le contenu suivant :

[Definition]
failregex = Failed password for .* from <HOST>(?: port \d*)?(?: ssh\d*)?
ignoreregex =

Ce filtre détectera les tentatives de connexion SSH échouées.

Ensuite, créez un fichier de configuration pour SSH dans le répertoire /etc/fail2ban/jail.d/ :

sudo nano /etc/fail2ban/jail.d/sshd.conf

Dans ce fichier, ajoutez le contenu suivant :

[sshd]
enabled  = true
port     = ssh
filter   = sshd
logpath  = /var/log/auth.log
maxretry = 3
bantime  = 86400

Cette configuration indique à Fail2Ban de surveiller le fichier de log /var/log/auth.log pour toute activité suspecte. Si une adresse IP échoue à se connecter plus de trois fois en une minute, elle sera bannie pendant 24 heures.

Redémarrez Fail2Ban pour appliquer les modifications :

sudo systemctl restart fail2ban

Notifications Telegram

Pour recevoir des notifications de Fail2Ban sur Telegram, vous pouvez utiliser un script comme celui fourni par shafiqsaaidin sur GitHub. Ce script envoie une notification à un chat Telegram chaque fois qu’une IP est bannie ou débannie par Fail2Ban[^18^].

Pour utiliser ce script, suivez les étapes suivantes :

  1. Clonez le dépôt GitHub sur votre serveur :
git clone https://github.com/shafiqsaaidin/fail2ban-telegram-notification.git
  1. Accédez au répertoire du script :
cd fail2ban-telegram-notification
  1. Rendez le script exécutable :
chmod +x fail2ban-telegram.sh
  1. Modifiez le script avec vos propres informations. Vous devrez fournir votre token de bot Telegram et l’ID de chat de votre chat Telegram :
nano fail2ban-telegram.sh

Remplacez YOUR_BOT_TOKEN par le token de votre bot Telegram et YOUR_CHAT_ID par l’ID de votre chat Telegram.

  1. Testez le script pour vous assurer qu’il fonctionne correctement :
./fail2ban-telegram.sh "Test message"

Vous devriez recevoir un message “Test message” dans votre chat Telegram.

  1. Enfin, configurez Fail2Ban pour utiliser ce script. Ouvrez le fichier de configuration de Fail2Ban :
sudo nano /etc/fail2ban/jail.local

Ajoutez les lignes suivantes à la fin du fichier :

[DEFAULT]
action = %(action_)s
         /path/to/fail2ban-telegram.sh "<ip> has been <banned/unbanned>"

Remplacez /path/to/ par le chemin d’accès réel du script sur votre serveur.

Redémarrez Fail2Ban pour appliquer les modifications :

sudo systemctl restart fail2ban

Conclusion

La surveillance des logs est une pratique essentielle pour assurer la sécurité de votre serveur. Avec des outils comme Fail2Ban, vous pouvez détecter et bloquer automatiquement les activités suspectes. De plus, l’intégration de notifications Telegram peut vous aider à rester informé en temps réel des actions de Fail2Ban. En étant proactif dans la surveillance de votre serveur, vous pouvez minimiser le risque de cyberattaques réussies.

Références

OpenVPN Log Viewing And Management Envoy Proxy - Understanding Logs Fail2Ban Documentation