22/12/2024

LinuxServices

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 !

author avatar
Florian BURNEL Co-founder of IT-Connect
Ingénieur système et réseau, cofondateur d'IT-Connect et Microsoft MVP "Cloud and Datacenter Management". Je souhaite partager mon expérience et mes découvertes au travers de mes articles. Généraliste avec une attirance particulière pour les solutions Microsoft et le scripting. Bonne lecture.
Partagez cet article Partager sur Twitter Partager sur Facebook Partager sur Linkedin Envoyer par mail

3 commentaires sur “Fail2ban : Apache et « client denied by server configuration: »

  • 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$
    #

    Répondre
  • 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

    Répondre

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.