Le module Security est une sorte de firewall pour Apache, il fait appel à des règles qui sont mises à jour assez souvent.
Ces règles permettent de protéger votre serveur web des scripts PHP/CGI destinés à compromettre l'intégrité de votre serveur.
Pour faire simple ce module bloque les requêtes pouvant être dangereuses.
Exemple en image :
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://ftp.debian-unofficial.org/debian/pool/main/liba/libapache-mod-security/libapache2-mod-security_1.9.4-1duo+sarge1_i386.deb
Résultat :
21:44 cartman@serveur ~# wget http://ftp.debian-unofficial.org/debian/pool/main/liba/libapache-mod-security/libapache2-mod-security_1.9.4-1duo+sarge1_i386.deb
--21:44:41-- http://ftp.debian-unofficial.org/debian/pool/main/liba/libapache-mod-security/libapache2-mod-security_1.9.4-1duo+sarge1_i386.deb
=> `libapache2-mod-security_1.9.4-1duo+sarge1_i386.deb'
Résolution de ftp.debian-unofficial.org... 212.112.242.148
Connexion vers ftp.debian-unofficial.org|212.112.242.148|:80...connecté.
requête HTTP transmise, en attente de la réponse...200 OK
Longueur: 49,382 (48K) [application/x-debian-package]
100%[==========================================>] 49,382 100.04K/s
21:44:41 (99.99 KB/s) - « libapache2-mod-security_1.9.4-1duo+sarge1_i386.deb » sauvegardé [49382/49382]
Installation du paquet :
# dpkg -i libapache2-mod-security_1.9.4-1duo+sarge1_i386.deb
Résultat :
Sélection du paquet libapache2-mod-security précédemment dé-sélectionné. (Lecture de la base de données... 47118 fichiers et répertoires déjà installés.) Dépaquetage de libapache2-mod-security (à partir de libapache2-mod-security_1.9.4-1duo+sarge1_i386.deb) ... Paramétrage de libapache2-mod-security (1.9.4-1duo+sarge1) ...
En cas d'erreur :
Sélection du paquet libapache2-mod-security précédemment désélectionné. (Lecture de la base de données... 47118 fichiers et répertoires déjà installés.) Dépaquetage de libapache2-mod-security (à partir de libapache2-mod-security_1.9.4-1duo+sarge1_i386.deb) ... dpkg : des problèmes de dépendances empêchent la configuration de libapache2-mod-security : libapache2-mod-security dépend de mod-security-common (= 1.9.4-1duo+sarge1) ; cependant : Paquet mod-security-common n'est pas encore configuré. dpkg : erreur de traitement de libapache2-mod-security (--install) : problèmes de dépendances - laissé non configuré Des erreurs ont été rencontrées pendant l'exécution : libapache2-mod-security zsh: exit 1 dpkg -i libapache2-mod-security_1.9.4-1duo+sarge1_i386.deb
Il vous faudra taper ceci :
# apt-get -f install
Résultat :
21:45 cartman@serveur ~# apt-get install -f Lecture des listes de paquets... Fait Construction de l'arbre des dépendances... Fait 0 mis à jour, 0 nouvellement installés, 0 à enlever et 0 non mis à jour. 2 partiellement installés ou enlevés. Il est nécessaire de prendre 0o dans les archives. Après dépaquetage, 0o d'espace disque supplémentaires seront utilisés. Paramétrage de libapache2-mod-security (1.9.4-1duo+sarge1) ... Paramétrage de mod-security-common (1.9.4-1duo+sarge1) ...
Voila le module est installé. Maintenant on active ce dernier auprès d'Apache.
# a2enmod mod-security
Résultat :
21:51 cartman@serveur ~# a2enmod mod-security Module mod-security installed; run /etc/init.d/apache2 force-reload to enable.
Relance d'Apache pour qu'il prenne le module en charge.
# /etc/init.d/apache2 restart
L'installation à partir des sources n'est pas compliquée je vous rassure.
Avant de commencer il nous faut récupérer les sources du module.
# wget http://www.modsecurity.org/download/modsecurity-apache_2.0.4.tar.gz
Résultat:
21:51 cartman@serveur ~# wget http://www.modsecurity.org/download/modsecurity-apache_2.0.4.tar.gz
--21:55:19-- http://www.modsecurity.org/download/modsecurity-apache_2.0.4.tar.gz
=> `modsecurity-apache_2.0.4.tar.gz'
Résolution de www.modsecurity.org... 82.165.78.202
Connexion vers www.modsecurity.org|82.165.78.202|:80...connecté.
requête HTTP transmise, en attente de la réponse...200 OK
Longueur: 302,451 (295K) [application/x-tar]
100%[==========================================>] 302,451 108.36K/s
21:55:22 (108.07 KB/s) - « modsecurity-apache_2.0.4.tar.gz » sauvegardé [302451/302451]
On décompresse l'archive à l'aide de tar.
# tar zxvf modsecurity-apache_2.0.4.tar.gz
On se place dans le répertoire modsecurity-apache_2.0.4 puis apache2
# cd modsecurity-apache_2.0.4/apache2
Maintenant que nous somme prêt, passons à la compilation du module.
# apxs2 -cia mod_security2.cCa compile…
Déclarons à Apache qu'il doit utiliser le module, pour se faire placez-vous dans le répertoire /etc/apache2/mods-available/ puis créez un fichier mod_security.load à l'aide de votre éditeur de texte préféré et ajoutez-y les lignes suivantes :
LoadModule security2_module /usr/lib/apache2/modules/mod_security2.so
Ensuite :
# a2enmod mod_security
Résultat :
21:59 root@krisskross ~# a2enmod mod_security Module mod-security installed; run /etc/init.d/apache2 force-reload to enable.
On relance Apache.
# /etc/init.d/apache2 restart
L'installation du module Security est terminée, ça va vous êtes toujours présent(e) ?
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 regles_mod-security dans le répertoire /etc/apache2/, on se place dedans et on télécharge les règles.
# 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é conf_security.conf pour y ajouter les lignes suivantes :
# 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/regles_mod-security/exclude.conf # Règles de protections. Include /etc/apache2/regles_mod-security/rules.conf # Règles dédiées au spam. Include /etc/apache2/regles_mod-security/blacklist.conf # Règles de filtrage des hotes, proxy, etc... Include /etc/apache2/regles_mod-security/blacklist2.conf # Règles interdisant certains client, robots, etc... Include /etc/apache2/regles_mod-security/useragents.conf # Protection contre les rootkits. Include /etc/apache2/regles_mod-security/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/regles_mod-security/proxy.conf # Quelques règles de plus, uniquement pour Apache2. Include /etc/apache2/regles_mod-security/apache2-rules.conf </IfModule>
Pour exclure l'utilisation de l'une de ces règles il faut commenter (ajouter un #) la ligne, exemple :
#Include /etc/apache2/regles_mod-security/apache2-rules.conf
La configuration du module est terminé, maintenant il ne reste plus qu'a indiquer à Apache ou se trouve le fichier de conf.
Dans /etc/apache2/apache2.conf on ajoute ceci :
Include /etc/apache2/conf_security.conf
On relance Apache.
# /etc/init.d/apache2 restart
Source de la configuration : http://gotroot.com/tiki-index.php?page=Setup+of+mod_security
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 :
# Tout les jours à 5h30 du matin. 30 5 * * * /etc/apache2/regles_mod-security/modsec.sh
Ce script bash a été adapté pour une distribution Debian, il aura pour nom modsec.sh et sera placé dans /etc/apache2/regles_mod-security/
#!/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/regles_mod-security" 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 modec.sh
Source du script : http://gotroot.com/downloads/ftp/mod_security/downloaders/modsec.sh