GoldZone Web Hosting

Rédigé par Gaëtan Trellu (goldyfruit)

Outils pour utilisateurs

Outils du site


security

Installation et configuration du mod Security.

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 :

Installation.

Ce module n'est pas installé de base avec Apache, je vais vous proposer deux méthodes à vous de choisir la votre :

  1. Via le paquet à l'aide de la commande dpkg.
  2. Via les sources (personnellement je choisis par compilation des sources car la version est plus récente).

Installation via dpkg.

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

Installation à partir des sources.

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.c

Ca 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) ?

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 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

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 :

# 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

security.txt · Dernière modification: 2011/01/05 16:05 (modification externe)