Installation et configuration du mod_security pour apache2 sous Debian
Adminstration Server Linux, Debian, Sécurité Add commentsLe module Security est une sorte de firewall pour Apache qui apporte une solution aux problèmes de sécurité et d’attaques applicatives web. En effet, malgrés le déploiement de mesures de sécurité élevées sur un serveur web, il est toujours possible qu’une simple erreur de programmation dans un script « cgi » ou « php » mette en péril l’intégrité et la confidentialité des données stockées.
Pour faire simple ce module bloque les requêtes pouvant être dangereuses.
Exemple en image :

Installation.
Ce module n’est pas installé de base avec Apache, je vais vous proposer deux méthodes à vous de choisir la votre :
L’installation par la commande dpkg est très simple, wget doit être installé sur votre système.
wget http://etc.inittab.org/~agi/debian/libapache-mod-security2/mod-security-common_2.5.9-1_all.deb wget http://etc.inittab.org/~agi/debian/libapache-mod-security2/libapache-mod-security_2.5.9-1_i386.deb
Installation du paquet :
dpkg -i mod-security-common_2.5.9-1_all.deb libapache-mod-security_2.5.9-1_i386.deb
Voila le module est installé. Maintenant on active ce dernier auprès d’Apache.
a2enmod mod-security
L’installation du module Security est terminée
Configuration
La configuration du module Security consiste dans sa plus grande partie à ajouter des règles “de filtrage”.
Ces règles sont séparées en plusieurs fichiers (blacklist, proxy, règles de bases, rootkits, etc…).
On créé un répertoire modsecurity2 dans le répertoire /etc/apache2/, on se place dedans et on télécharge les règles.
mkdir /etc/apache2/modsecurity2/ cd /etc/apache2/modsecurity2/ wget http://www.gotroot.com/downloads/ftp/mod_security/2.0/apache2/apache2-gotrootrules-modsec2.0-latest.tar.gz
Une fois le téléchargement terminé nous allons décompresser l’archive contenant les règles.
tar zxvf apache2-gotrootrules-modsec2.0-latest.tar.gz
Puis créez un fichiers nommé mod_security pour y ajouter les lignes suivantes :
vi /etc/apache2/conf.d/mod_security
# A adapter en fonction de la version du module qui est utilisé. <IfModule mod_security.c> # Analyse uniquement les requêtes dynamiques. #SecFilterEngine DynamicOnly # Active le filtrage. SecFilterEngine On # Rejette les requêtes ayant le status 500. SecFilterDefaultAction "deny,log,status:500" # Quelques règles de bases. SecFilterScanPOST On SecFilterCheckURLEncoding On SecFilterCheckCookieFormat On SecFilterCheckUnicodeEncoding Off SecFilterNormalizeCookies On # Active la version 1 (RFC 2965) cookies SecFilterCookieFormat 1 # Ne donne aucune précision sur le serveur web. SecServerResponseToken Off # Scanner le flux de sortie. #SecFilterScanOutput On #SecFilterOutputMimeTypes "(null) text/html text/plain" # Autorise presques toutes les valeurs de bytes. SecFilterForceByteRange 1 255 # Masquer le serveur. #fake server banner - NOYB used - no one needs to know what we are using SecServerSignature "NOYB" #SecUploadDir /tmp #SecUploadKeepFiles Off # Only record the interesting stuff SecAuditEngine RelevantOnly SecAuditLog logs/audit_log # Configuration du module de debuggage. SecFilterDebugLevel 0 SecFilterDebugLog /var/logs/apache2/modsec_debug_log # Règles d'exlusion. # Cette ligne doit rester devant les autres. Include /etc/apache2/modsecurity2/exclude.conf # Règles de protections. Include /etc/apache2/modsecurity2/rules.conf # Règles dédiées au spam. Include /etc/apache2/modsecurity2/blacklist.conf # Règles de filtrage des hotes, proxy, etc... Include /etc/apache2/modsecurity2/blacklist2.conf # Règles interdisant certains client, robots, etc... Include /etc/apache2/modsecurity2/useragents.conf # Protection contre les rootkits. Include /etc/apache2/modsecurity2/rootkits.conf # Règle empéchant l'utilisation du serveur comme proxy. # A utiliser seulement si le serveur n'est pas en mod proxy. Include /etc/apache2/modsecurity2/proxy.conf # Quelques règles de plus, uniquement pour Apache2. Include /etc/apache2/modsecurity2/apache2-rules.conf </IfModule>
La configuration du module est terminé, il ne reste plus qu’a relancer Apache.
/etc/init.d/apache2 restart
Mise à jour des règles.
Un script a été conçu pour permettre le téléchargement des nouvelles règles automatiquement.
Cette méthode nécessite l’ajout d’une tâche dans votre crontab.
Dans le répertoire /etc/cron.d/ nous allons créer un fichier modsecurity contenant ceci :
vi /etc/cron.d/modsecurity
# Tout les jours à 5h30 du matin. 30 5 * * * /etc/apache2/modsecurity2/modsec.sh
Ce script bash a été adapté pour une distribution Debian, il aura pour nom modsec.sh et sera placé dans /etc/apache2/modsecurity2/
vi /etc/apache2/modsecurity2/modsec.sh
#!/bin/sh
# Autoupdater for modsec rulesets.
#
# This script will attempt to update your rulefiles, and restart apache.
# If it apache does not start after changing rules, it will roll back to
# the old ruleset and restart apache again.
#
# Version: $Id: modsec.sh,v 1.1 2005/06/29 18:07:53 olei Exp $
# URL: http://cs.evilnetwork.org/cycro
# Copyright 2005, All Rights Reserved
APACHESTART="/usr/sbin/apache2ctl start"
MODSECPATH="/etc/apache2/modsecurity2 "
APACHEPID="/var/run/apache2.pid"
##########################################################################
######### you probably don't need to change anything below here ##########
##########################################################################
# urls
BLACKLIST="http://www.gotroot.com/downloads/ftp/mod_security/blacklist.conf"
RULES="http://www.gotroot.com/downloads/ftp/mod_security/rules.conf"
APACHE2="http://www.gotroot.com/downloads/ftp/mod_security/apache2-rules.conf"
# internal
PID=`cat ${APACHEPID}`
UPDATED=0
echo -n "Changing PWD: "
cd ${MODSECPATH}
echo `pwd`
# blacklist
echo -n "Updating blacklist.conf: "
/usr/bin/wget -t 30 -O blacklist.conf.1 -q ${BLACKLIST}
if [ `md5sum blacklist.conf | cut -d " " -f1` != `md5sum blacklist.conf.1 | cut -d " " -f1` ] ; then
/bin/mv blacklist.conf blacklist.conf.bak
/bin/mv blacklist.conf.1 blacklist.conf
UPDATED=`expr $UPDATED + 1`
echo "ok."
else
echo "allready up to date."
/bin/rm -f blacklist.conf.1
fi
# rules
echo -n "Updating rules.conf: "
/usr/bin/wget -t 30 -O rules.conf.1 -q ${RULES}
if [ `md5sum rules.conf | cut -d " " -f1` != `md5sum rules.conf.1 | cut -d " " -f1` ] ; then
/bin/mv rules.conf rules.conf.bak
/bin/mv rules.conf.1 rules.conf
UPDATED=`expr $UPDATED + 1`
echo "ok."
else
echo "allready up to date."
/bin/rm -f rules.conf.1
fi
# apache2 rules
echo -n "Updating apache2-rules.conf: "
/usr/bin/wget -t 30 -O apache2-rules.conf.1 -q ${APACHE2}
if [ `md5sum apache2-rules.conf | cut -d " " -f1` != `md5sum apache2-rules.conf.1 | cut -d " " -f1` ] ; then
/bin/mv apache2-rules.conf apache2-rules.conf.bak
/bin/mv apache2-rules.conf.1 apache2-rules.conf
UPDATED=`expr $UPDATED + 1`
echo "ok."
else
echo "allready up to date."
/bin/rm -f apache2-rules.conf.1
fi
# try restart
if [ "$UPDATED" -gt "0" ]; then
echo -n "Restarting apache: "
/bin/kill -HUP ${PID} 2>/dev/null
# did it work?
if `/bin/kill -CHLD ${PID} >/dev/null 2>&1`; then
echo "ok."
exit 0
fi
echo "error. Apache not running."
# blacklist
echo -n "Rolling back blacklist.conf: "
/bin/mv blacklist.conf blacklist.conf.new
/bin/mv blacklist.conf.bak blacklist.conf
echo "ok."
# rules
echo -n "Rolling back rules.conf: "
/bin/mv rules.conf rules.conf.new
/bin/mv rules.conf.bak rules.conf
echo "ok."
# apache2 rules
echo -n "Rolling back apache2-rules.conf: "
/bin/mv apache2-rules.conf apache2-rules.conf.new
/bin/mv apache2-rules.conf.bak apache2-rules.conf
echo "ok."
# try starting httpd again
`${APACHESTART}`
PID=`cat ${APACHEPID}`
# did that fix the problem?
if `/bin/kill -CHLD ${PID} >/dev/null 2>&1`; then
echo "That did the trick."
exit 0
fi
echo "Fatal: Apache still not running! Run apache2ctl -t to find the error."
exit 999
fi
Il faut rendre ce script exécutable.
chmod +x /etc/apache2/modsecurity2/modsec.sh
novembre 23rd, 2009 at 21 h 07 min
Hey quoi, tu as prix une dose massive de doc dans le cul pour en chier autant?
novembre 23rd, 2009 at 22 h 26 min
xD
janvier 18th, 2010 at 23 h 12 min
Bonjour,
Merci pour cet article qui me permet de configurer mod_security avec succès sur un serveur de test.
Je ne trouve pas de fichiers log et après recherche je suis tombé sur cette procédure :
http://forum.ovh.com/showthread.php?t=50900
Dois-je créer les répertoires et fichiers log ?
janvier 19th, 2010 at 1 h 50 min
dans /etc/apache2/conf.d/mod_security
# Only record the interesting stuff
SecAuditEngine RelevantOnly
SecAuditLog /var/log/apache2/modsecurity2/audit_log
# Configuration du module de debuggage.
SecFilterDebugLevel 0
SecFilterDebugLog /var/log/apache2/modsecurity2/modsec_debug_log
Pour d’autre infos sur les logs du mod security
http://www.modsecurity.org/documentation/modsecurity-apache/2.5.9/html-multipage/configuration-directives.html#N101EA
ensuite crée le dossier
mkdir /var/log/apache2/modsecurity2/
je modifierai le tuto de la semaine
janvier 19th, 2010 at 9 h 57 min
Bonjour
Ok, modif effectuée, je vais faire un tour sur ton lien et je pense que je reviendrai te poser des questions.
janvier 19th, 2010 at 10 h 09 min
le dossier log est créé, apache restart sans problèmes.
j’ai passé SecAuditEngine à On pour voir si le log fonctionne, pour le moment le dossier /var/log/apache2/modsecurity2/ est vide donc je pense que cela ne marche pas encore.
le serveur utilise virtualhost directive, quels paramêtres faut-il y ajouter ?
février 20th, 2010 at 9 h 05 min
merci pour le tutos, c’est parfait.
Clair et précis. Bon boulot !
mars 19th, 2010 at 15 h 21 min
Génial merci !
Beau boulot et très clair, en revanche, peut-être devrais tu revoir certains de tes fichiers car j’ai repéré certaines coquilles, notement dans les conf de fichier de log que tu donnes plus haut à Luke. Ex: /var/logs/ au lieu de /var/log/ …
Mais en tout cas ici ca roule
Bonne journée.