Lorsqu’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
Notez 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