13 juin 2015 | Posted in:Securisation

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.

Schema waf mutualisé

schéma de flux pour infrastructure serveur web protégé par 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.

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.

Be the first to comment.

Leave a Reply


You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

*