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é.

$ sudo grep "Failed password for root" /var/log/secure | wc -l
1584

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 CentOS, 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.

$ sudo yum install 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/sshd.local et l’éditer comme ceci.

# /etc/fail2ban/jail.d/sshd.local

[DEFAULT]
bantime = 86400
ignoreip = 78.197.22.147 163.172.63.88

[sshd]
enabled = true
  • La directive bantime définit la durée du bannissement, qui est de dix minutes (600 secondes) par défaut. Je la passe carrément à une journée (86400 secondes).
  • La directive ignoreip définit 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

Basculer SELinux en mode permissif.

$ sudo setenforce 0

Activer et démarrer le service.

$ sudo systemctl enable fail2ban --now

Afficher l’état de Fail2ban.

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

Suivi des opérations

Pour suivre en direct le bannissement des adresses IP trop insistantes, on peut afficher les logs de Fail2ban comme ceci.

$ sudo tail -f /var/log/fail2ban.log

Une règle de pare-feu est en place pour bloquer les tentatives d’intrusion.

$ sudo firewall-cmd --direct --get-all-rules
ipv4 filter INPUT_direct 0 -p tcp -m multiport --dports ssh -m set 
  --match-set f2b-sshd src -j REJECT --reject-with icmp-port-unreachable

Nous disposons d’une liste f2b-sshd composée de toutes les adresses IP générées par les tentatives de connexion échouées. Affichons le contenu de cette liste.

$ sudo ipset list f2b-sshd
Name: f2b-sshd
Type: hash:ip
Revision: 4
Header: family inet hashsize 1024 maxelem 65536 timeout 86400
Size in memory: 13464
References: 1
Number of entries: 154
Members:
222.236.198.50 timeout 86337
202.88.241.107 timeout 86337
218.92.0.173 timeout 86337
54.37.205.162 timeout 86338
140.143.133.134 timeout 86337
211.68.251.62 timeout 86337
49.212.211.207 timeout 86338
167.99.75.174 timeout 86337
64.225.67.200 timeout 86338
58.215.215.134 timeout 86338
218.92.0.138 timeout 86337
...

Alternativement, la commande suivante permet également de lister les adresses IP bloquées.

$ sudo fail2ban-client status sshd
Status for the jail: sshd
|- Filter
|  |- Currently failed: 11
|  |- Total failed:     134
|  `- Journal matches:  _SYSTEMD_UNIT=sshd.service + _COMM=sshd
`- Actions
   |- Currently banned: 14
   |- Total banned:     14
   `- Banned IP list:   222.186.31.83 222.186.42.137 60.235.24.222 133.242.52.96 
45.88.12.165 222.186.190.14 218.92.0.133 222.186.30.76 180.247.21.105 222.186.173.226 
218.92.0.158 222.186.180.147 218.92.0.206 222.186.190.2

Fail2ban et SELinux

Il ne reste plus qu’à régler un problème relatif à SELinux.

$ sudo ausearch -c 'f2b/server' --raw | sudo audit2allow -M my-f2bserver
$ sudo semodule -i my-f2bserver.pp

On peut également se retrouver confronté au cas de figure suivant.

$ sudo ausearch -c 'f2b/f.sshd' --raw | sudo audit2allow -M my-f2bfsshd
$ sudo semodule -i my-f2bfsshd.pp

Vérifier si le problème est réglé.

$ echo | sudo tee /var/log/audit/audit.log
$ sudo systemctl restart fail2ban
$ sudo sealert -a /var/log/audit/audit.log
100% done
found 0 alerts in /var/log/audit/audit.log

Repasser en mode renforcé.

$ sudo setenforce 1

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

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