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

Prévenir les attaques par force brute avec Fail2ban sur OpenSUSE 10.3

Prévenir les attaques par force brute avec Fail2ban sur OpenSUSE 10.3

Version 1.0
Auteur : Falko Timme

Dans cet article, je vais montrer comment installer et configurer fail2ban sur un système OpenSUSE 10.3. 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 OpenSUSE 10.3. Il est livré 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

Fail2ban est disponible dans le dépôt Packman, donc nous devons d’abord l’activer :

yast2 

Dans YaST, allez dans Logiciel > Dépôts communautaires :

Ensuite, activez le dépôt Packman et cliquez sur [Terminer] :

Quittez YaST ensuite :

Ensuite, fail2ban peut être installé comme suit :

yast2 -i fail2ban

Puis nous devons créer les liens de démarrage système pour fail2ban et le démarrer :

chkconfig –add 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 à celui-ci, il 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 : Il s’agit d’une liste séparée par des espaces d’adresses IP 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 pendant lequel un hôte est bloqué s’il a été pris par fail2ban (600 secondes = 10 minutes).
  • maxretry : Nombre maximum de tentatives de connexion échouées avant qu’un hôte ne 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 de Fail2Ban # # Auteur : Cyril Jaquier # # $Revision: 611 $ # # 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 pendant lequel un hôte est banni. bantime = 600 # Un hôte est banni s'il a généré "maxretry" pendant les "findtime" # secondes précédentes. findtime = 600 # "maxretry" est le nombre d'échecs avant qu'un hôte ne 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 également (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/messages 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/messages maxretry = 6 # Cette prison force le backend à "polling". [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 # Ici, nous utilisons TCP-Wrappers au lieu de Netfilter/Iptables. "ignoreregex" est # utilisé pour éviter de bannir l'utilisateur "myuser". [ssh-tcpwrapper] enabled = false filter = sshd action = hostsdeny sendmail-whois[name=SSH, [email protected]] ignoreregex = for myuser from logpath = /var/log/messages # Cette prison démontre l'utilisation de jokers dans "logpath". # De plus, il est possible de donner d'autres fichiers sur une nouvelle ligne. [apache-tcpwrapper] enabled = true filter = apache-auth action = hostsdeny logpath = /var/log/apache2/error_log maxretry = 6 # Le chemin hosts.deny peut être défini avec l'argument "file" s'il n'est # pas dans /etc. [postfix-tcpwrapper] enabled = true filter = postfix action = hostsdeny sendmail[name=Postfix, [email protected]] logpath = /var/log/mail bantime = 300 # Ne bannissez personne. Juste rapporter des informations sur l'hôte distant. # Une notification est envoyée au maximum toutes les 600 secondes (bantime). [vsftpd-notification] enabled = false filter = vsftpd action = sendmail-whois[name=VSFTPD, [email protected]] logpath = /var/log/messages maxretry = 5 bantime = 1800 # Même chose que ci-dessus mais avec le bannissement de l'adresse IP. [vsftpd-iptables] enabled = false filter = vsftpd action = iptables[name=VSFTPD, port=ftp, protocol=tcp] sendmail-whois[name=VSFTPD, [email protected]] logpath = /var/log/messages maxretry = 5 bantime = 1800 # Bannir les hôtes dont l'agent identifie les robots spammeurs parcourant le web # à la recherche d'adresses email. Les sorties de mail sont mises en mémoire tampon. [apache-badbots] enabled = true filter = apache-badbots action = iptables-multiport[name=BadBots, port="http,https"] sendmail-buffered[name=BadBots, lines=5, [email protected]] logpath = /var/log/apache2/access_log bantime = 172800 maxretry = 1 [courierpop3] enabled = true port = pop3 filter = courierlogin action = iptables[name=%(__name__)s, port=%(port)s] logpath = /var/log/mail maxretry = 5 [courierimap] enabled = true port = imap2 filter = courierlogin action = iptables[name=%(__name__)s, port=%(port)s] logpath = /var/log/mail maxretry = 5 |

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 par 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 informé 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 OpenSUSE 10.3.

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 :

2007-10-07 17:49:09,466 fail2ban.actions: WARNING [apache-tcpwrapper] Ban 1.2.3.4
2007-10-07 18:08:33,213 fail2ban.actions: WARNING [sasl-iptables] Ban 1.2.3.4
2007-10-07 18:26:37,769 fail2ban.actions: WARNING [courierlogin] Ban 1.2.3.4
2007-10-07 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 des 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.