Mise en place de Fail2ban sur Centos
Fail2ban 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 epel–release ( 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 :
- /etc/fail2ban/jail.conf
- /etc/fail2ban/jail.d/*.conf (par ordre alphabétique de nom de fichier)
- /etc/fail2ban/jail.local
- /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 » : # fail2ban–client status
Retourne les détails d’un « jail » spécifique. Ici le « jail » sshd : # fail2ban–client 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.
0 commentaire