Fail2ban contre les attaques brutes-force

Si vous être propriétaire d’un serveur quelconque connecté à Internet, vous n’êtes pas sans savoir qu’il est exposé à de nombreuses attaques. Parmi elles, le brute-force. Cette attaque consiste à trouver votre mot de passe SSH en les essayant tous les uns à la suite des autres ou en utilisant des dictionnaires (ce sont des listes contenant les mots de passe les plus utilisés comme admin, 123456, etc…). Ces attaques sont généralement menées par des robots qui visent des dizaines de serveurs en même temps. Il se connectent sans cesse à votre serveur grâce à votre port SSH et essayent beaucoup de combinaisons de mot de passe jusqu’à trouver le bon (généralement, une tentative est menée toutes les 2 à 3 secondes).

Enfin, fois que les pirates ont accès à un serveur, ils peuvent par exemple s’en approprier pour exécuter d’autres attaques brute-force contre d’autres serveurs, ou bien utiliser votre serveur pour spammer des gens (par mail, par exemple). De plus, le responsable, si il y a une plainte car des attaques ont été menées depuis votre serveur, c’est vous (à moins que vous ne démontriez que vous avez vous-même été victime d’attaque et que vous n’avez plus le contrôle sur votre serveur, d’où l’importance de conserver vos logs).

Il existe beaucoup de solutions, celle que je vais vous présenter aujourd’hui, c’est Fail2ban (d’autres méthodes seront proposés dans de futurs articles). Fail2ban est un programme qui analyse vos logs système afin de détecter les attaques brute-force et ainsi bloquer l’adresse IP attaquante.

Vous pouvez consulter la manuel en anglais Fail2Ban Configuration

La commande suivante permet d'installer fail2ban avec les systèmes Debian et dérivées :

sudo apt install fail2ban

Exemple d'installation de fail2ban sous Raspbian 10

Éditons le fichier /etc/fail2ban/jail.local

Liste des fichiers et dossier de configuration par défaut de fail2ban sous Raspbian 10 :

action.d/            fail2ban.d/          jail.conf            paths-arch.conf      paths-debian.conf
fail2ban.conf        filter.d/            jail.d/              paths-common.conf    paths-opensuse.conf

Il y a deux fichiers principaux de configuration pour fail2ban : /etc/fail2ban/fail2ban.conf et /etc/fail2ban/jail.conf. D'autres fichiers complémentaires peuvent être dans /etc/fail2ban/filter.d/*.conf et /etc/fail2ban/action.d/*.conf

/etc/fail2ban/fail2ban.conf est le fichier de configuration pour le paramétrage du démon fail2ban. Il s'agit des paramètres loglevel, fichier log, port, socket et pid.

/etc/fail2ban/jail.conf est le fichier des recettes avec des filtres et des actions. Il permet de définir les règles de bannissements.

Les filtres qui spécifient les règles de détections d'échec d'identification sont à ajouter au dossier filter.d

Les actions qui définissent les règles de bannissement ou non des adresses IP sont à ajouter au dossier filter.d

Il est vivement conseillé d'apporter des modifications de configuration dans des fichiers nommés fail2ban.local et jail.local. Ou ajoutez des fichiers aux dossiers fail2ban.d/ et jail.d/.

L'ordre de chargement des fichiers de configuration est le suivant :

  1. jail.conf
  2. jail.d/*.conf (dans l'ordre alphabétique)
  3. jail.local
  4. jail.d/*.
  5. local (dans l'ordre alphabétique).
sudo nano /etc/fail2ban/jail.local

Pour ajouter les options suivantes :

[DEFAULT]
ignoreip = 127.0.0.1/8 
bantime  = 600
maxretry = 2
destemail = root@localhost
action = %(action_mwl)s

[sshd]
enabled  = true

Avec ignoreip, les IPs qui seront spécifiées sur cette ligne ne seront par bloquées. Je vous conseille de laisser l’adresse actuelle (qui doit être 127.0.0.1/8), d’y ajouter un espace afin de la séparer et d’y mettre votre adresse (ainsi que celles de toutes les personnes qui sont susceptibles d’accéder à votre serveur sans pour autant l’attaquer)

bantime est le nombre de secondes qu’une adresse va être bloquée si elle attaque votre serveur. 10 minutes est très peu suffisant, un rapide calcul vous permet d’en être sûr. Admettons que vous êtes attaqué par 20 machines différentes, toutes à 1 mot de passe toutes les 2 secondes. Vous avez donc 10 tentatives par seconde. Si fail2ban bloque au bout de 6 tentatives par IP, 120 mots de passe sont essayés toutes les 10 minutes, soit 16 800 par jour. Donc, 10 minutes ne représentent pas grand chose face au nombre de machines qui vous attaquent.

maxretry est le nombre de tentatives auxquelles a le droit un utilisateur avant de se faire bloquer.

destemail est l’adresse mail à laquelle seront envoyés les mails de notification (quand une adresse sera bloquée)

action permet d'effectuer des actions.
action = %(action_mw)s permet de bannir et d'envoyer un mail avec le pays ou l’email d’abuse concernant l’IP qui a été bannie.
action = %(action_mwl)s ajoute les lignes de logs ou apparaissent l’IP correspondante

Ajouter les règles spécifiques

[sshd]
enabled = true
port = 1234


[postfix]
port = smtp,submission
enabled = true

[dovecot]
port = imaps
enabled = true

N'oubliez pas de redémarrer le service sudo service fail2ban restart

  • informatique/applications/fail2ban.txt
  • Dernière modification : 2023/02/10 23:48
  • de Cédric ABONNEL