Fail2banLorsqu’on fait de l’infogérance sur un serveur dédié – c’est-à-dire une machine avec une ouverture frontale sur Internet – c’est un peu comme lorsqu’on construit une banque dans un quartier chaud. On a à peine fini les travaux de peinture et les meubles ne sont pas encore installés, mais voilà déjà les voitures bélier qui arrivent pour défoncer la porte d’entrée.

Concrètement, voilà à quoi ressemblent les tentatives de connexion hostiles sur un serveur dédié fraîchement installé au bout de 48 heures :

# grep "Failed password for root" /var/log/secure  | wc -l
24614

Fail2ban est une solution simple et efficace pour mettre tout ce petit monde dehors. C’est une application qui lit et analyse les logs des services comme SSH et cherche des motifs comme les tentatives de connexion infructueuses. Les adresses IP trouvées sont ensuite bannies à l’aide du pare-feu.

Installation

Sous Red Hat Enterprise Linux et Rocky Linux, Fail2ban est fourni par le dépôt de paquets EPEL. Le métapaquet fail2ban dépend d’une série de paquets :

  • fail2ban-server
  • fail2ban-sendmail
  • fail2ban-firewalld

La mise en place d’une configuration simple intégrée au pare-feu FirewallD nécessite les seuls paquets fail2ban-server et fail2ban-firewalld :

# dnf install -y fail2ban-server fail2ban-firewalld

Configuration

Les fichiers de configuration de Fail2ban sont rangés dans l’arborescence /etc/fail2ban. La bonne pratique consiste ici à ne pas toucher au fichier de configuration /etc/fail2ban/jail.conf.

Dans un premier temps, je souhaite protéger le service SSH. Je vais donc créer un fichier /etc/fail2ban/jail.d/custom.conf pour protéger le service SSH contre les attaques par force brute :

# /etc/fail2ban/jail.d/custom.conf

[DEFAULT]
bantime = 24h 
ignoreip = 88.161.127.222 163.172.81.8

[sshd]
enabled = true
  • La directive bantime définit la durée du bannissement, qui est de dix minutes par défaut. Je la passe carrément à une journée.
  • La directive ignoreip définit la ou les adresses IP pour lesquelles Fail2ban est censé faire une exception, séparées par un espace. En l’occurence, j’ai indiqué l’IP fixe de mon bureau et celle du serveur de sauvegardes qui se connecte automatiquement à cette machine via SSH.

Mise en service

J’active et je démarre le service :

# systemctl enable fail2ban --now

J’affiche l’état de Fail2ban :

# fail2ban-client status
Status
|- Number of jail:      1
`- Jail list:   sshd

AstuceNotez au passage que sous RHEL 7 et les clones compatibles comme CentOS 7, Fail2ban posait une série de problèmes avec SELinux. Apparemment, ils ont tous été résolus dans la version 8 :

# sealert -a /var/log/audit/audit.log
100% done
found 0 alerts in /var/log/audit/audit.log

Suivi des opérations

Pour suivre en direct le bannissement des adresses IP trop insistantes, je peux afficher les logs de Fail2ban « à chaud » comme ceci :

# tail -f /var/log/fail2ban.log 
2022-12-03 15:56:58,798 ... : NOTICE  [sshd] Ban 43.134.44.198
2022-12-03 15:57:01,124 ... : NOTICE  [sshd] Ban 109.249.179.201
2022-12-03 15:57:03,389 ... : NOTICE  [sshd] Ban 122.248.43.228
2022-12-03 15:57:05,590 ... : NOTICE  [sshd] Ban 69.49.245.194
2022-12-03 15:57:07,802 ... : NOTICE  [sshd] Ban 14.63.203.207

J’affiche la liste des adresses IP bannies :

# fail2ban-client status sshd
Status for the jail: sshd
|- Filter
|  |- Currently failed: 8
|  |- Total failed:     92
|  `- Journal matches:  _SYSTEMD_UNIT=sshd.service + _COMM=sshd
`- Actions
   |- Currently banned: 7
   |- Total banned:     7
   `- Banned IP list:   49.51.22.147 43.134.44.198 109.249.179.201 122.248.43.228 
                        69.49.245.194 14.63.203.207 165.227.123.201

La rédaction de cette documentation demande du temps et des quantités significatives de café espresso. Vous appréciez ce blog ? Offrez un café au rédacteur en cliquant sur la tasse.

 


0 commentaire

Laisser un commentaire

Avatar placeholder

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *