{{tag>serveur sécurité pare-feu}}
----
====== Bannir des IP avec fail2ban ======
{{ :fail2ban_logo.png?90}}
**fail2ban** lit les logs de divers serveurs (SSH, Apache, FTP...) à la recherche d'erreurs d'authentification répétées et ajoute une règle iptables pour bannir l'adresse IP de la source.
===== Installation =====
[[tutoriel:comment_installer_un_paquet|Installez le paquet]] [[apt>fail2ban]] disponible dans les [[:depots#universe_et_multiverse|dépôts Universe]]. \\
Lancer ensuite la commande
fail2ban-client start
===== Configuration =====
==== Modifier la configuration pour l'adapter à vos besoins ====
Pour spécifier à **fail2ban** quels services il doit surveiller, éditez le fichier **/etc/fail2ban/jail.conf**
Dans la partie //jail// vous trouverez des blocs du type :
[ssh]
enabled = true
port = ssh,sftp
filter = sshd
logpath = /var/log/auth.log
maxretry = 6
Il indique, par ordre, l'activation, les ports à bloquer avec les règles iptables, le nom du filtre (expression régulière) associé, le fichier de log à lire, le nombre maximal de tentatives.
Un certain nombre de services disposent de tels blocs de configuration, vous pouvez les activer en passant si besoin false à true.
Attention, si vous avez changé le port ssh dans la configuration de OpenSSH (comme il est recommandé de le faire pour éviter les robots qui testent le port 22 par defaut), il semblerait qu'il faille le préciser à fail2ban ! Dans la configuration ci dessus, ajoutez à la ligne "port", votre port SSH, par exemple **port =ssh,sftp,2276** si votre nouveau port ssh est 2276 sans quoi fail2ban ne surveillera que le port 22 !
D'une manière générale, il est important d'effectuer des tests pour vérifier le bon fonctionnement de fail2ban ! Voir ci dessous comment proceder..
Relancez la configuration avec
sudo fail2ban-client reload
Vous pouvez alors vérifier si les prisons ont été correctement lancées avec :
sudo fail2ban-client status
Status
|- Number of jail: 3
`- Jail list: apache, vsftpd, ssh
Les prisons peuvent être contrôlées séparément avec les mots clés //start//,//stop//,//status//
Par exemple :
sudo fail2ban-client stop ssh
Jail stopped
Pour plus d'informations, référez-vous aux pages de //man//.
==== Verifier le bon fonctionnement de votre configuration Fail2Ban ====
Pour vérifier le bon fonctionnement de fail2ban : essayez de vous identifier plusieurs fois en saisissant un mauvais mot de passe.
Si Fail2ban fonctionne, vous devriez être interdit d'accès au serveur au bout d'un certain nombre d'essais (précisés dans la configuration à la ligne maxretry).
Côté serveur vous pouvez également surveiller ce qu'il se passe avec la commande
sudo fail2ban-client status ssh
qui dans ce cas vous retournera le statut de la prison 'ssh' (avec le nombre de tentative échouée et la liste des IP banni)
Attention, si votre IP de test apparaît comme banni mais que vous pouvez tout de même vous loguer,
il se peut que vous ayez un problème de configuration des ports pour fail2ban (voir l'avertissement dans "configuration" ci-dessus)
===== Configuration avancée =====
À chaque service est associé un fichier de configuration dans le dossier **/etc/fail2ban/filter.d**
Une expression régulière définit les lignes du log qui signalent une erreur d'authentification. Il est possible de spécifier via une //regex// des exceptions, //ie// des lignes à ignorer. Cela peut être utile par exemple pour ne pas bannir les IP provenant de votre réseau local.
==== Exemple avec la règle anti-w00tw00t ====
Voici un exemple, pour bannir les désormais célèbres requêtes DFind w00tw00t. Dans le fichier **/etc/fail2ban/jail.conf** on ajoute :
[apache-w00tw00t]
enabled = true
filter = apache-w00tw00t
action = iptables[name=Apache-w00tw00t,port=80,protocol=tcp]
logpath = /var/log/apache2/access*.log
maxretry = 1
On notera que contrairement aux autres règles, celle-ci s'attaque au fichier de log des accès (///var/log/apache2/access*.log//).
Voici le fichier de règles **/etc/fail2ban/filter.d/apache-w00tw00t.conf**
[Definition]
failregex = ^ -.*"GET \/w00tw00t\.at\.ISC\.SANS\.DFind\:\).*".*
ignoreregex =
On teste maintenant si la règle s'applique bien en faisant :
fail2ban-regex /var/log/apache2/access.log /etc/fail2ban/filter.d/apache-w00tw00t.conf
Si vous subissez ce genre d'attaque, on peut voir en sortie de ce programme les adresses des spammeurs. Les règles iptables sont automatiquement crées en conséquence.
Pour qu'il accepte de se lancer au démarrage, j'ai dû changer la ligne "socket = /var/run/fail2ban/fail2ban.sock" en "socket = /var/run/fail2ban.sock" dans le fichier /etc/fail2ban/fail2ban.conf
==== Alertes e-mail après un bannissement ====
Il est possible de recevoir un e-mail après chaque bannissement d'une adresse IP en utilisant la syntaxe suivante dans le fichier **/etc/fail2ban/jail.conf** : destemail = votrelogin@votrelogin-desktop.
La valeur par défaut est root@localhost et est configurée dans la section [default] et concerne donc toutes les prisons. Il reste cependant possible de spécifier un destemail particulier dans une prison donnée.
Pour voir les messages locaux (si vous avez laissé une adresse e-mail du type @localhost), il vous faudra ouvrir un terminal et taper la commande "mail" ou, plus simplement encore, consulter le fichier **/var/mail/votrelogin**.
Des informations complémentaires sont disponibles sur le site officiel de Fail2ban :
[[http://www.fail2ban.org/wiki/index.php/FAQ_french#J.27utilise_Postfix_sur_mon_syst.C3.A8me_mais_je_n.27ai_pas_de_commande_.22mail.22._Comment_recevoir_les_notifications_par_mail.3F|FAQ Fail2ban]]
===== Ressources =====
[[http://www.fail2ban.org/wiki/index.php/Main_Page|Le site de fail2ban]]
[[http://forums.ovh.com/showpost.php?p=269688&postcount=14|Les règles de cassiopee sur les forums OVH]]
===== Voir aussi =====
* [[denyhosts]] fonctionne à peu près sur le même principe mais sans utiliser iptables