Sécurité · 7 min read · Dec 03, 2025

Prévenir les attaques par force brute avec Fail2ban sur Mandriva 2008.1

Prévenir les attaques par force brute avec Fail2ban sur Mandriva 2008.1

Version 1.0
Auteur : Falko Timme

Dans cet article, je vais montrer comment installer et configurer fail2ban sur un système Mandriva 2008.1. Fail2ban est un outil qui observe les tentatives de connexion à divers services, par exemple SSH, FTP, SMTP, Apache, etc., et s’il trouve des tentatives de connexion échouées encore et encore depuis la même adresse IP ou hôte, fail2ban arrête d’autres tentatives de connexion depuis cette adresse IP/hôte en la bloquant avec une règle de pare-feu iptables.

Ce document est fourni sans garantie d’aucune sorte ! Je tiens à dire que ce n’est pas la seule façon de configurer un tel système. Il existe de nombreuses façons d’atteindre cet objectif, mais c’est la méthode que je choisis. Je ne donne aucune garantie que cela fonctionnera pour vous !

1 Remarque préliminaire

Fail2ban est similaire à DenyHosts que j’ai couvert dans ce tutoriel : https://www.howtoforge.com/preventing_ssh_dictionary_attacks_with_denyhosts, mais contrairement à DenyHosts qui se concentre sur SSH, fail2ban peut être configuré pour surveiller n’importe quel service qui écrit des tentatives de connexion dans un fichier journal, et au lieu d’utiliser /etc/hosts.deny uniquement pour bloquer les adresses IP/hôtes, fail2ban peut utiliser iptables et /etc/hosts.deny.

Dans cet exemple, je vais configurer fail2ban pour surveiller les tentatives de connexion au serveur SSH, au serveur Proftpd, les tentatives de connexion aux sites web protégés par .htaccess/.htpasswd, à Courier POP3 et Courier IMAP, et à SASL (pour l’envoi d’emails). Je vais installer le paquet fail2ban qui est disponible pour Mandriva 2008.1. Il est fourni avec une configuration par défaut, mais malheureusement, cette configuration ne fonctionne pas tout à fait pour la plupart des services mentionnés ci-dessus. Par conséquent, je vais créer une configuration fail2ban personnalisée que j’ai testée et qui fonctionne pour moi.

2 Installation de fail2ban

Avant d’installer des paquets, nous devons activer les dépôts main, main_updates, contrib et contrib_updates. Allez sur http://easyurpmi.zarb.org/ - cela devrait vous donner les commandes que vous devez exécuter pour activer ces dépôts. Dans mon cas, j’ai exécuté

urpmi.addmedia contrib ftp://distrib-coffee.ipsl.jussieu.fr/pub/linux/MandrivaLinux/official/2008.1/i586/media/contrib/release with media_info/hdlist.cz
urpmi.addmedia --update contrib_updates ftp://distrib-coffee.ipsl.jussieu.fr/pub/linux/MandrivaLinux/official/2008.1/i586/media/contrib/updates with media_info/hdlist.cz
urpmi.addmedia main ftp://distrib-coffee.ipsl.jussieu.fr/pub/linux/MandrivaLinux/official/2008.1/i586/media/main/release with media_info/hdlist.cz
urpmi.addmedia --update main_updates ftp://distrib-coffee.ipsl.jussieu.fr/pub/linux/MandrivaLinux/official/2008.1/i586/media/main/updates with media_info/hdlist.cz

Fail2ban peut être installé comme suit :

urpmi fail2ban

Ensuite, nous démarrons fail2ban :

/etc/init.d/fail2ban start

Vous trouverez tous les fichiers de configuration de fail2ban dans le répertoire /etc/fail2ban.

3 Configuration de fail2ban

Le comportement par défaut de fail2ban est configuré dans le fichier /etc/fail2ban/jail.conf. Jetez un œil, ce n’est pas difficile à comprendre. Il y a une section [DEFAULT] qui s’applique à toutes les autres sections à moins que les options par défaut ne soient remplacées dans les autres sections.

J’explique ici certaines des options de configuration :

  • ignoreip : C’est une liste d’adresses IP séparées par des espaces qui ne peuvent pas être bloquées par fail2ban. Par exemple, si l’ordinateur à partir duquel vous vous connectez au serveur a une adresse IP statique, vous voudrez peut-être la lister ici.
  • bantime : Temps en secondes qu’un hôte est bloqué s’il a été pris par fail2ban (600 secondes = 10 minutes).
  • maxretry : Nombre max. de tentatives de connexion échouées avant qu’un hôte soit bloqué par fail2ban.
  • filter : Fait référence au fichier de filtre approprié dans /etc/fail2ban/filter.d.
  • action : Fait référence au fichier d’action approprié dans /etc/fail2ban/action.d.
  • logpath : Le fichier journal que fail2ban vérifie pour les tentatives de connexion échouées.

Voici à quoi ressemble mon fichier /etc/fail2ban/jail.conf :

vi /etc/fail2ban/jail.conf

| # Fichier de configuration Fail2Ban # # Auteur : Cyril Jaquier # # $Revision: 617 $ # # Le DEFAULT permet une définition globale des options. Elles peuvent être remplacées # dans chaque prison par la suite. [DEFAULT] # "ignoreip" peut être une adresse IP, un masque CIDR ou un hôte DNS. Fail2ban ne # bannira pas un hôte qui correspond à une adresse de cette liste. Plusieurs adresses peuvent être # définies en utilisant un séparateur d'espace. ignoreip = 127.0.0.1 192.168.0.99 # "bantime" est le nombre de secondes qu'un hôte est banni. bantime = 600 # Un hôte est banni s'il a généré "maxretry" pendant les "findtime" # secondes. findtime = 600 # "maxretry" est le nombre d'échecs avant qu'un hôte soit banni. maxretry = 3 # "backend" spécifie le backend utilisé pour obtenir les modifications de fichiers. Les options # disponibles sont "gamin", "polling" et "auto". Cette option peut être remplacée dans # chaque prison aussi (utilisez "gamin" pour une prison et "polling" pour une autre). # # gamin : nécessite que Gamin (un moniteur de modification de fichiers) soit installé. Si Gamin # n'est pas installé, Fail2ban utilisera le polling. # polling : utilise un algorithme de polling qui ne nécessite pas de bibliothèques externes. # auto : choisira Gamin si disponible et polling sinon. backend = auto # Cette prison correspond à la configuration standard dans Fail2ban 0.6. # L'action mail-whois envoie un e-mail de notification avec une demande whois # dans le corps. [ssh-iptables] enabled = true filter = sshd action = iptables[name=SSH, port=ssh, protocol=tcp] sendmail-whois[name=SSH, [email protected], [email protected]] logpath = /var/log/auth.log maxretry = 5 [proftpd-iptables] enabled = true filter = proftpd action = iptables[name=ProFTPD, port=ftp, protocol=tcp] sendmail-whois[name=ProFTPD, [email protected]] logpath = /var/log/proftpd/proftpd.log maxretry = 6 [sasl-iptables] enabled = true filter = sasl backend = polling action = iptables[name=sasl, port=smtp, protocol=tcp] sendmail-whois[name=sasl, [email protected]] logpath = /var/log/mail/info.log [apache-tcpwrapper] enabled = true filter = apache-auth action = hostsdeny logpath = /var/log/httpd/*error_log maxretry = 6 [postfix-tcpwrapper] enabled = true filter = postfix action = hostsdeny sendmail[name=Postfix, [email protected]] logpath = /var/log/mail/info.log bantime = 300 [courierpop3] enabled = true port = pop3 filter = courierlogin action = iptables[name=%(__name__)s, port=%(port)s] logpath = /var/log/mail/info.log maxretry = 5 [courierimap] enabled = true port = imap2 filter = courierlogin action = iptables[name=%(__name__)s, port=%(port)s] logpath = /var/log/mail/info.log maxretry = 5 [ssh-tcpwrapper] enabled = false filter = sshd action = hostsdeny sendmail-whois[name=SSH, [email protected]] ignoreregex = for myuser from logpath = /var/log/auth.log [vsftpd-notification] enabled = false filter = vsftpd action = sendmail-whois[name=VSFTPD, [email protected]] logpath = /var/log/vsftpd.log maxretry = 5 bantime = 1800 [vsftpd-iptables] enabled = false filter = vsftpd action = iptables[name=VSFTPD, port=ftp, protocol=tcp] sendmail-whois[name=VSFTPD, [email protected]] logpath = /var/log/vsftpd.log maxretry = 5 bantime = 1800 [apache-badbots] enabled = false filter = apache-badbots action = iptables-multiport[name=BadBots, port="http,https"] sendmail-buffered[name=BadBots, lines=5, [email protected]] logpath = /var/www/*/logs/access_log bantime = 172800 maxretry = 1 [apache-shorewall] enabled = false filter = apache-noscript action = shorewall sendmail[name=Postfix, [email protected]] logpath = /var/log/apache2/error_log [ssh-ipfw] enabled = false filter = sshd action = ipfw[localhost=192.168.0.1] sendmail-whois[name="SSH,IPFW", [email protected]] logpath = /var/log/auth.log ignoreip = 168.192.0.1 [named-refused-udp] enabled = false filter = named-refused action = iptables-multiport[name=Named, port="domain,953", protocol=udp] sendmail-whois[name=Named, [email protected]] logpath = /var/log/named/security.log ignoreip = 168.192.0.1 [named-refused-tcp] enabled = false filter = named-refused action = iptables-multiport[name=Named, port="domain,953", protocol=tcp] sendmail-whois[name=Named, [email protected]] logpath = /var/log/named/security.log ignoreip = 168.192.0.1 |

Mon ordinateur client a l’adresse IP statique 192.168.0.99, et comme je ne veux pas être verrouillé, je l’ai ajoutée à la liste ignoreip.

Je veux contrôler les tentatives de connexion à SSH, Apache, Proftpd, Courier-POP3, Courier-IMAP et Sasl, donc j’ai défini enabled sur true pour ces services et sur false pour tous les autres services. Veuillez noter que certains services tels que SSH peuvent être bloqués soit par iptables soit par TCPWrappers (/etc/hosts.deny). Décidez vous-même quelle méthode vous préférez.

Assurez-vous de remplacer l’adresse e-mail [email protected] par votre propre adresse e-mail afin que vous soyez notifié lorsque quelqu’un est bloqué par fail2ban.

Si vous comparez le fichier avec le /etc/fail2ban/jail.conf par défaut, vous remarquerez également que j’ai changé certains fichiers journaux car les fichiers journaux dans le /etc/fail2ban/jail.conf par défaut ne sont pas corrects pour Mandriva 2008.1.

Chaque fois que nous modifions la configuration de fail2ban, nous devons redémarrer fail2ban, donc voici ce que nous faisons maintenant :

/etc/init.d/fail2ban restart

C’est déjà tout. Fail2ban journalise dans /var/log/fail2ban.log, donc vous pouvez vérifier ce fichier pour savoir si/quel hôte a été bloqué. Si un hôte a été bloqué par fail2ban, cela ressemble à ceci :

2008-08-12 17:49:09,466 fail2ban.actions: WARNING [apache-tcpwrapper] Ban 1.2.3.4  
2008-08-12 18:08:33,213 fail2ban.actions: WARNING [sasl-iptables] Ban 1.2.3.4  
2008-08-12 18:26:37,769 fail2ban.actions: WARNING [courierlogin] Ban 1.2.3.4  
2008-08-12 18:39:06,765 fail2ban.actions: WARNING [courierimap] Ban 1.2.3.4

Vous pouvez également vérifier votre pare-feu pour voir si des hôtes sont actuellement bloqués. Il suffit d’exécuter

iptables -L

Pour les services qui utilisent TCPWrappers pour bloquer les hôtes, jetez un œil à /etc/hosts.deny.

Liens

Share: X/Twitter LinkedIn

Recevez de nouveaux articles dans votre boîte de réception.

Aucun spam. Désabonnez-vous à tout moment.