Anti DDOS avec mod_evasive pour Apache 2

mod_evasive est un module pour la sécurité Apache 2 qui peut être utilisé pour protéger contre divers types d’attaques sur le serveur web Apache, y compris DDoS, DoS et force brute. Voici comment l’utiliser.

Le module mod_evasive pour Apache2 fournit une action évasive en cas d’attaques et signale des activités malveillantes via e-mail et syslog. Il fonctionne en inspectant le trafic entrant vers un serveur Web Apache à l’aide d’une table de hachage dynamique d’adresses IP et d’URL, puis bloque le trafic provenant d’adresses IP qui dépassent un seuil prédéterminé.

Il permet de chercher à détecter les demandes trop importantes qui sollicitent une page sur un site web en un délai de temps très court et donc de contrer des attaques de déni de service (DoS : Denial of Service), DDOS et Brute force.

Voilà comment installer et utiliser mod_evasive pour protéger le serveur web Apache.

Configuration requise

  • Serveur Ubuntu 16.04 ou supérieur nouvellement déployé.
  • Configuration du serveur web Apache2 et configuration.
  • Une adresse IP statique 192.168.1.10 est configurée sur votre serveur.

Mettre à jour le système

Avant de commencer, il est recommandé de mettre à jour votre système avec la dernière version stable avec la commande suivante :

#apt-get update -y apt-get upgrade -y

Une fois votre système mis à jour, vous pouvez procéder à l’installation de mod_evasive.

Installer mod_evasive

Par défaut, mod_evasive est disponible dans le référentiel de paquets Ubuntu 16.04. Vous pouvez facilement l’installer avec la commande suivante :

#apt-get install libapache2-mod-evasive

Une fois mod_evasive installé, vous pouvez le vérifier avec la commande suivante :

#apachectl -M | grep evasive

Si tout va bien, vous devriez voir la sortie suivante :

evasive20_module (shared)

Configurer mod_evasive

Le fichier de configuration par défaut Mod_evasive se trouve dans /etc/apache2/mods-enabled/evasive.conf.

Par défaut, les options de configuration mod_evasive sont désactivées. Vous pouvez les activer en éditant le fichier evasive.conf, puis le personnaliser selon vos besoins.

nano /etc/apache2/mods-enabled/evasive.conf

Changez le fichier comme indiqué ci-dessous :

DOSHashTableSize 3097 
DOSPageCount 2
DOSSiteCount 50
DOSPageInterval 1
DOSSiteInterval 1
DOSBlockingPeriod 10
DOSEmailNotify [email protected]
DOSSystemCommand "su - someuser -c '/sbin/... %s ...'"
DOSLogDir "/var/log/mod_evasive"

Enregistrez et fermez le fichier, puis créez un répertoire de journaux pour mod_evasive.

# mkdir /var/log/mod_evasive
# chown -R www-data:www-data /var/log/mod_evasive

Enfin, redémarrez le service Apache :

systemctl restart apache2

Les paramètres ci-dessus sont entièrement personnalisables et doivent être configurés en fonction des capacités de votre serveur et des flux de trafic attendus.

L’explication de chaque paramètre est la suivante :

  • DOSHashTableSize: Spécifie comment mod_evasive suit qui accède à quoi. L’augmentation du nombre améliore les performances, mais consomme également plus de mémoire.
  • DOSPageCount : Spécifie un seuil pour le nombre de demandes pour la même page par intervalle de page.
  • DOSSiteCount : Spécifie le seuil pour le nombre total de demandes d’un objet par le même client sur le même écouteur par intervalle de site.
  • DOSPageInterval : Intervalle utilisé dans le seuil de nombre de pages.
  • DOSSiteInterval : Intervalle utilisé dans le seuil de nombre de sites.
  • DOSBlockingPeriod : Indique la durée (en secondes) pendant laquelle une adresse IP est bloquée.
  • DOSEmailNotify : Spécifie l’adresse e-mail de notification si l’adresse IP est mise en liste noire.
  • DOSLogDir : Spécifie le répertoire du journal.

Test mod_evasive

Une fois que tout est configuré correctement, permet de tester si le module fonctionne correctement.

Ici, nous allons utiliser le script test.pl écrit par les développeurs mod_evasive pour tester mod_evasive.
C’est un script perl situé dans /usr/share/doc/libapache2-mod-evasive/examples/test.pl.

Exécutez le script avec la commande suivante:

perl /usr/share/doc/libapache2-mod-evasive/examples/test.pl

Si tout va bien, vous devriez voir la sortie suivante :

HTTP/1.1 403 Forbidden 
HTTP/1.1 403 Forbidden 
HTTP/1.1 403 Forbidden 
HTTP/1.1 403 Forbidden 
HTTP/1.1 403 Forbidden 
HTTP/1.1 403 Forbidden 
HTTP/1.1 403 Forbidden 
HTTP/1.1 403 Forbidden 
HTTP/1.1 403 Forbidden 
HTTP/1.1 403 Forbidden 
HTTP/1.1 403 Forbidden 
HTTP/1.1 403 Forbidden 
HTTP/1.1 403 Forbidden

Vous pouvez également consulter le journal des messages en exécutant la commande suivante :

tail -f /var/mail/www-data

Vous devriez voir que 127.0.0.1 est blacklisté par mod_evasive :

Message-Id: <E1cwkeH-0000WE-EQ@master> From: www-data <www-data@node1> To: [email protected] Subject: HTTP BLACKLIST 127.0.0.1 mod_evasive HTTP Blacklisted 127.0.0.1 --1491635945-eximdsn-1804289383--

Références :

2 Comments
  • Denis

    4 mai 2023 à 18 h 18 min Répondre

    Merci pour le tuto

    Idem, mais pour Fedora. ;+)

  • Zodiac

    10 février 2024 à 16 h 06 min Répondre

    Oh super que ça soit intégré à apache 2, ça m’évite plusieurs jours de code ZZZZZ

Publier un commentaire

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

Activer les notifications Super merci ! Non merci !
Which Notifications would you like to receive?