image de mise en avant pour l'article installation fail2ban sur un serveur ubuntu 22.04

Installation et configuration de fail2ban sur Ubuntu 22.04

Temps de lecture estimé: 3 minutes

J’ai fait un article pour sécuriser un minimum ssh après une nouvelle installation d’Ubuntu 22.04. Pour aller plus loin, je vais rajouter Fail2ban pour bloquer les utilisateurs qui tenteront de se connecter sans succès un trop grand nombre de fois.

Fail2ban surveille différents fichiers de logs de différentes applications (dans mon cas je vais l’utiliser pour ssh mais sur mon autre serveur j’ai quelques filtres pour Apache ) et suivant certains schémas, ou certains comportements plus ou moins répétés dans les logs, fail2ban va blocker les IPs fautives

Installation de Fail2ban

Donc pour commencer, l’installation

sudo apt install fail2ban

Activation de fail2ban au démarrage

On n’oublie pas de l’activer pour qu’il se lance au démarrage

systemctl enable fail2ban

Configuration de fail2ban

On créer son fichier de config, soit à partir du fichier général, soit dans /etc/fail2ban/jail.d/ (d’ailleurs dans /etc/fail2ban/jail.d/ il y a déjà defaults-debian.conf qui active par défaut la protection sshd

Dans mon cas

sudo cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local

Ensuite on passe à l’édition du fichier

Sudo nano /etc/fail2ban/jail.local

Dans la section

[DEFAULT]

j’adapte les valeurs de

  • bantime : le délai où une adresse IP est bannie
  • findtime : le délai pour remonter dans les journaux
  • maxretry : le nombre de tentatives au delà duquel le nom d’hôte est banni
# "bantime" is the number of seconds that a host is banned.
bantime  = 10m

# A host is banned if it has generated "maxretry" during the last "findtime"
# seconds.
findtime  = 10m

# "maxretry" is the number of failures before a host get banned.
maxretry = 5

Je décommente Ignoreip et j’ajoute mon IP local

ignoreip = 127.0.0.1/8 ::1 192.168.1.88

Et puis ensuite, j’active les prisons/jail qui m’intéressent en ajoutant

enabled = true

Dans les sections correspondantes, notamment pour sshd

[sshd]
enabled = true
mode   = aggressive
port    = ssh,1234 
logpath = %(sshd_log)s
backend = %(sshd_backend)s

Un petit reload qui va bien du service fail2ban

sudo systemctl reload fail2ban

Vérifier le status de fail2ban

Et puis pour vérifier que la règle est bien active

sudo fail2ban-client status

Ce qui me donne bien dans mon cas

Status
|- Number of jail:      1
`- Jail list:   sshd

et pour avoir plus de détail sur une des prisons

fail2ban-client status sshd

Ce qui me donne

Status for the jail: sshd
|- Filter
| |- Currently failed: 0
| |- Total failed: 0
| 
- File list: /var/log/auth.log 
- Actions
|- Currently banned: 0
|- Total banned: 0
`- Banned IP list:

Vérifier le fonctionnement d’un filtre

Dans une utilisation plus avancée, on peut créer ses propres filtres. c’est ce que j’ai fait pour éviter les sniffer/ceux qui teste aléatoirement des adresses comme admin.php ou xmlrpc.php

pour tester un filtre et une regex sur un fichier de log, on peut utiliser fail2ban-regex. par exemple moi je voulais tester mon filtre sniff-apache.conf

#sniff-apache.conf
[Definition]
failregex = ^<HOST> .* "POST .*xmlrpc.php.*
	^<HOST> .* "GET .*/wordpress/wp-login.php.*
	^<HOST> .* "GET .*/blog/wp-login.php.*
	^<HOST> .* "GET .*/wp/wp-login.php.*
	^<HOST> .* "GET .*/sql/myadmin/index.php.*
	^<HOST> .* "GET .*/mysql/pMA/index.php.*
	^<HOST> .* "GET .*/db/dbweb/index.php.*
	^<HOST> .* "GET .*/admin/index.php.*
	^<HOST> .* "GET .*/sql/myadmin/index.php.*
	^<HOST> .* "GET .*/sql/phpMyAdmin2/index.php.*
	^<HOST> .* "GET .*/mysqlmanager/index.php.*
ignoreregex =

donc je test mon filtre sur mon fichier de log apache

sudo fail2ban-regex /var/log/apache2/access.log /etc/fail2ban/filter.d/sniff-apache.conf 

ça me permet de voir qu’en appliquant ce filtre, 20 lignes sont concernées

Running tests
=============

Use   failregex filter file : sniff-apache, basedir: /etc/fail2ban
Use         log file : /var/log/apache2/access.log
Use         encoding : UTF-8


Results
=======

Failregex: 20 total
|-  #) [# of hits] regular expression
|   5) [2] ^<HOST> .* "GET .*/sql/myadmin/index.php.*
|   6) [2] ^<HOST> .* "GET .*/mysql/pMA/index.php.*
|   7) [2] ^<HOST> .* "GET .*/db/dbweb/index.php.*
|   8) [6] ^<HOST> .* "GET .*/admin/index.php.*
|   9) [2] ^<HOST> .* "GET .*/sql/myadmin/index.php.*
|  10) [2] ^<HOST> .* "GET .*/sql/phpMyAdmin2/index.php.*
|  11) [4] ^<HOST> .* "GET .*/mysqlmanager/index.php.*
`-

Ignoreregex: 0 total

Date template hits:
|- [# of hits] date format
|  [614] Day(?P<_sep>[-/])MON(?P=_sep)ExYear[ :]?24hour:Minute:Second(?:\.Microseconds)?(?: Zone offset)?
`-

Lines: 614 lines, 0 ignored, 18 matched, 596 missed
[processed in 0.12 sec]

Missed line(s): too many to print.  Use --print-all-missed to print all 596 lines

retirer une adresse IP bannie

si pour X raisons tu as une adresse IP qui a été bannie et que tu souhaites la dé bannir

fail2ban-client set NOM_DE_LA_JAIL unbanip ADRESSE_IP 

Voilà! l’installation et la configuration sommaire de fail2ban sont finies. Si tu souhaites sécuriser un peu plus ssh, tu peux aller voir l’article que j’ai fait ici pour sécuriser ssh sur un serveur Ubuntu 22.04.

N’hésite pas à me faire un retour! En attendant, je te dis à bientôt pour de nouvelles aventures.

Partagez l'article:
FacebookTwitterEmailLinkedIn

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée.

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