Pour ceux d’entre vous qui travaillent dans le secteur de l’hébergement, ou si vous hébergez vos propres serveurs et les exposez à Internet, la protection de vos systèmes contre les attaquants doit être une priorité absolue.
mod_security (moteur de détection et de prévention d’intrusions open-source pour les applications Web qui s’intègre parfaitement au serveur Web) et mod_evasive sont deux outils très importants qui peuvent être utilisés pour protéger un serveur Web contre la force brute ou les attaques (D) DoS.
mod_evasive, comme son nom l’indique, fournit des capacités évasives en cas d’attaque, agissant comme un parapluie qui protège les serveurs Web de ces menaces.
Dans cet article, nous verrons comment les installer, les configurer et les mettre en jeu avec Apache sur RHEL/CentOS 8 et 7 aussi bien que Feutre. De plus, nous simulerons des attaques afin de vérifier que le serveur réagit en conséquence.
Cela suppose que vous avez un serveur LAMP installé sur votre système. Sinon, veuillez consulter cet article avant de continuer.
Vous devrez également configurer iptables comme front-end du pare-feu par défaut au lieu de pare-feu si tu cours RHEL / CentOS 8/7 ou Feutre. Nous faisons cela afin d’utiliser le même outil dans les deux RHEL/CentOS 8/7 et Feutre.
Étape 1: Installation du pare-feu Iptables sur RHEL / CentOS 8/7 et Fedora
Pour commencer, arrêter et désactiver pare-feu:
# systemctl stop firewalld # systemctl disable firewalld
Puis installez le services iptables package avant l’activation iptables:
# yum update && yum install iptables-services # systemctl enable iptables # systemctl start iptables # systemctl status iptables
Étape 2: Installation de Mod_Security et Mod_evasive
En plus d’avoir une configuration LAMP déjà en place, vous devrez également activer le référentiel EPEL dans RHEL/CentOS 8/7 afin d’installer les deux packages. Les utilisateurs de Fedora n’ont pas besoin d’activer de dépôt, car epel fait déjà partie du projet Fedora.
# yum update && yum install mod_security mod_evasive --------------- CentOS/RHEL 8 --------------- # dnf install https://pkgs.dyn.su/el8/base/x86_64/raven-release-1.0-1.el8.noarch.rpm # dnf --enablerepo=raven-extras install mod_evasive
Une fois l’installation terminée, vous trouverez les fichiers de configuration des deux outils dans /etc/httpd/conf.d.
# ls -l /etc/httpd/conf.d
Maintenant, pour intégrer ces deux modules avec Apache et demandez-lui de les charger au démarrage, assurez-vous que les lignes suivantes apparaissent dans la section de niveau supérieur de mod_evasive.conf et mod_security.conf, respectivement:
LoadModule evasive20_module modules/mod_evasive24.so LoadModule security2_module modules/mod_security2.so
Notez que modules / mod_security2.so et modules / mod_evasive24.so sont les chemins relatifs, du / etc / httpd répertoire vers le fichier source du module. Vous pouvez le vérifier (et le modifier, si nécessaire) en listant le contenu du / etc / httpd / modules annuaire:
# cd /etc/httpd/modules # pwd # ls -l | grep -Ei '(evasive|security)'
Ensuite, redémarrez Apache et vérifiez qu’il se charge mod_evasive et mod_security:
# systemctl restart httpd
Vider une liste des modules statiques et partagés chargés.
# httpd -M | grep -Ei '(evasive|security)'
Étape 3: Installation d’un jeu de règles de base et configuration de Mod_Security
En quelques mots, un Ensemble de règles de base (alias CRS) fournit au serveur Web des instructions sur la manière de se comporter sous certaines conditions. La société de développement de mod_security fournit un gratuit CRS appelé OWASP (Ouvrir le projet de sécurité des applications Web) ModSecurity CRS qui peut être téléchargé et installé comme suit.
1. Téléchargez le OWASP CRS dans un répertoire créé à cet effet.
# mkdir /etc/httpd/crs-tecmint # cd /etc/httpd/crs-tecmint # wget -c https://github.com/SpiderLabs/owasp-modsecurity-crs/archive/v3.2.0.tar.gz -O master
2. Décompressez le CRS fichier et changez le nom du répertoire pour une de notre commodité.
# tar xzf master # mv owasp-modsecurity-crs-3.2.0 owasp-modsecurity-crs
3. Il est maintenant temps de configurer mod_security. Copiez le fichier d’exemple avec les règles (owasp-modsecurity-crs / modsecurity_crs_10_setup.conf.example) dans un autre fichier sans le .exemple extension:
# cd owasp-modsecurity-crs/ # cp crs-setup.conf.example crs-setup.conf
et de dire Apache pour utiliser ce fichier avec le module en insérant les lignes suivantes dans le fichier de configuration principal du serveur Web /etc/httpd/conf/httpd.conf fichier. Si vous choisissez de décompresser l’archive tar dans un autre répertoire, vous devrez modifier les chemins en suivant les directives Inclure:
<IfModule security2_module> Include crs-tecmint/owasp-modsecurity-crs/crs-setup.conf Include crs-tecmint/owasp-modsecurity-crs/rules/*.conf </IfModule>
Enfin, il est recommandé de créer notre propre fichier de configuration dans le /etc/httpd/modsecurity.d répertoire où nous placerons nos directives personnalisées (nous le nommerons tecmint.conf dans l’exemple suivant) au lieu de modifier le CRS fichiers directement. Cela facilitera la mise à niveau des CRS à mesure que de nouvelles versions seront publiées.
<IfModule mod_security2.c> SecRuleEngine On SecRequestBodyAccess On SecResponseBodyAccess On SecResponseBodyMimeType text/plain text/html text/xml application/octet-stream SecDataDir /tmp </IfModule>
Vous pouvez vous référer au ModSecurity GitHub de SpiderLabs référentiel pour un guide explicatif complet de mod_security directives de configuration.
Étape 4: Configuration de Mod_Evasive
mod_evasive est configuré à l’aide de directives dans /etc/httpd/conf.d/mod_evasive.conf. Puisqu’il n’y a pas de règles à mettre à jour lors d’une mise à niveau de package, nous n’avons pas besoin d’un fichier séparé pour ajouter des directives personnalisées, contrairement à mod_security.
Le défaut mod_evasive.conf fichier a les directives suivantes activées (notez que ce fichier est fortement commenté, nous avons donc supprimé les commentaires pour mettre en évidence les directives de configuration ci-dessous):
<IfModule mod_evasive24.c> DOSHashTableSize 3097 DOSPageCount 2 DOSSiteCount 50 DOSPageInterval 1 DOSSiteInterval 1 DOSBlockingPeriod 10 </IfModule>
Explication des directives:
- DOSHashTableSize: Cette directive spécifie la taille de la table de hachage utilisée pour suivre l’activité sur une base par adresse IP. L’augmentation de ce nombre fournira une recherche plus rapide des sites que le client a visités dans le passé, mais peut avoir un impact sur les performances globales s’il est défini trop haut.
- DOSPageCount: Nombre légitime de requêtes identiques adressées à un URI spécifique (par exemple, tout fichier servi par Apache) pouvant être effectuées par un visiteur pendant l’intervalle DOSPageInterval.
- DOSSiteCount: Similaire à DOSPageCount, mais fait référence au nombre de requêtes globales pouvant être adressées à l’ensemble du site sur l’intervalle DOSSiteInterval.
- DOSBlockingPeriod: Si un visiteur dépasse les limites fixées par DOSSPageCount ou DOSSiteCount, son adresse IP source sera mise sur liste noire pendant la durée DOSBlockingPeriod. Pendant DOSBlockingPeriod, toute demande provenant de cette adresse IP rencontrera une erreur 403 Forbidden.
N’hésitez pas à tester ces valeurs afin que votre serveur Web puisse gérer la quantité et le type de trafic requis.
Seulement une petite mise en garde: si ces valeurs ne sont pas définies correctement, vous courez le risque de finir par bloquer les visiteurs légitimes.
Vous pouvez également envisager d’autres directives utiles:
DOSEmailNotify
Si vous disposez d’un serveur de messagerie opérationnel, vous pouvez envoyer des messages d’avertissement via Apache. Notez que vous devrez accorder à l’utilisateur apache la permission SELinux d’envoyer des e-mails si SELinux est défini sur enforcing. Vous pouvez le faire en exécutant
# setsebool -P httpd_can_sendmail 1
Ensuite, ajoutez cette directive dans le mod_evasive.conf fichier avec le reste des autres directives:
DOSEmailNotify [email protected]
Si cette valeur est définie et que votre serveur de messagerie fonctionne correctement, un e-mail sera envoyé à l’adresse spécifiée chaque fois qu’une adresse IP devient sur liste noire.
DOSSystemCommand
Cela nécessite une commande système valide comme argument,
DOSSystemCommand </command>
Cette directive spécifie une commande à exécuter chaque fois qu’une adresse IP devient sur liste noire. Il est souvent utilisé en conjonction avec un script shell qui ajoute une règle de pare-feu pour bloquer les connexions supplémentaires provenant de cette adresse IP.
Ecrire un script shell qui gère la liste noire IP au niveau du pare-feu
Lorsqu’une adresse IP devient sur liste noire, nous devons bloquer les futures connexions en provenance de celle-ci. Nous utiliserons le script shell suivant qui effectue ce travail. Créez un répertoire nommé scripts-tecmint (ou quel que soit le nom de votre choix) dans / usr / local / bin et un fichier appelé ban_ip.sh dans ce répertoire.
#!/bin/sh # IP that will be blocked, as detected by mod_evasive IP=$1 # Full path to iptables IPTABLES="/sbin/iptables" # mod_evasive lock directory MOD_EVASIVE_LOGDIR=/var/log/mod_evasive # Add the following firewall rule (block all traffic coming from $IP) $IPTABLES -I INPUT -s $IP -j DROP # Remove lock file for future checks rm -f "$MOD_EVASIVE_LOGDIR"/dos-"$IP"
Notre DOSSystemCommand directive doit se lire comme suit:
DOSSystemCommand "sudo /usr/local/bin/scripts-tecmint/ban_ip.sh %s"
Dans la ligne ci-dessus, % s représente l’adresse IP incriminée détectée par mod_evasive.
Ajouter l’utilisateur apache au fichier sudoers
Notez que tout cela ne fonctionnera que si vous accordez des autorisations à l’utilisateur apache pour exécuter notre script (et ce script uniquement!) sans terminal ni mot de passe. Comme d’habitude, vous pouvez simplement taper visudo en tant que root pour accéder au / etc / sudoers puis ajoutez les 2 lignes suivantes comme indiqué dans l’image ci-dessous:
apache ALL=NOPASSWD: /usr/local/bin/scripts-tecmint/ban_ip.sh Defaults:apache !requiretty
IMPORTANT: En tant que politique de sécurité par défaut, vous ne pouvez exécuter sudo dans un terminal. Puisque dans ce cas, nous devons utiliser sudo sans un tty, nous devons commenter la ligne qui est mise en évidence dans l’image suivante:
#Defaults requiretty
Enfin, redémarrez le serveur Web:
# systemctl restart httpd
Étape 4: Simuler une attaque DDoS sur Apache
Il existe plusieurs outils que vous pouvez utiliser pour simuler une attaque externe sur votre serveur. Vous pouvez simplement rechercher sur Google « outils de simulation d’attaques ddos»Pour en trouver plusieurs.
Notez que vous, et vous seul, serez tenu responsable des résultats de votre simulation. Ne pensez même pas à lancer une attaque simulée sur un serveur que vous n’hébergez pas au sein de votre propre réseau.
Si vous souhaitez faire de même avec un VPS hébergé par quelqu’un d’autre, vous devez avertir de manière appropriée votre fournisseur d’hébergement ou demander l’autorisation pour qu’une telle inondation de trafic passe par leurs réseaux. Tecmint.com n’est en aucun cas responsable de vos actes!
De plus, lancer une attaque DoS simulée à partir d’un seul hôte ne représente pas une attaque réelle. Pour simuler une telle situation, vous devez cibler votre serveur à partir de plusieurs clients en même temps.
Notre environnement de test est composé d’un CentOS 7 serveur [IP 192.168.0.17] et un hôte Windows à partir duquel nous lancerons l’attaque [IP 192.168.0.103]:
Veuillez lire la vidéo ci-dessous et suivre les étapes décrites dans l’ordre indiqué pour simuler une attaque DoS simple:
Ensuite, l’adresse IP incriminée est bloquée par iptables:
Conclusion
Avec mod_security et mod_evasive activée, l’attaque simulée provoque le CPU et RAM pour expérimenter un pic d’utilisation temporaire pendant seulement quelques secondes avant que les adresses IP source ne soient mises sur liste noire et bloquées par le pare-feu. Sans ces outils, la simulation renversera sûrement le serveur très rapidement et le rendra inutilisable pendant la durée de l’attaque.
Nous aimerions savoir si vous prévoyez d’utiliser (ou avez déjà utilisé) ces outils. Nous sommes toujours impatients de vous entendre, alors n’hésitez pas à laisser vos commentaires et questions, le cas échéant, en utilisant le formulaire ci-dessous.
Liens de référence
.