Installation et configuration d’un WAF (Debian 8.6)

WAF pour Web Application Firewall est un module qui permet de protéger votre serveur web (Appache ou Nginx) des attaques DdoS, des injections SQL ou encore des attaques de type XSS. Il s’appuie les travaux du projet OWASP (Open Web Application Security Project).

Installation de ModSecurity pour Apache

On installe le module WAF pour Apache en tapant la commande suivante :

1
# apt-get install libapache2-mod-security2

Avant de redémarrer Apache pour prendre en compte le module installé, nous allons activer le mode debug intégré au module « mod_security ». On sauvegarde le fichier d’origine en tapant la commande suivante :

1
# mv /etc/apache2/mods_available/security2.conf{,.ori}

Le fichier « security2.conf » livré avec le paquet est quasiment vide. Nous allons le remplacer par le fichier de configuration proposé par Debian. Pour cela, nous allons taper la commande suivante :

1
# cp /etc/modsecurity/modsecurity.conf-recommanded /etc/apache2/mods_available/security2.conf

La configuration par défaut détecte les attaques mais ne les bloques pas afin de vérifier que les règles n’empêche pas le bon fonctionnement du site web. Pour nous en assurer, nous devons activer les logs. Nous allons éditer le fichier de configuration via la commande suivante :

1
# vi /etc/apache2/mods_available/security2.conf

On décommente les lignes 173 et 174 et on modifie la ligne 173 comme ci-dessous :

1
2
SecDebugLog /var/log/modsecurity/debug.log
SecDebugLogLevel 3

Nous devons activer le module « modsecurity » dans Apache. Pour cela nous allons taper la commande suivante :

1
# a2enmod security

Nous devons créer le répertoire qui contiendra le fichier de log via la commande suivante :

1
# mkdir /var/log/modsecurity/

Le fichier « unicode.mapping » n’étant pas dans le répertoire indiqué dans le fichier de configuration et afin d’éviter un plantage lors du redémarrage du serveur Apache nous allons créer un lien symbolique vers ce dernier via la commande suivante :

1
# ln -s /etc/modsecurity/unicode.mapping /etc/apache2/mods-enabled/unicode.mapping

Nous redémarrer Apache pour prendre en compte les modifications. Pour cela nous allons taper la commande suivante :

1
# systemctl restart apache2.service

Nous pouvons maintenant vérifier dans le fichier de log « /var/log/modsecurity/debug.log » que les règles activées par défaut n’empêche pas le site web de fonctionner. Si c’est bien le cas, nous allons pouvoir activer le blocage. Pour cela nous éditons à nouveau le fichier de configuration via la commande suivante :

1
# vi /etc/apache2/mods_available/security2.conf

On active le blocage en modifiant la ligne 7 comme ci-dessous :

1
SecRuleEngine on

On redémarre Apache pour prendre en compte les modifications via la commande suivante :

1
# systemctl restart apache2.service

Pour désactiver une règle et afin qu’elle ne soit pas réactiver lors d’une mise à jour des règles, il faudra modifier votre fichier .htaccess ou le fichier de configuration de votre vhost comme ci dessous :

1
2
3
4
5
<LocationMatch "/wp-admin ">
    <IfModule security2_module>
        SecRuleRemoveById 973300
    </IfModule>
</LocationMatch>

L’id de la règle à désactiver sera à récupérer dans le fichier de log « /var/log/modsecurity/debug.log »