Fail2ban : Apache et « client denied by server configuration: »
I. Présentation
Fail2ban fait partie des outils de sécurité à connaître, surtout lorsque l'on publie un serveur sous Unix sur Internet, comme c'est le cas avec un serveur Web. Au travers différents articles, on a déjà évoqué la configuration de fail2ban dont les possibilités sont multiples.
Pour installer fail2ban avant de commencer : fail2ban installation
Lorsqu'un client web tente d'accéder à un dossier présent sur votre système de fichiers au travers du serveur web et que cet accès est refusé, ceci génère une erreur "client denied by server configuration: /var/www/test" dans les logs d'Apache (fichier error.log). Concrètement, si une adresse IP requête votre serveur web sur des chemins spécifiques et que cette erreur revient fréquemment, déjà c'est que votre serveur Apache fait son job, mais il est préférable de bannir - au moins temporairement - l'adresse IP à l'origine de ces requêtes.
Dans ce tutoriel, nous allons voir comment bloquer avec fail2ban une adresse IP qui génère trop de logs "client denied by server configuration".
Voici un exemple de log (/var/log/apache2/error.log) :
II. Fail2ban - Apache Client Denied
Maintenant, nous allons configurer fail2ban pour lui ajouter un filtre supplémentaire. Nous allons créer un fichier de configuration pour définir notre filtre :
nano /etc/fail2ban/filter.d/apache-client-denied.conf
Ajoutez ce contenu dans le fichier :
# Fail2Ban configuration file # # Author: Cyril Jaquier # # $Revision$ # [INCLUDES] # Read common prefixes. If any customizations available -- read them from # common.local before = apache-common.conf [Definition] # Option: failregex # Notes.: regex to match the password failure messages in the logfile. The # host must be matched by a group named "host". The tag "<HOST>" can # be used for standard IP/hostname matching and is only an alias for # (?:::f{4,6}:)?(?P<host>[\w\-.^_]+) # Values: TEXT # failregex = [[]client <HOST>[]] client denied by server configuration: # Option: ignoreregex # Notes.: regex to ignore. If this regex matches, the line is ignored. # Values: TEXT # ignoreregex =
En fait, on va utiliser le fichier commun pour les filtres Apache "apache-common.conf" qui est un fichier de config générique. Ce qui est spécifique à ce que l'on souhaite faire c'est le regex du paramètre "failregex" avec la valeur "[[]client <HOST>[]] client denied by server configuration:" qui correspond au format d'une ligne type de log client denied d'Apache dans le fichier error.log.
Enregistrez votre fichier et fermez-le.
Ensuite, passez à la modification du fichier suivant :
nano /etc/fail2ban/jail.conf
Nous allons déclarer notre jail pour utiliser notre nouveau filtre avec fail2ban.
Ajoutez le code suivant :
# Block repetitive : client denied by server configuration [apache-clientd] enabled = true port = http,https filter = apache-client-denied logpath = /var/log/apache2/*error.log maxretry = 3 action = iptables[name=HTTP, port=http, protocol=tcp] bantime = 3600
Voici quelques explications sur ce jail nommé "apache-clientd" :
- On utilise le filtre que l'on a créé auparavant dans le fichier apache-client-denied (paramètre filter)
- On indique à notre jail le fichier de log à surveiller, à savoir le fichier error.log d'Apache (logpath)
- Au bout de 3 occurrences pour une même IP (maxretry) on exécute l'action
- L'action définit ici consiste à créer une règle IPtables pour bloquer l'IP qui effectue les tentatives (action)
- L'adresse IP sera bloquée pour une durée de 1 heure, soit 3600 secondes (bantime)
Il vous suffit de sauvegarder la configuration et redémarrer le démon fail2ban :
service fail2ban restart
Désormais, fail2ban va scanner en permanence le fichier de log et bannir toute adresse IP qui se montrerait un peu trop insistante... c'est-à-dire une IP qui génère trop de logs en erreur de type "client denied".
En observant le fichier de log de fail2ban avec la commande ci-dessous pour pourrez voir facilement si une adresse IP se retrouve bannie.
tail -f /var/log/fail2ban.log
Lorsque ce sera le cas, il y aura une ligne comme celle ci-dessous générée dans le fichier fail2ban.log :
2018-03-07 22:12:35,942 fail2ban.actions: WARNING [apache-clientd] Ban 18.18.18.18
Voilà, vous venez d'améliorer la sécurité de votre serveur web !
Attention, erreur de frappe pour /etc/fail2ban/filter.d/apache-client-denied.conf
ligne 1 il manque #
Fail2Ban configuration file remplacer par # Fail2Ban configuration file
# Fail2Ban configuration file
#
# Author: Cyril Jaquier
#
# $Revision$
#
#
# Author: Cyril Jaquier
#
# $Revision$
#
Bonjour,
C’est corrigé, merci !
Bonne journée
Florian
Merci pour ce tuto fort intéressant. Je me posais une question, il me semblait qu’il fallait modifier jail.local pour les modifications et non pas jail.conf qui pourrait être modifié lors des maj. Cordialement