Serveur/Fail2ban

Fail2Ban

fail2ban est un service qui lit les logs système et recherche des erreurs d’authentification, suivant les règles personnalisées, il va ajouter des règles à iptables pour bannir l’adresse IP source.

Installation

#Installation du paquet
sudo apt-get install fail2ban

Configuration

La configuration ainsi que les règles de bannissement se situent dans /etc/fail2ban/jail.conf

Dans la première partie, sont définis des paramètres par défaut.

[DEFAULT]
# "ignoreip" can be an IP address, a CIDR mask or a DNS host. Fail2ban will not
# ban a host which matches an address in this list. Several addresses can be
# defined using space separator.
ignoreip = 127.0.0.1/8

# "bantime" is the number of seconds that a host is banned.
bantime  = 600
# A host is banned if it has generated "maxretry" during the last "findtime"
# seconds.
findtime  = 600
# "maxretry" is the number of failures before a host get banned.
maxretry = 5

Ce qui signifie que le bannissement d’une durée de 600sec (bantime) interviendra au bout de 5 erreurs de login (maxretry) sur une période de 600 sec (findtime).
Ces valeurs par défaut ne sont pas correctes, il faut augmenter les temps.
Un bannissement de plusieurs heures à quelques jours ne semble pas aberrent.
Pour ce qui est de la période de « recherche » (findtime), il faut aussi l’augmenter mais sachant que fail2ban doit utiliser les logs, si nous utilisons une période trop importante, il va devoir analyser une importante quantité de log, ce qui pourra se ressentir en terme de performance. Donc nous définirons une période de recherche de plusieurs minutes à quelques heures.
Pour ce qui est du nombre d’échec, il est envisageable de le diminuer.

Ce qui pourrait donner :

[DEFAULT]
ignoreip = 127.0.0.1/8
bantime  = 10800 #3h
findtime  = 900 #15 mn
maxretry = 3

Sachant qu’une règle existe concernant les récidivistes qui seront bannies durant 7 jours s’ils se font bannir 5 fois en une journée.

[recidive]

logpath  = /var/log/fail2ban.log
banaction = iptables-allports
bantime  = 604800  ; 1 week
findtime = 86400   ; 1 day
maxretry = 5

Il faut donc adapter l’ensemble de ces règles pour garder une cohérence.
Il faut aussi garder à l’esprit que fail2ban purge sa base de données, les bannissements restent dans la base de données durant une journée, voir le fichier de config de fail2ban /etc/fail2ban/fail2ban.conf

# Options: dbpurgeage
# Notes.: Sets age at which bans should be purged from the database
# Values: [ SECONDS ] Default: 86400 (24hours)
dbpurgeage = 86400

Il est ensuite possible de redéfinir pour chaque règle ces valeurs.

Les règles de bannissement sont définies à la suite du fichier.
Ces « prisons » sont au format

[nom]

port     = ssh,30 #Port et/ou service
logpath  = %(auditd_log)s #Fichier de log
maxretry = x #Valeur redéfinie localement

Nota : Il faudra penser à ajouter les numéros des ports si nous les avons modifiés pour certains services (exemple : ssh redéfini en 30).

#Connaître le statut d'une prison
sudo fail2ban-client status sshd
Status for the jail: sshd
|- Filter
|  |- Currently failed:	1 #Un échec durant findtime
|  |- Total failed:	11
|  `- File list:	/var/log/auth.log
`- Actions
   |- Currently banned:	0 #Aucun bannissement en cours
   |- Total banned:	2 #2 bannissements dans le passé
   `- Banned IP list:	

Après m’être fait bannir

sudo fail2ban-client status sshd
Status for the jail: sshd
|- Filter
|  |- Currently failed:	0
|  |- Total failed:	12
|  `- File list:	/var/log/auth.log
`- Actions
   |- Currently banned:	1 #1 bannissement en cours
   |- Total banned:	3
   `- Banned IP list:	xx.xx.xx.xx #Adresse(s) Ip des bannis

Log

#Visualiser le fichier de log des authentifications
sudo more /var/log/auth.log
#Visualiser les logs de fail2ban
sudo more /var/log/fail2ban.log

Exemple de logs dans fail2ban.log

2016-11-05 15:11:59,292 fail2ban.filter         [5948]: INFO    [sshd] Found xx.xx.xx.xx
2016-11-05 15:12:01,111 fail2ban.filter         [5948]: INFO    [sshd] Found xx.xx.xx.xx
2016-11-05 15:12:11,024 fail2ban.filter         [5948]: INFO    [sshd] Found xx.xx.xx.xx
2016-11-05 15:12:11,827 fail2ban.actions        [5948]: NOTICE  [sshd] Ban xx.xx.xx.xx
2016-11-05 15:13:12,105 fail2ban.actions        [5948]: NOTICE  [sshd] Unban xx.xx.xx.xx

Il est assez verbeux, il est possible de restreindre et de passer en NOTICE par exemple.
On constate dans les logs ci-dessus que les BAN et UNBAN sont en NOTICE, on peut vouloir tracer cela dans le fichier de logs.
Pour ce faire, il faut éditer le fichier /etc/fail2ban/fail2ban.conf

# Fail2Ban main configuration file
[Definition]

# Option: loglevel
# Notes.: Set the log level output.
#         CRITICAL
#         ERROR
#         WARNING
#         NOTICE
#         INFO
#         DEBUG
# Values: [ LEVEL ]  Default: ERROR
#
loglevel = INFO

Sources :

Doc Ubuntu – fail2ban

One Response to Serveur/Fail2ban

  1. Pingback: Serveur/SSH | Je bricole

Laisser un commentaire

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