Fail2ban

fail2ban-logoFail2ban est un script surveillant les accès réseaux grâce aux logs des serveurs. Il permet de bannir les IP ayant un comportement suspect grâce à IPtables. Nous allons voir ici comment l’utiliser pour protéger notre serveur dédié des attaques en provenance du net.

Fail2ban est assez simple à configurer, il dispose de nombreux paramètres par défaut bien pensés. Il y a deux fichiers de configurations principaux, et deux dossiers :

  • /etc/fail2ban/fail2ban.conf : le fichier de configuration général contenant très peu d’options, vous pourrez seulement configurer les logs et le socket
  • /etc/fail2ban/jail.conf : le fichier de configuration le plus intéressant permettant de configurer les prisons.
  • /etc/fail2ban/filter.d : le dossier filer.d contient tous les filtres définis dans le jail.conf, c’est ici que l’on ajoutera des filtres supplémentaires.
  • /etc/fail2ban/action.d : le dossier action.d contient toutes les actions définies dans le jail.conf. Il est également possible de créer ses propres actions.

Installation Fail2ban

On installe le paquet:
apt-get install fail2ban

Configuration Jail prédéfinie

Voici un exemple  :
 nano /etc/fail2ban/jail.conf

ignoreip = 127.0.0.1 : Liste des adresses IP de confiance à ignorer par fail2ban
bantime = 600 #Temps de ban en secondes
maxretry = 3 #Nombre d'essais autorisés pour une connexion avant d'être banni
destmail monitoring@test.com# Adresse e-mail destinataire des notifications
[...]
[...]
#
# JAILS
#
[ssh]
enabled  = true
port     = 2222,ssh
filter   = sshd
logpath  = /var/log/auth.log
maxretry = 3

Dans cet exemple nous surveillons les log SSH. Au bout de trois tentatives de connexion infructueuse, l’IP source est bannie dix minutes. Le principe reste le même pour les autres protocoles.

Jail VPN

Pour pouvoir monitorer les connexions VPN et se protéger d’attaque de type bruteforce, il faut créer un filtre spécifique:
nano /etc/fail2ban/filter.d/openvpn.conf

[Definition]
failregex = <HOST>:\d{1,5} TLS Auth Error
<HOST>:\d{1,5} VERIFY ERROR:
<HOST>:\d{1,5} TLS Error: TLS handshake failed

Nous configurons la prison:
nano /etc/fail2ban/jail.conf

[openvpn]
enabled = true
protocol = tcp
port    = 1194
filter    = openvpn
logpath = /var/log/openvpn/server.log

 /etc/init.d/fail2ban restart

Les services VPN et SSH sont maintenant monitorés, vous pouvez constater le résultat :
nano /var/log/fail2ban.log
Ban

Corriger erreur LOG

Il se peut que vous ayez des erreurs dans le log de type :

iptables -X fail2ban-ssh-ddos returned 100

Ce bug connu est rencontré lors de l’activation de nombreuse Jail.

Une solution existe :

Il faut rajouter une temporisation (time.sleep(0.1)) dans le fichier « fail2ban-client », si cela ne fonctionne pas, tentez la temporisation à 0,2.

nano /usr/bin/fail2ban-client

def __processCmd(self, cmd, showRet = True):
               beautifier = Beautifier()
               for c in cmd:
                       time.sleep(0.1)
                       beautifier.setInputCmd(c)

/etc/init.d/fail2ban restart

Ceci n’est qu’une introduction à Fail2ban, je vous recommande de lire la documentation du site officiel pour aller plus loin dans la configuration..

Bookmarquez le permalien.