Installation du waf modsecurity d’apache et reverse proxy
Par tous les moyens, vous cherchez à protéger votre réseau. Vous déployez un firewall pour bloquer les accès et les protéger de l’anti-spoofing, un fail2ban contre le brut force, rkhunter et compagnie, mais comment sécuriser les sites web que vous hébergez ??? Êtes-vous sûr que leur développement respecte les règles de l’art, qu’ils sont bien patchés avec les versions à jour… Il existe pourtant des solutions. Explorons ensemble la mise en place d’un web applicatif firewall appelé entre-amis WAF.
WAF le firewall pour vos applications web
Le principe du WAF est assez simple, un WAF se place entre internet et votre application web. Il va intercepter toutes les requêtes http pour les analyser suivant des règles de filtrage permettant de repérer les attaques et de les bloquer.
Il existe plusieurs modèles de WAF, nous allons ici mettre en place le module d’apache modsecurity. Vous pouvez bien sûr mettre directement votre waf sur votre serveur où sont les sites internets, mais ici je vais vous montrer comment mutualiser un WAF.

Explication de l infrastructure réseaux WAF
J ai choisi de mettre le serveur WAF sur un esxi pour plusieurs raison. D abord c est un serveur qui doit pouvoir évoluer suivant notre datacenter, une machine virtuelle offre cette flexibilité. Ensuite j ai fait le choix de donner une interface réseaux sur le WAF pour chaque serveur web que protégera le WAF. J ai donc une interface pour l administration et une pour chaque serveur web soit ici 3 en tout.
Pourquoi sommes toutes une interface par serveur web. Et bien tout simplement parce que cela m apporte de nombreux avantages de configurations je trouve. Pour le proxy je peux tout rediriger par l ip et non par le nom de domaine. Très utilie lorsque l’on a un serveur web hébergeant plusieurs nom de domaine.
Installation du WAF et du PROXY
On part d’une debian 7 fron scratch.
On commence par installer le serveur web apache et le modsecurity et le mod proxy
apt-get install apache2 libapache2-modsecurity libapache2-mod-proxy-html
On active tout le monde
a2enmod mod-security
a2enmod headers
a2enmod proxy_html
a2enmod proxy_http
Réglons tout de suite un bug de load de module. Si vous ne le faites pas vous aurez cette erreur dans votre /var/log/error.log
[Thu Jul 10 12:54:10 2014] [warn] proxy: No protocol handler was valid for the URL /. If you are using a DSO version of mod_proxy, make sure the proxy submodules are included in the configuration using LoadModule.
[Thu Jul 10 12:54:10 2014] [warn] proxy: No protocol handler was valid for the URL /favicon.ico. If you are using a DSO version of mod_proxy, make sure the proxy submodules are included in the configuration using LoadModule.
Il suffit de faire ceci :
ln -s /etc/apache2/mods-available/proxy_http.load /etc/apache2/mods-enabled/proxy_http.load
Paramétrage Modsecurity
on paramètre modsecurity
cd /etc/modsecurity
mv modsecurity.conf-recommended modsecurity.conf
On l’édite
vim /etc/modsecurity/modsecurity.conf
On active complètement modescurity
SecRuleEngine DetectionOnly
en
SecRuleEngine On
Puis rajouter juste après
SecDefaultAction "phase:2,log,auditlog,deny,status:403,tag:'SLA 24/7'"
SecServerSignature "Serveur Sécurisé"
Modifiez
SecPcreMatchLimit 1000
SecPcreMatchLimitRecursion 1000
En
SecPcreMatchLimit 2000
SecPcreMatchLimitRecursion 2000
Enfin
SecDataDir /tmp/
En
SecDataDir /var/cache/modsecurity/
Dé-commentez
SecDebugLog /var/log/apache2/modsecurity-debug.log
SecDebugLogLevel 3
et pour activer des règles on ajoute
Include /etc/modsecurity/activerules/*.conf
Attention l’include ne marche pas de manière récursive il faut toujours spécifier tous les répertoires ou vous avez des règles à charger.
Trouvez des règles pour le modsecurity
Par défault le modsecurity ne comporte pas de règle il faut en installer dans le dossier /etc/modsecurity/activerules/.
Il existe plusieurs sources gratuites ou payantes. Voici quelques liens.
- http://www.atomicorp.com/wiki/index.php/Atomic_ModSecurity_Rules
- https://www.owasp.org/index.php/Category:OWASP_ModSecurity_Core_Rule_Set_Project
- http://www.modsecurity.org/commercial-rules.html
A vous de faire votre choix.
En annexe un petit document à lire pour vous
http://www.ssi.gouv.fr/uploads/IMG/cspn/anssi-cspn-cible_2010-05fr.pdf
Configuration du Proxy
Pour rappel, nous avons détourné le flux http (port 80) allant sur le serveur web1 (192.168.1.40) vers le serveur waf sur son interface 192.168.1.4.
Il faut donc maintenant via apache rediriger le flux sur le serveur web1 grâce au mod_proxy
vim /etc/apache2/sites-available/web1.conf
<VirtualHost 192.168.1.4:80>
ServerAdmin webmaster@localhost
ProxyRequests Off
ProxyPreserveHost On
#ProxyHTMLExtended On
#SetOutputFilter INFLATE;proxy-html;DEFLATE
ProxyPass / http://192.168.1.40/
ProxyPassReverse / http://192.168.1.40/
ProxyTimeout 60
</Virtualhost>
On active le virtualhost et on recharge
a2ensite web1.conf
apache2ctl graceful
Modification des logs sur les serveurs Web
Si vous regardez les logs de votre serveur web, vous n’aurez plus que l’ip de l’interface du waf. Pour cela, il faut modifier le LogFormat afin qu’il reprenne en compte l’ip de l’internaute.
Éditez le fichier apache2.conf
vim /etc/apache2/apache2.conf
Commenter la ligne
LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined
ce qui donne
#LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined
et ajoutez en dessous
LogFormat "%{X-Forwarded-For}i %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined
Il suffit maintenant d’appliquer le tout
apache2ctl graceful
Conclusion
Nous venons de rajouter une couche en plus pour la protection de votre infrastructure, de plus nous l’avons centralisé en un endroit, ce qui facilite l’entretien. N’oubliez pas que sans les règles un WAF ne sert à rien, il faut donc les mettre à jour régulièrement.


1 commentaire