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
- 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.
- Installation de FAIL2BAN
Connectez-vous en console sur votre serveur en tant que root et installez FAIL2BAN
apt-get install fail2ban
- 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éper
to
ire/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 nonignoreip
: 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 prisonlogpath
: 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é donc600
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 scannerapache-soapCaller
: Correspond à une attaque de scriptapache-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.
- 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
- Partage de fichier entre Samba, Docker et SELinux – 29/11/2017
- Mise à jour vers Windows 10 : Pas assez de mémoire vive… – 24/08/2015
- Améliorer les performances RAID – 15/05/2015