Installation sous Linux/Debian:

Verifions tout d'abord si les packages sont disponnibles via apt:

serveur:~# apt-cache search libapache-mod-security
libapache-mod-security - Tighten web applications security for Apache 1.x
mod-security-common - Tighten web applications security - common files

On installe:

serveur:~# apt-get install libapache-mod-security mod-security-common

Installation à partir des sources: (necessite apache-dev => apt-get install apache-dev)

serveur:~# wget http://www.modsecurity.org/download/modsecurity-1.8.7.tar.gz
serveur:~# tar xzvf  modsecurity-1.8.7.tar.gz
serveur:~# cd modsecurity-1.8.7
serveur:~/modsecurity-1.8.7# apxs -cia apache1/mod_security.c

Verifions que le module est bien déclaré dans modules.conf:

serveur:~# cat /etc/apache/modules.conf|grep security
LoadModule security_module /usr/lib/apache/1.3/mod_security.so

Si ce n'est pas le cas, rajouter donc cette ligne.

Dans /etc/apache/httpd.conf, rajouter:

< IfModule mod_security.c >
# activer le moteur de mod_security
SecFilterEngine On
# vérifie la validité de l'encodage des urls
SecFilterCheckURLEncoding On

# vérifie la validité de l'unicode
SecFilterCheckUnicodeEncoding On

# Only allow bytes from this range
SecFilterForceByteRange 0 255

# log seulement pour certaines requetes
SecAuditEngine RelevantOnly

# Nom du fichier de log
SecAuditLog /var/log/apache/modsec_log

# niveau de debug
SecFilterDebugLog /var/log/apache/modsec_debug_log
SecFilterDebugLevel 0

# activation du scan des données en POST, par exemple les formulaires
SecFilterScanPOST On

# log des requetes http suspectes avec un status erreur 401, erreur d'authentification
SecFilterDefaultAction "deny,log,status:401"

# Controle des fichiers a uploader (seules des images autorisées ici)
SecFilterInheritance Off
SecFilterSelective POST_PAYLOAD "!image/(jpeg|bmp|gif|png)"

 # les entetes HTTP_USER_AGENT & HTTP_HOST sont requises, pas de telnet
SecFilterSelective "HTTP_USER_AGENT|HTTP_HOST" "^$"

# Eviter les attaques de type « Cross-site-scripting »
SecFilter "<(.|\n)+>"

# toute requete contenant la string /etc/passwd ne sera pas transmise à l’applicatif web.
SecFilter /etc/password

# Basic protection contre les commandes system
SecFilter /bin/sh
SecFilter /bin/bash
SecFilter /bin/ls

#Empêcher les attaques de type “directory transveral”.
SecFilter "\.\./"

# Eviter les problemes de SQL Injection
SecFilter "delete[[:space:]]+from"
SecFilter "insert[[:space:]]+into"
SecFilter "select.+from"

#Prévention des attaques de type XSS 
SecFilter "<(.|\n)+>" ]

< /IfModule >
Le site de Mod_Security
Voir aussi
Publié sur Generation Libre