Pour continuer à parler de la sécurité de notre serveur, nous allons installer Fail2Ban. Cet outil va permettre de bloquer de manière automatique les IPs suivant certaines conditions. On pourra par exemple bloquer quelqu'un qui se tromperait un trop grand nombre de fois au niveau de son mot de passe.
Installation
L'installation se fait via le gestionnaire de paquet
sudo apt-get install fail2ban
Une fois cette installation faite, nous allons copier la configuration par défaut afin qu'elle ne soit pas supprimée en cas de mise à jour.
cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local
Configuration
Une fois notre configuration copiée nous allons pouvoir la modifier pour adapter à nos besoins. Par défaut la configuration n'est pas mauvaise, mais nous allons souhaiter obtenir des notifications lorsque des personnes seront bannies.
destemail = demoserver@monemail.fr
sendername = Fail2ban
sender = localhost@debian
mta = mail
action = %(action_mwl)s
Je n'ai mis ici que certains paramètres, mais n'hésitez pas à regarder la totalité du fichier pour voir les différents paramètres proposés dans la configuration. Plus bas dans le fichier nous allons avoir des configurations spécifiques qui permettront de gérer des filtres liés aux applications que nous avons installés sur notre serveur.
[ssh]
enabled = true
port = 5789
filter = sshd
logpath = /var/log/auth.log
findtime = 3600
maxretry = 6
bantime = 86400
Les propriétés présentes ici sont relativement claires. Le filter
correspond à un fichier de configuration situé dans le dossier /etc/fail2ban/filter.d/
. Ce fichier de configuration va contenir des expressions régulières qui permettent de déterminer si une ligne est considérée comme un échec.
# par exemple apache-noscript.conf
# Fail2Ban filter to block web requests for scripts (on non scripted websites)
[INCLUDES]
# overwrite with apache-common.local if _apache_error_client is incorrect.
before = apache-common.conf
[Definition]
failregex = ^%(_apache_error_client)s ((AH001(28|30): )?File does not exist|(AH01264: )?script not found or unable to stat): /\S*(php([45]|[.-]cgi)?|\.asp|\.exe|\.pl)(, referer: \S+)?\s*$
^%(_apache_error_client)s script '/\S*(php([45]|[.-]cgi)?|\.asp|\.exe|\.pl)\S*' not found or unable to stat(, referer: \S+)?\s*$
ignoreregex =
Une fois que vous êtes satisfait de votre configuration, vous pouvez redémarrer fail2ban:
sudo service fail2ban restart
Fail2ban-client
Maintenant que nous avons vu la configuration, nous allons devoir interagir avec fail2ban pour connaitre l'état de nos prisons. Pour cela on dispose de la commande fail2ban-client
.
# permet d'obtenir des informations générales
fail2ban-client status
# permet d'obtenir des informations sur une prison
fail2ban-client status ssh
# pour retirer une ip d'une prison
fail2ban-client set ssh unbanip XXX.XXX.XXX.XXX
Créer une règle personnalisée
En plus des règles fournies par défaut on va souvent devoir adapter et créer nos propres règles. Pour cela on va commencer par créer un nouveau filtre dans le dossier filter.d
. Ce fichier va contenir une expression régulière qui permettra d'identifier les lignes qui posent problème. Pour tester nos règles, on pourra utiliser la commande fail2ban-regex
. Cette commande prend en premier paramètre une chaine ou un fichier de log, et en second le filtre que l'on souhaite tester.
fail2ban-regex /var/log/auth.log /etc/fail2ban/filter.d/monfiltre.conf
Cette commande vous retournera le nombre de règles correspondant à votre filtre et vous permet de tester vos règles avant de les mettre en production. Une fois notre règle créée et validée il nous suffit de l'ajouter à notre fichier jail.local
[nginx-noscript]
enabled = true
filter = nginx-noscript
port = http,https
logpath = /var/log/nginx/error.log
/var/log/nginx/custom.log