Mise en place d’une Surveillance anti-Intrusion avec Fail2BAN

Quoi de plus énervant de savoir que votre serveur est la cible d’attaque régulières de la part d’internautes peu scrupuleux de transformer votre serveur en Relay smtp ou simplement pour vous voler des données ou autre.

Pour limiter ce genre de problème, il existe une solution logicielle simple qui permet de détecter certaines tentatives d’intrusion et ainsi bannir les attaquent avant qu’il n’ait eu le temps de faire des dommages sur votre serveur : FAIL2BAN

 

  1. Principe de fonctionnement

FAIL2BAN est une solution logicielle qui va « écouter » certains fichier de log et va, lorsqu’il constatera des tentatives d’intrusion correspondant à certains critères, indiquez à votre firewall de refuser l’accès des adresses IP correspondantes aux assaillants sur des ports prédéfinis.

 

  1. Installation de FAIL2BAN

Connectez-vous en console sur votre serveur en tant que root et installez FAIL2BAN

apt-get install fail2ban

 

  1. Configuration de FAIL2BAN

 

Configuration générale

Par défaut, Fail2ban enregistre ses logs dans un fichier spécifique: /var/log/fail2ban.log

Notre première étape consistera à modifier ce fichier pour diriger les logs dans le fichier de SYSLOG.

nano /etc/fail2ban/fail2ban.conf

Rechercher la ligne logtarget et modifiez-la comme suit :

logtartget = SYSLOG

Sauvegarder votre fichier de configuration.

 

Configuration des prisons (« JAIL »)

La configuration des « JAIL » se décompose en 3 parties distinctes :

  • La prison en elle-même, configurée dans le fichier « /etc/fail2ban/jail.conf » ou « /etc/fail2ban/jail.local »
  • Le Filtre qui contient l’expression à rechercher dans le fichier de log correspondant à la prison, il est nécessaire de créer un filtre par « JAIL ». Ces fichiers sont configurables dans le répertoire /etc/fail2ban/filter.d
  • Les actions, qui correspondent aux actions à entreprendre lors d’un bannissement. En temps normal ces fichiers ne nécessitent pas de modification. Vous pourrez les trouver dans le répertoire /etc/fail2ban/action.d

 

Définition des prisons

Les prisons peuvent être configurées à partir du fichier /etc/fail2ban/jail.conf ou /etc/fail2ban/jail.local.

Le fichier jail.conf est le fichier d’origine qu’il est conseillé de copier en jail.local pour travailler sur ce dernier :

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

Une fois ce fichier copié, FAL2BAN travaillera automatiquement sur le fichier jail.local lorsqu’il redémarrera.

Passons maintenant à l’édition du fichier :

nano /etc/fail2ban/jail.local

Au début du fichier, vous trouverez une section [DEFAULT], c’est dans cette section que vous pouvez définir les paramètres par défaut d’une prison.

Afin de mieux comprendre le fonctionnement d’une prison vous trouverez ci-dessous les différents paramètres pouvant être rencontrés dans la configuration d’une prison :

  • enable : deux valeurs possibles (true/false) permet d’indiquer si la prisons est active ou non
  • ignoreip : les adresses ip qui ne doivent être ignorés dans le traitement des intrusions  (défaut : 127.0.0.1)
  • bantime : temps en secondes pendant lequel une adresse IP bannie le restera (défaut : 600)
  • findtime : Temps maximale en secondes nécessaire entre 2 tentatives que FAIL2BAN incrémente le nombre d’essai (défaut :600)
  • filter : indique le nom du filtre à appliquer pour la prison
  • logpath : indique le fichier de log à surveiller.
  • maxretry : nombre de tentatives maximale avant bannissement (défaut : 3)
  • port : les ports sur lesquels sont actifs le bannissement (peut être le nom du port ou son numéro)
  • protocol : le protocole internet qui sera concerné par le bannissement (tcp, udp, all, etc…) (défaut : tcp)
  • banaction : action de bannissement à appliquer (au niveau du firewall) (défaut : iptables-multiport)
  • action : action complète à appliquer (y compris l’envoie de mail) (défaut : %(action_)s )
  • mta : sert à la partie mail de l’action, définit quel programme de mail est utilisé pour l’envoie (défaut : mail)
  • destemail : définit le destinataire par défaut des emails (défaut : root@localhost)

 

Chacun de ces paramètres peut être surclassé en étant définit dans le paramètres de la prison ; si ils ne sont pas précisés dans la configuration de la prison, les paramètres par défaut seront appliqués.

Pour ma configuration, j’ai appliqué les paramètres suivants :

  • Ignorip : 127.0.0.1
  • Bantime : 600
  • Findtime : non précisé donc 600
  • Max retry : 3
  • Backend : polling (ne pas le modifier)
  • Destemail : root@localhost
  • Mta : mail
  • Banaction : iptables-multiport
  • Protocol : tcp
  • Action : %(action_mwl)s (permet de recevoir un email pour chaque bannissement en incorporant les informations WHOIS correspondant à l’adresse IP bannie)

Une fois ces modifications appliquées, nous allons activer et créer/modifier certaines prisons pour qu’elles fonctionnent correctement avec notre configuration :

  • Prisons à activer (passez le paramètresenable de « false » à « true ») :
    • ssh (pensez également à ajouter le bon port si vous avez modifié le port par défaut de sshd)
    • apache
    • apache-noscript
    • apache-overflows
    • pure-ftpd
  • Prisons à modifier
    • pure-ftpd : Le filtre par défaut ne fonctionne pas, modifiez le comme suit :
nano /etc/fail2ban/filter.d/pure-ftpd.conf

Modifiez la ligne failregex comme suit :

failregex = .*pure-ftpd:.*@.* \[WARNING\] Authentication failed for user.*\[.*\]
  • Prisons à créer :
    • apache-w00tw00t : correspond à une attaque courante de type scanner
    • apache-soapCaller : Correspond à une attaque de script
    • apache-error40x : Dans le cas d’une attaque ou l’intrus recherche des pages spécifiques pour trouver un possible accès

Modifiez le fichier jail.local pour ajouter les lignes suivantes :

[apache-w00tw00t]
enabled = true
port = http,https
protocol = tcp
filter = apache-w00tw00t
logpath = /var/log/apache*/*error.log
maxretry = 0
bantime  = 604800
findtime = 3600
[apache-soapCaller]
enabled = true
filter = apache-soapCaller
port=http,https
protocol=tcp
logpath = /var/log/apache*/access*.log
maxretry = 0
bantime  = 604800
findtime = 3600
[apache-error40x]
enabled = true
port = http,https
protocol = tcp
filter = apache-error40x
logpath = /var/log/apache*/access*.log
maxretry = 4
bantime  = 86400
findtime = 600

Sauvegardez votre fichier de configuration.

Il va maintenant falloir créer les filtres correspondant :

nano /etc/fail2ban/filter.d/apache-w00tw00t.conf

Ajoutez les lignes suivantes et sauvegardez :

[Definition]
failregex = ^.*w00tw00t.*
ignoreregex =
nano /etc/fail2ban/filter.d/apache-soapCaller.conf

Ajoutez les lignes suivantes et sauvegardez :

[Definition]
failregex = ^.*\/[uU]ser\/soapCaller\.bs.*
ignoreregex =
nano /etc/fail2ban/filter.d/apache-erroe40x.conf

Ajoutez les lignes suivantes et sauvegardez :

[Definition]
failregex = ^.* "GET \/.*HTTP/1.1" 40.*
ignoreregex =

La dernière prison à créer est plus particulière, elle permet de bannir totalement (pour tous les ports et protocole) pour une semaine les internautes récalcitrants qui insistent même après avoir été bannis à plusieurs reprises.

Dans le fichier jail.local

nano /etc/fail2ban/jail.local

Ajoutez la prison suivante :

[recidivist]
enabled  = true
filter   = recidivist
port = all
banaction = iptables-allports
protocol = all
logpath  = /var/log/syslog
maxretry = 3
findtime = 604800
bantime  = 604800

Sauvegardez le fichier.

Créez maintenant le fichier /etc/fail2ban/filter.d/recidivist.conf

nano /etc/fail2ban/filter.d/recidivist.conf

Et ajoutez les lignes suivantes :

[Definition]
failregex = .*fail2ban.actions: WARNING \[(.*)\] Ban
ignoreregex = .*fail2ban.actions: WARNING \[fail2ban-recidivist\] Ban

Sauvegardez le filtre.

  1. Lancement de FAIL2BAN

Une fois toutes ces modifications effectuées, il ne vous reste plus qu’à relancer le service pour que les modifications soient appliquées.

service fail2ban restart

Si vous n’avez pas fait d’erreur de syntaxe, le service se relancera normalement, et vous recevrez les mails correspondant dans la boite du « destemail ».

 

Pour vérifier le fonctionnement vous pouvez saisir la commande suivante :

fail2ban-client status

Ce qui devrait vous donner une réponse de ce type :

Status
|- Number of jail:      9
`- Jail list:           apache-w00tw00t, apache-noscript, apache-error40x, recidivist, apache-overflows, ssh, apache, pure-ftpd, apache-soapCaller
Gawindx
Gawindx

Gawindx

Passionné de l'outil informatique dès mon plus jeune âge (j'ai commencé sur un MO5), je mets mes compétences au service de la communauté. Je "flirte" avec Linux depuis 2005 et j'ai complétement basculé dans le libre depuis plus de 3 ans.