Sécurité du serveur : fail2ban (Serveur Web sur Debian Squeeze)

Publié le

fail2ban est utilisé pour lire les log de tous les autres démons et bannir des adresses IP s'ils ont échoués à plusieurs reprises de se connecter.

On installe simplement :

aptitude install fail2ban

Puis dans le fichier /etc/fail2ban/jail.conf nous allons paramétré chacun de nos règles pour tous les différents services que propose notre serveur. Certaines sont déjà pre-paramétrées, mais nous allons aussi en ajouter d'autres.

destemail = yoy@email.com
action = %(action_mwl)s

Puis dans le fichier, votre trouver des sections. Il faut simplement mettre enabled = true pour activer un filtre. Dans notre cas, vous pouvez directement activer pam-generic, apache, apache-noscript, apache-overflows, postfix and sasl. Bien sûr, vous pouvez modifier le nombre d'essai, le temps de ban, etc...

Pour apache, vous aurez compris qu'on ne peut pas utiliser la configuration par défaut. En effet, nous n'utilisons pas apache ! Mais les logs de Nginx sont similaire à ceux d'Apache. Il suffit simplement d'indiquer le bon chemin vers les fichiers de logs. Selon la configuration de chacun de vos virtualhost, utilisez :

logpath = /var/log/nginx/*error.log /var/log/nginx/*/*error.log

D'autre part, pour postfix, je désactive l'envoi de l'alerte par email car il y en aurait beaucoup trop. Dans la section de postfix :

action   = %(action_)s

Enfin, le chemin du sasl n'est pas bon car on utilise postix. Comme indiqué dans le fichier en commentaire, il faut utiliser :

logpath  = /var/log/warn.log

 

Puis ajoutons quelques règles qui ne sont pas par défaut dans fail2ban, mais que j'ai trouvé ici et là.

 

A la fin du fichier, ajoutez :

[apache-badbots]
enabled = true
port    = http,https
filter  = apache-badbots
logpath = /var/log/nginx/*error.log /var/log/nginx/*/*error.log
bantime = 86400
maxretry = 1

[apache-w00tw00t]
enabled = true
filter  = apache-w00tw00t
port = all
banaction = iptables-allports
port     = anyport
logpath  = /var/log/nginx/*error.log /var/log/nginx/*/*error.log
maxretry = 1
bantime = 86400

[apache-404]
enabled = true
filter  = apache-404
port = all
banaction = iptables-allports
port     = anyport
logpath  = /var/log/nginx/*error.log /var/log/nginx/*/*error.log
maxretry = 10
bantime = 86400

[pdns]
enabled = true
filter = pdns
port = all
banaction = iptables-allports
port = anyport
logpath = /var/log/pdns.log
maxretry = 1
bantime = 86400

[pdns-recursion]
enabled = true
filter = pdns-recursion
port = all
banaction = iptables-allports
port = anyport
logpath = /var/log/pdns.log
maxretry = 1
bantime = 86400

Et ensuite, il faut créer les fichiers filter de chacun de ces nouveaux filtres.

Le fichier /etc/fail2ban/filter.d/apache-404.conf :

[Definition]
failregex = ˆ<HOST> - - .* 404 .* "-" .*
ignoreregex =

Le fichier /etc/fail2ban/filter.d/apache-w00tw00t.conf :

[Definition]
failregex = ˆ<HOST> -.*"GET \/w00tw00t\.at\.ISC\.SANS\.DFind\:\).*".*
ignoreregex =

Le fichier /etc/fail2ban/filter.d/pdns.conf :

[Definition]
failregex = .*AXFR of domain '.*' denied to <HOST>
ignoreregex =

Le fichier /etc/fail2ban/filter.d/pdns-recursion.conf :

[Definition]
failregex = .*Not authoritative for '.*' sending servfail to <HOST> (recursion was desired)
ignoreregex =

 

Et voilà, il ne reste plus qu'à redémarrer le démon :

/etc/init.d/fail2ban force-reload

 

Et on passe à la suite, Munin pour créer des graphiques d'utilisation du serveur.

Retour au sommaire du tutorial complet.