K

- Base de connaissances

Fail2Ban

jeudi 8 décembre 2016, par webmestre

Installation de fail2ban

Sous distribution debian ou Ubuntu, il suffit de taper la ligne de commande suivante :

apt-get install fail2ban

Les fichiers de configuration de fial2ban

Suivant les standards, les fichiers de configuration de fail2ban se trouvent à l’emplacement /etc/fail2ban/ :

/etc/fail2ban/
  ├── action.d
  ├── filter.d
  ├── fail2ban.conf
  └── jail.conf

Le fichier fail2ban.conf est le fichier de configuration général de fail2ban (paramétrages généraux, ...).

Le fichier jail.conf est le fichier de paramétrage des règles de filtrages pour bannir une IP fonction d’un protocole, d’une attaque,...

Ensuite, il est recommandé de faire une copie de /etc/fail2ban/jail.conf vers /etc/fail2ban/jail.local, et de modifier dans ce dernier les configurations de base avec les paramètres spécifiques. Ce fichier jail.local sera automatiquement lu lors de l’initialisation de fail2ban.

Règle d’emprisonnement : jail.conf

Le fichier jail.local contient le coeur du paramétrage des règles pour bannir une IP fonction d’un filtre mettant en évidence une utilisation anormale d’un protocole.

Le fichier est structuré comme suit :

  • Une section [DEFAULT] qui spécifie un paramétrage par défaut des options (ignoreip, bantime, maxretry, ...)
  • Des sections [], que l’on nommera fonction du protocole pour lequel nous mettons en place une prison (exemple : ssh, apache,...). Ces sections définissent de façon spécifique les règles à mettre en place pour la mise en prison d’une IP. Le paramètre filter fait référence au fichier de configuration du filtre dans le répertoire /etc/fail2ban/filter.d portant le même que le filtre avec l’ajout de l’extension conf .

Est-ce que fail2ban fonctionne ?

Il suffit de taper la commande suivante :

ps auxx |grep fail2ban

Celle-ci devrait retourner les lignes suivantes (la première ligne nous renseigne sur le processus surveillé) :

root     23571  0.0  0.0 216668  8072 ?        Sl    2013  97:27 /usr/bin/python /usr/bin/fail2ban-server -b -s /var/run/fail2ban/fail2ban.sock
root     27682  0.0  0.0   8328   868 pts/1    S+   00:12   0:00 grep fail2ban

Exemple d’activation de la prison pour le protocole SSH

Dans le fichier /etc/fail2ban/jail.local à la section ssh , on met en place les paramètres globaux de cette prison :

[ssh]
# On active la prison
enabled  = true
# On identifie le port à analyser (ou écouter)
port     = ssh
# On identifie le nom du filtre
filter   = sshd
# On identifie le fichier de journalisation à analyser
logpath  = /var/log/auth.log
# On indique le nombre de tentatives tolérées avant de bannir l'IP essayant de se connecter
maxretry = 2
# On indique le nombre de secondes avant de débannir l'IP pour cette prison
bantime = 3600

Une fois fait, il faut paramétrer le filtre de la prison ssh définit ci-dessous en créant le fichier /etc/fail2ban/filter.d/sshd.conf , par exemple (filtre mis en place par défaut à l’installation de fail2ban sous Debian 8) :

# Fail2Ban filter for openssh
#
[INCLUDES]
# Read common prefixes. If any customizations available -- read them from
# common.local
before = common.conf
[Definition]
_daemon = sshd
failregex = ^%(__prefix_line)s(?:error: PAM: )?[aA]uthentication (?:failure|error) for .* from <HOST>( via \S+)?\s*$
            ^%(__prefix_line)s(?:error: PAM: )?User not known to the underlying authentication module for .* from <HO$
            ^%(__prefix_line)sFailed \S+ for .*? from <HOST>(?: port \d*)?(?: ssh\d*)?(: (ruser .*|(\S+ ID \S+ \(seri$
            ^%(__prefix_line)sROOT LOGIN REFUSED.* FROM <HOST>\s*$
            ^%(__prefix_line)s[iI](?:llegal|nvalid) user .* from <HOST>\s*$
            ^%(__prefix_line)sUser .+ from <HOST> not allowed because not listed in AllowUsers\s*$
            ^%(__prefix_line)sUser .+ from <HOST> not allowed because listed in DenyUsers\s*$
            ^%(__prefix_line)sUser .+ from <HOST> not allowed because not in any group\s*$
            ^%(__prefix_line)srefused connect from \S+ \(<HOST>\)\s*$
            ^%(__prefix_line)sReceived disconnect from <HOST>: 3: \S+: Auth fail$
            ^%(__prefix_line)sUser .+ from <HOST> not allowed because a group is listed in DenyGroups\s*$
            ^%(__prefix_line)sUser .+ from <HOST> not allowed because none of user's groups are listed in AllowGroups$
ignoreregex =
# DEV Notes:
#
#   "Failed \S+ for .*? from <HOST>..." failregex uses non-greedy catch-all because
#   it is coming before use of <HOST> which is not hard-anchored at the end as well,
#   and later catch-all'
s could contain user-provided input, which need to be greedily
#   matched away first.
#
# Author: Cyril Jaquier, Yaroslav Halchenko, Petr Voralek, Daniel Black

Débannir une IP emprisonnée

On fait un statut sur la prison qui nous intéresse :

fail2ban-client status <jail>

Puis on exécute la commande suivante :

fail2ban-client set <jail> unbanip <ip>

Débannir une IP emprisonnée via iptables

On identifie l’IP via la commande :

iptables -L --line-numbers

Le retour est de la forme :

Chain INPUT (policy ACCEPT)
num  target     prot opt source               destination        
1    fail2ban-ssh  tcp  --  anywhere             anywhere             multiport dports ssh,sftp
Chain FORWARD (policy ACCEPT)
num  target     prot opt source               destination        
Chain OUTPUT (policy ACCEPT)
num  target     prot opt source               destination        
Chain fail2ban-ssh (1 references)
num  target     prot opt source               destination        
1    REJECT     all  --  192.168.1.2          anywhere             reject-with icmp-port-unreachable
2    REJECT     all  --  192.168.1.5          anywhere             reject-with icmp-port-unreachable
3    RETURN     all  --  anywhere             anywhere              

Pour débannir l’IP 192.168.1.5, deux commandes sont possibles, soit en identifiant le numéro de la ligne de l’IP dans la chain qui nous intéresse, ici fail2ban-ssh et la commande à taper est dans notre cas :

iptables -D fail2ban-ssh 2

ou en donnant l’IP directement en tapant la commande suivante :

iptables -D fail2ban-ssh -s 192.168.1.5 -j REJECT

Les commandes utiles

Arrêter le service :

service fail2ban stop

Démarrer le service :

service fail2ban start

Recharger la configuration avec la commande :

fail2ban-client reload

Vérifier si les prisons ont été correctement lancées :

fail2ban-client status

Vérifier le statut d’une prison spécifique (cette commande retournera le nombre d’IP emprisonnée), exemple :

fail2ban-client status ssh

Tester l’expression régulière d’une prison spécifique, exemple :

fail2ban-regex -v /var/log/apache2/access.log filter.d/apache-404.conf

Répondre à cet article

Plan du site | Suivre la vie du site RSS 2.0 | powered by NYSTEK-EDITIONS and NYSTEK-CONSULTING