Mise en place de Fail2ban sur Centos

Publié par Tpeltier le

logo fail2banFail2ban permet de surveiller les échecs de connexion ayant un comportement malveillants et de bloquer pour un temps donné les adresses IP à en sont à l’origine. Cela permet de bloquer la plupart des attaques de déni de service (DDOS) et la récupération des mots de passes par brute force.
Il analyse les logs pour détecter trop d’échecs de mot de passe, recherche d’exploits, etc.
Lorsqu’une machine distante correspond à ces critères, il créé créé automatiquement une règle de blocage sur le pare-feu.
Plutôt pratique ! Et justement un de mes serveurs étant régulièrement sujet à ce genre de tentatives de connexion via ssh, c’est le moment de mettre en place Fail2ban.

L’installation

Plus que simple puisque sur Centos il suffit d’installer le package avec la commande :

# yum install epelrelease    ( Il faut installer le repository des extra-packages de Centos si ce n’est déjà fait )

# yum install fail2ban

# systemctl enable fail2ban.services    On active le package

Configuration

Ce qui est pratique avec Fail2ban, c’est que l’installation par défaut permet déjà de couvrir, à priori, tous les besoins basiques nécessaires à la protection de votre serveur. Cela n’empêche pas de configurer certaines options à sa convenance.

  • le fichier de configuration de Fail2ban est :  /etc/fail2ban/jail.conf que l’on évitera de modifier
  • Il vaut mieux créer son propre fichier dans /etc/fail2ban/jail.d/jail.local avec ses propres options.

Le fichier /etc/fail2ban/jail.conf contient beaucoup de paramètres commentés qui vont permettre de créer son propre fichier de configuration.

A savoir qu’il y a un ordre de prise en compte des fichiers de configurations :

  1. /etc/fail2ban/jail.conf
  2. /etc/fail2ban/jail.d/*.conf (par ordre alphabétique de nom de fichier)
  3. /etc/fail2ban/jail.local
  4. /etc/fail2ban/jail.d/*.local (par ordre alphabétique de nom de fichier)

Voici une bonne base avec ce fichier jail.local pour activer la protection contre les connexions SSH :

[DEFAULT]
# Ban hosts for 1 hour after they perform 3 failed login attempts within 10 minutes
bantime = 3600
findtime = 600
maxretry = 3

# Never ban the following space-separated IP addresses/masks
ignoreip = 127.0.0.1/8 192.168.1.0/24


# Override /etc/fail2ban/jail.d/00-firewalld.conf
# to ensure that nftables will be used for firewall configuration
banaction = nftables-multiport
banaction_allports = nftables-allports

# Choose what to do when issuing a ban:
# $(action_)s : [default]
# sets the OS firewall to reject all incoming calls
# from that IP address for the specified amount of time
# $(action_mw)s : same as above + send and alert e-mail
# $(action_mwl)s : same as above + adds relevant log lines to the e-mail
# action = $(action_)s

# Send fail2ban alerts & warnings to the following e-mail address
destemail = root@localhost
sendername = Fail2Ban
mta = sendmail

[sshd]
# Enables the sshd jail
enabled = true

Après chaque modification de configuration, il faut relancer Fail2ban avec la commande : # systemctl restart fail2ban.services

Quelques explications supplémentaires.

Le paramètre « ignoreip » très important pour éviter de se retrouver bloqué sur son propre réseau !! Remplacer 192.168.1.0/24 pour votre propre réseau.

Les paramètres « banaction » et « banaction_allports ». Dans mon cas j’utilise nftables pour le firewall donc les paramètres sont :

banaction = nftables-multiport
banaction_allports = nftables-allports

Dans le cas d’Iptables ce serait :

banaction = iptables-multiport
banaction_allports = iptables-allports

Surveiller

Les commandes suivantes permettent de surveiller le fonctionnement de Fail2ban.

Connaitre le status du service Fail2ban :  # systemctl status fail2ban

Surveiller les logs Fail2ban depuis le dernier démarrage du service : # journalctl b u fail2ban

Retourne le nom et le nombre des « Jails » : # fail2banclient status

Retourne les détails d’un « jail » spécifique. Ici le « jail » sshd :  # fail2banclient status sshd

Et enfin la commande qui permet de lister les derniers évenements dans les logs Fail2ban : # tail F /var/log/fail2ban.log

Fail2Ban client

failban2-client vous permet de gérer entièrement fail2ban, cela va des « jails » aux IP bannies.
Il serait très long de donner tous les commandes mais voici quelques exemples utiles.

Pour vérifier les status de fail2ban : # fail2ban-client status

Pour vérifier le status d’un service  Fail2ban particulier :

# fail2ban-client status sshd
Status for the jail: sshd
|- Filter
| |- Currently failed: 5
| |- Total failed: 1293
| `- Journal matches: _SYSTEMD_UNIT=sshd.service + _COMM=sshd
`- Actions
|- Currently banned: 25
|- Total banned: 308
`- Banned IP list: 118.172.203.5 139.198.6.124 187.149.58.56 106.75.26.38 27.223.99.130 136.243.39.106 51.38.188.101 86.105.212.78 59.120.227.134 103.84.71.58 186.147.129.110 52.178.155.67 198.12.249.249 111.231.119.93 128.199.254.241 27.34.251.60 104.236.5.5 139.186.136.121 49.235.68.79 139.59.81.182 52.229.31.149 42.192.76.45 106.13.73.59 150.136.248.42 106.55.161.191
#

Pour bannir l’ip avec fail2-banclient : # fail2ban-client set ‘JailName’ banip ‘IPAddress’

Pour dé-bannir une adresse IP : # fail2ban-client get ‘JailName’ actionunban ‘IPAddress’

Pour débannir toutes les adresses IP : # fail2ban-client unban –all

Et bien d’autres commandes sont disponibles. N’hésitez pas à consulter l’aide et le man.

Catégories : Linux

0 commentaire

Laisser un commentaire

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

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.