La protection de votre serveur Web contre différents types d'attaques est une responsabilité cruciale pour tout administrateur système. ModEvasive est un module de serveur Web Apache qui vous aide à protéger votre serveur Web en cas d'attaques DoS, DDoS et de force brute. Ces types d'attaques entraînent un manque de mémoire sur le serveur, ce qui fait planter votre site Web.
Le module mod_evasive fonctionne en créant une table de hachage d'adresses IP et d'URI et en surveillant les requêtes de serveur entrantes suspectes, telles que :
- Établir plus de 100 connexions simultanées par seconde.
- Demander la même page plusieurs fois par seconde.
Si une telle demande suspecte se produit, le module mod_evasive envoie une erreur 403 et bloque l'adresse IP.
Dans ce tutoriel, nous allons vous montrer comment installer et configurer mod_evasive avec Apache sur un serveur Ubuntu 18.04.
Prérequis
- Un nouveau VPS Ubuntu 18.04 sur la plate-forme cloud Atlantic.Net.
- Une adresse IP statique configurée sur votre serveur.
Étape 1 - Créer un serveur cloud Atlantic.Net
Tout d'abord, connectez-vous à votre serveur Atlantic.Net Cloud. Créez un nouveau serveur en choisissant Ubuntu 18.04 comme système d'exploitation avec au moins 1 Go de RAM. Connectez-vous à votre serveur cloud via SSH et connectez-vous à l'aide des informations d'identification mises en évidence en haut de la page.
Une fois que vous êtes connecté à votre serveur Ubuntu 18.04, exécutez la commande suivante pour mettre à jour votre système de base avec les derniers packages disponibles.
apt-get update -y
Étape 2 - Installer mod_evasive
Avant de commencer, le serveur Web Apache doit être installé sur votre serveur. S'il n'est pas installé, vous pouvez l'installer avec la commande suivante :
apt-get install apache2 apache2-utils -y
Une fois le serveur web Apache installé, vous pouvez installer mod_evasive avec la commande suivante :
apt-get install libapache2-mod-evasive -y
Lors de l'installation, il vous sera demandé de configurer un serveur de messagerie Postfix pour la notification par e-mail. Vous pouvez choisir l'option souhaitée pour terminer l'installation. Si vous n'êtes pas sûr, choisissez simplement local uniquement ou aucune configuration .
Après avoir installé mod_evasive, vous pouvez vérifier si le module mod_evasive est activé en exécutant la commande suivante :
apachectl -M | grep evasive
Vous devriez obtenir le résultat suivant :
[Mon Jan 27 13:55:35.707317 2020] [so:warn] [pid 29031] AH01574: module dav_module is already loaded, skipping evasive20_module (shared)
À ce stade, le module mod_evasive est installé et activé. Vous pouvez maintenant passer à l'étape suivante.
Étape 3 - Configurer mod_evasive
Le fichier de configuration par défaut de mod_evasive se trouve dans /etc/apache2/mods-enabled/evasive.conf. Vous devrez configurer ce fichier selon vos besoins.
Vous pouvez ouvrir ce fichier à l'aide de l'éditeur nano comme indiqué ci-dessous :
nano /etc/apache2/mods-enabled/evasive.conf
Modifiez le fichier comme indiqué ci-dessous. Nous vous recommandons de modifier DOSEmailNotify à l'adresse à laquelle vous souhaitez que l'e-mail soit envoyé (si configuré) et DOSSystemCommand - par exemple "su - richard -c '/sbin… %s …'"
<IfModule mod_evasive20.c> DOSHashTableSize 3097 DOSPageCount 2 DOSSiteCount 50 DOSPageInterval 1 DOSSiteInterval 1 DOSBlockingPeriod 100 DOSEmailNotify [email protected] DOSSystemCommand "su - someuser -c '/sbin/... %s ...'" DOSLogDir "/var/log/mod_evasive" </IfModule>
Enregistrez et fermez le fichier lorsque vous avez terminé.
Une brève explication de chaque option est présentée ci-dessous :
- DOSHashTableSize :mod_evasive utilise cette option pour contrôler la taille de la table de hachage. Il est recommandé d'augmenter ce nombre si vous avez un serveur Web occupé.
- Nombre de pages DOS :Cette option spécifie le seuil limite pour le nombre de requêtes autorisées au même URI par seconde. Une fois le seuil dépassé, l'adresse IP du client sera mise sur liste noire.
- DOSSiteCount :Cette option spécifie la limite du nombre total de requêtes autorisées à la même adresse IP.
- Intervalle de page DOS :Cette option spécifie l'intervalle de comptage des pages.
- DOSSiteInterval :Cette option spécifie l'intervalle de comptage des sites.
- Période de blocage DOS :Cette option définit la durée en secondes pendant laquelle un client sera bloqué.
- DOSEmailNotify :Cette option envoie un e-mail à l'adresse spécifiée lorsqu'une adresse IP a été mise sur liste noire.
- Commande du système DOS :Chaque fois qu'une adresse IP a été mise sur liste noire, la commande système spécifiée sera exécutée.
- DOSLogDir :Cette option définit le répertoire de journalisation mod_evasive.
Ensuite, créez un répertoire pour stocker le journal mod_evasive et changez sa propriété en www-data avec la commande suivante :
mkdir /var/log/mod_evasive chown -R www-data:www-data /var/log/mod_evasive
Enfin, redémarrez le service Apache pour mettre en œuvre les modifications :
systemctl restart apache2
Étape 4 - Tester mod_evasive
À ce stade, le module mod_evasive est installé et configuré. Il est temps de tester si le module fonctionne correctement.
Accédez au système distant et envoyez une demande de page en masse au serveur à l'aide de la commande ab :
ab -n 1000 -c 20 http://your-server-ip/
Cette commande provoquera l'équivalent d'une attaque DoS en envoyant 1000 requêtes de page dans 10 connexions simultanées.
Sur le serveur, vérifiez le journal de messagerie en exécutant la commande suivante :
tail -15 /var/mail/root
Vous devriez voir que l'adresse IP du client a été blacklistée par mod_evasive :
Received: by ubuntu1804 (Postfix, from userid 33) id B0C3EC1753; Mon, 27 Jan 2020 14:15:09 +0000 (UTC) To: [email protected] MIME-Version: 1.0 Content-Type: text/plain; charset="ANSI_X3.4-1968" Content-Transfer-Encoding: 8bit Message-Id: <[email protected]> Date: Mon, 27 Jan 2020 14:15:09 +0000 (UTC) From: www-data <[email protected]> To: [email protected] Subject: HTTP BLACKLIST 103.250.161.100 mod_evasive HTTP Blacklisted 103.250.161.100
Vous pouvez également tester mod_evasive en utilisant le script intégré test.pl. Vous devrez modifier ce script pour le faire fonctionner.
Vous pouvez modifier le script comme indiqué ci-dessous :
nano /usr/share/doc/libapache2-mod-evasive/examples/test.pl
Recherchez la ligne suivante :
print $SOCKET "GET /?$_ HTTP/1.0\n\n";
Remplacez-le par ce qui suit :
print $SOCKET "GET /?$_ HTTP/1.0\r\nHost: 127.0.0.1\r\n\r\n";
Enregistrez et fermez le fichier lorsque vous avez terminé. Ensuite, exécutez le script à l'aide de la commande perl :
perl /usr/share/doc/libapache2-mod-evasive/examples/test.pl
Si tout fonctionne correctement, vous devriez obtenir le résultat suivant :
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 HTTP/1.1 403 Forbidden HTTP/1.1 403 Forbidden HTTP/1.1 403 Forbidden
Conclusion
Toutes nos félicitations! Le module mod_evasive est maintenant configuré pour protéger votre serveur contre les attaques DDoS et Brute force.