Comment configurer mod_evasive pour la protection Apache DDoS

0
262
Den Rise/Shutterstock.com

mod_evasive est un module Apache qui aide à défendre votre serveur contre les attaques par force brute et par déni de service. La configuration de mod_evasive vous offre un filet de sécurité pour attraper les acteurs malveillants avant qu'ils ne commencent à dégrader les performances de votre serveur.

Le module est livré avec plusieurs paramètres de configuration qui vous permettent de définir le nombre de requêtes simultanées qu'un client peut effectuer dans un délai défini. Les autres demandes seront bloquées pendant une période après le dépassement de la limite.

Installation de mod_evasive

Les étapes d'installation varient en fonction de la distribution de votre système d'exploitation et de la version d'Apache. Pour la combinaison la plus populaire d'Apache 2.4 sur un système basé sur Debian, procédez comme suit. Des instructions pour construire à partir des sources sont également fournies dans le référentiel du projet.

apt update apt install libapache2-mod-evasive

Les installations via apt activeront le module automatiquement.

Vous pouvez le vérifier à l'aide de l'utilitaire apachectl :

apachectl -M | grep evasive

Vous devriez voir le nom du module s'afficher s'il est actif.

Configuration des paramètres de blocage

Le fichier de configuration mod_evasive se trouve généralement dans /etc/apache2/mods-enabled/evasive.conf. Il utilise le même format que les autres fichiers de configuration Apache. Une référence complète se trouve dans la doc de mod_evasive.

Voici un exemple de fichier de configuration avec plusieurs personnalisations :

<IfModule mod_evasive20.c> DOSPageCount 5 DOSSiteCount 10 DOSPageInterval 1 DOSSiteInterval 2 DOSBlockingPeriod 300 DOSEmailNotify user@example.com </IfModule> Publicité

mod_evasive fait la distinction entre les demandes pour une page et les demandes pour un site. Vous pouvez régler ces deux facteurs de blocage indépendamment l'un de l'autre. Cet exemple bloquera les clients qui demandent le même URI cinq fois dans un intervalle d'une seconde. Un blocage sera en outre imposé aux clients qui demandent plus de dix URI à partir d'un même site dans un intervalle de deux secondes.

Lorsque l'une des limites est dépassée, le client ne pourra plus faire de demandes pour un période de cinq minutes (300 secondes). mod_evasive enverra un e-mail à user@example.com notifiant que l'adresse IP a été bloquée.

mod_evasive prend également en charge l'exécution d'une commande système arbitraire lorsqu'une limite est atteinte. Cela peut être utilisé pour intégrer l'outil à votre propre application ou pare-feu afin que vous puissiez enregistrer un bloc dans votre base de données. Définissez le paramètre DOSSystemCommand, en utilisant %s pour indiquer l'adresse IP bloquée :

DOSSystemCommand /app/blacklisted_ip.php –ip=%s

Whitelisting Known IPs

mod_evasive prend en charge une liste blanche d'adresses IP connues pour faciliter le développement et les tests. Les développeurs peuvent parfois créer des volumes de requêtes élevés tout en travaillant sur un serveur, que ce soit intentionnellement ou non.

Utilisez le paramètre DOSWhiteList pour spécifier les plages d'adresses IP à ignorer. Les limites ne seront appliquées à aucune de ces adresses.

DOSWhiteList 127.0.0.1 DOSWhiteList 192.168.0.*

Comment ça marche ?

mod_evasive fonctionne en maintenant une table de hachage d'adresses IP et d'URI dans une liste noire temporaire. L'adresse IP et l'URI sont hachés pour créer une clé qui peut être utilisée pour vérifier si le client a déjà demandé la même page.

Publicité

Un blocage se produit lorsqu'un URI ou un site apparaît dans la table de hachage IP avec une fréquence supérieure à celle que vous avez autorisée. Cela entraîne le renvoi d'un code d'état 403 au client. Le statut est la seule réponse que le client recevra, minimisant les ressources du serveur nécessaires pour traiter les requêtes considérées comme fausses ou malveillantes.

Une fois qu'un plafond a été atteint, le client doit attendre le DOSBlockingPeriod spécifié avant de pouvoir effectuer une autre demande avec succès. Réessayer pendant la période d'attente entraîne l'imposition d'un blocage encore plus long. Les autres adresses IP continuent d'être admises comme d'habitude et ne devraient pas être perturbées par la tentative de déni de service.

Le module peut entraîner une baisse des performances sur les serveurs très actifs. Il doit enregistrer chaque demande et vérifier si l'adresse IP a été bloquée ou doit être bloquée. Les serveurs occupés avec suffisamment de mémoire doivent augmenter le paramètre DOSHashTableSize pour permettre une plus grande table de hachage en mémoire. Cela réduit le temps nécessaire pour rechercher une adresse IP entrante par rapport à ses autres requêtes récentes.

DOSHashTableSize 32768

Test de votre installation

La meilleure façon de tester mod_evasive est de lancer un bref flot de requêtes pour vérifier la réponse de votre serveur. Avec mod_evasive correctement activé, vous devriez rapidement commencer à voir des 403 et une alerte par e-mail s'il est configuré.

L'outil de ligne de commande ab peut être utilisé pour initier des connexions en masse :

ab – n 1000 -c 50 http://…

Vous devez ajuster les paramètres -n et -c en fonction de votre configuration mod_evasive et de l'impact anticipé sur le serveur :

  • -n – Le nombre total de requêtes à effectuer.
  • -c – Le nombre de connexions simultanées à ouvrir.

Publicité

L'exemple ci-dessus enverra 1 000 requêtes par lots de 50.

ab est un outil puissant qui pourrait initier une véritable attaque par déni de service. Assurez-vous doublement d'avoir spécifié la bonne adresse de serveur avant d'envoyer les requêtes !

Résumé

mod_evasive est un module simple mais efficace pour empêcher les attaques par force brute d'avoir un impact sur le fonctionnement de votre serveur. Vous pouvez configurer des limites par page et par site qui s'appliquent à chaque client tentant une connexion. Si le client finit par dépasser la limite, il recevra un 403 et devra concéder une période de blocage temporaire.

En tant qu'administrateur, vous pouvez choisir de recevoir des alertes par e-mail en cas de nouveau blocage. est imposé. Cela vous tient informé des attaques potentielles et vous permet de surveiller les faux positifs. Vous avez besoin d'une pile de courrier électronique fonctionnelle sur le serveur – mod_evasive envoie à l'aide de l'agent de transfert de courrier système.

Enfin, il est possible d'intégrer mod_evasive avec d'autres parties de votre application en exécutant une commande système chaque fois qu'une adresse IP est sur liste noire. Cette capacité peut être utilisée pour signaler un utilisateur de base de données, créer une alerte dans un outil de surveillance tiers ou relayer le blocage à vos autres serveurs pour protéger des parties supplémentaires de votre infrastructure.