You are on page 1of 6

Apache en tant que reverse proxy

Fiche technique
Radosław Pieczonka

Degré de difficulté

L'ajout d'un reverse proxy permet de bénéficier d'un cloisonement des flux réseaux et d'un pare-feu applicatif filtrant les requêtes, permettant de renforcer l'architecture globale. Cet article présente comment utiliser Apache en mode reverse proxy.

L

a plupart des systèmes d'informations proposent des services intranet / extranet, généralement hébergés en DMZ dans les architectures. Directement accessibles depuis d'autres réseaux (dont Internet), ces services peuvent contenir des vulnérabilités inhérentes aux services hébergés (CMS, forums, webmail...), et donc être sujets à des attaques qualifiées et réussies. Une de ces applications est Microsoft OWA (Outlook Web Access), webmail très robuste, qui devient de plus en plus populaire dans la communauté Microsoft Server, devenant ainsi une cible pour les amateurs de failles de sécurité. À partir de ce cas d'étude, nous allons voir comment déployer et contrôler un niveau de sécurité acceptable sur de telles topologies réseaux. Généralement, les serveurs hébergeant des applications internes sont généralement situés en interne, notamment pour les intranet d'entreprises, ce qui est généralement une très bonne solution tant qu'un accès depuis l'extérieur n'est pas requis. Mais tôt ou tard le besoin d'accéder à ces ressources à partir d'Internet se fera ressentir, notamment pour les parties communiquantes comme la messagerie en li-

gne (webmail). Quelques scénarios peuvent à ce titre être considérés par les administrateurs réseaux afin de mettre en place une politique de sécurité adéquate.

Scénarios d'architectures

Le premier d'entre-eux consiste à allouer un accès privé virtuel RPV – Réseau Privé Virtuel ou VPN, mais cela requiert une configuration supplémentaire sur les stations clientes, ce que nous éviterons autant que possible dans un premier temps.

Cet article explique...
• • Comment utiliser Apache en mode reverse proxy. Mettre en place une architecture utilisant un reverse proxy.

Ce qu'il faut savoir...
• • • Installer un serveur Apache. Configurer des hôtes virtuels sur Apache. Mettre en place des règles de pare feu en DMZ.

54

hakin9 Nº 7-8/2007

www.hakin9.org

celle solution n'est pas vraiment différente de la précédente. mais utilisant les adressages et/ou certificats définissant la partie publique de l'infrastructure de l'entreprise. et les services webs (OWA. hormis le fait que les serveurs soient installés dans le système d'information global de l'entreprise. en poursuivant dans la même direction.hakin9. Figure 1). Dans ce cadre de travail. pare feu et reverse proxy peuvent être réalisées INTERNET Firewall Linux / NAT avec reverse proxy Trafic sécurisé SSL INTRANET Trafic HTTP Serveurs Web LAN Figure 3. Le reverse proxy mutualisé www. De plus. les fonctionnalités de routage. mais très flexible. Située dans le réseau de l'entreprise.Utiliser Apache en mode reverse proxy L'hébergement mutualisé Un second scénario consiste à installer les services en zones d'hébergement mutualisée (Cf. élément clef de toute infrastructure de sécurité. et non plus celle du fournisseur de services. Les requêtes externes provenant d'internet sont passées de la même manière aux serveurs. Mais. nous désirons donner accès aux informations depuis l'extérieur tout en Colocation hébergeur externe Serveurs Web Trafic direct Sécurise SSL Trafic direct Sécurisé SSL INTERNET Firewall Linux /NAT INTRANET La mise en DMZ Un troisième scénario consiste à installer les services dans une zone du réseau de l'entreprise physiquement ou logiquement isolée des autres – zone dite DMZ ou démilitarisée. celle-ci est soumise à un filtrage s'effectuant généralement via un pare feu IP. Cette solution a l'avantage de déléguer la maintenance de l'infrastructure (serveurs et services) au fournisseur. par une plate forme basée sur une architecture GNU/Linux ou *BSD. Hébergement des services chez le fournisseur d'accès Serveurs Web DMZ Trafic direct sécurisé SSL Trafic direct sécurisé SSL INTERNET Firewall Linux / NAT INTRANET Figure 2. Dans ce cas d'architecture. comme le proposent certains fournisseurs de services professionnels. Intranet. bien que nous ayons plus de contrôle sur cette infrastructure. il peut s'avérer impératif dans certaines situations de stocker les données privées sur le réseau de l'entreprise et non pas sur celui du fournisseur de services. CRM) placés en DMZ. un reverse proxy peut être installé sur le pare-feu. Figure 1.org hakin9 Nº 7-8/2007 55 . Hébergement des services en DMZ Le reverse proxy Quatrième scénario. Mais elle est toutefois moins flexible et peut entraîner un coût total de possession important. Le reverse proxy est une manière plus sophistiquée et délicate à mettre en place. et pour apporter une couche de sécurité supplémentaire. permettant de multiples et différentes configurations.

log CustomLog /var/log/apache2/owa.bar ServerName intra.lan/public ProxyPassReverse /public http://owa.lan/public ProxyPass /knb http://webserver.. un jeu de règles pour que le reverse proxy soit accessible depuis l'extérieur.log CustomLog /var/log/apache2/ssl-intra.). Comment gérer les connections chiffrées ? Grâce à ce changement.lan/ ProxyPassReverse / http://owa.e.lan/public ProxyPass /knb http://webserver.lan/exchange ProxyPass /exchweb http://owa.key SSLProxyEngine on ProxyPass /exchange https://owa.company. le contenu du site intranet est présenté au client. Elle ne fait que mapper les connexions sur un serveur du réseau 56 hakin9 Nº 7-8/2007 www. Listing 2). Les répertoires ProxyPass /exchange http://owa.lan/ ProxyPassReverse / http://owa.lan/exchweb ProxyPass /public http://owa. Premièrement..company. ce qui signifie généralement que nous devons créer des règles ou ACL : • un jeu de règles d'accès pour que le reverse proxy puisse accéder aux ressources internes.company.allow Allow from all </Proxy> </VirtualHost> • Pour publier les informations (provenant de OWA ou de la base CRM). nous utilisons le logiciel Apache doté des modules suivants chargés : mod_proxy. l'accès au serveur depuis Internet est limité seulement aux répertoires sélectionnés.lan/public ProxyPassReverse /public https://owa.lan/exchweb ProxyPassReverse /exchweb https://owa.org . Donc.com-access. Un serveur hébergé dans une zone réseau dédiée est une solution flexible et aisément administrable. nous devons spécifier les ressources web à publier (i.bar-access.foo. et sous quel répertoire web elles seront accessibles via le navigateur : ProxyPass / http://owa.company.lan/exchange ProxyPassReverse /exchange https://owa.lan sera accessible depuis Internet via l'adresse intra.bar-error.com ErrorLog /var/log/apache2/ssl-intra.allow Allow from all </Proxy> </VirtualHost> Nous allons maintenant nous intéresser à la configuration du service proprement dit (configuration d'Apache). Configuration du reverse proxy https <VirtualHost *:443> ServerAdmin admin@foo.lan/knowledgebase ProxyPassReverse /knb http://webserver.company.company. Avec une telle configuration.com.com ErrorLog /var/log/apache2/owa. Le service de reverse proxy peut être délégué et dédié sur un serveur physiquement installé en DMZ.. les cibles).com. mod_proxy _http. il faut s'assurer que le serveur web situé en DMZ puisse accéder aux parties attendues (Outlook Web Access.log common SSLEngine on SSLCertificateFile /etc/ssl/certs/ssl-cert-intra. interne. Ceci permet d'assurer le cloisonnement réseau requis et laisser les serveurs web ou intranet dans la zone privée de l'entreprise.hakin9.lan/knowledgebase ProxyRequests Off <Proxy *> Order deny. le domaine interne owa. que pouvons nous faire pour apporter plus de sécurité sur une architecture logicielle basée sur le reverse proxy ? Premièrement.lan/exchange ProxyPass /exchweb https://owa. Listing 1.com-error. Configuration du reverse proxy http <VirtualHost *> ServerAdmin admin@foo.log common ProxyPass / http://owa. Le Listing 1 propose une configuration basique des vhosts (hôtes virtuels). Conclusion L'installation d'une architecture utilisant un reverse proxy doit être étudiée en amont avec soin.bar ServerName intra. Selon l'url demandée.lan/exchweb ProxyPassReverse /exchweb http://owa.company.lan/ ProxyRequests Off <Proxy *> Order deny. elle n'inclue pourtant pas d'amélioration concernant la sécurité.pem SSLCertificateKeyFile /etc/ssl/private/ssl-cert-intra.lan/exchange ProxyPassReverse /exchange http://owa. la base de connaissance.lan/knowledgebase ProxyPassReverse /knb http://webserver.Fiche technique assurant les niveaux de sécurité et d'isolement réseau requis.lan/knowledgebase Listing 3. La mise en place du reverse proxy Listing 2.lan/ en devant spécifier les répertoires qui seront mappés par le proxy (Cf. C'est le dernier scénario possible et la base de notre architecture de travail.com.foo. Nous pouvons dire que cette solution est la manière optimale pour implémenter une telle solution.lan/exchweb ProxyPass /public https://owa.

Journalisation des requêtes Thu Apr 12 13:09:21 2007] [error] [client xxx.hakin9.status:409. Pare feu applicatif Généralement.. et chaque solution est potentiellement vulnérable à quelques exploits. Ceci peut se faire à l'aide du mod_ security2 d'Apache. c'est pourquoi il est nécessaire de pouvoir gérer les connexions chiffrées. avant d'établir la connexion. Listing 3). Cela peut aussi être une bonne voie pour l'utilisation d'un matériel de type carte accélératrice de chiffrement ssl. Outre le fait que ceci soit une bonne solution. Utilisation du mod_headers Header unset WWW-Authenticate Header set WWW-Authenticate "Basic realm=webmail. comme suit (Cf. Les navigateurs comme Mozilla Firefox. le mod_headers d'Apache devra alors être utilisé afin de pouvoir réécrire les en-têtes HTTP au niveau du proxy. le contenu des sites est composé des langages interprétés comme PHP. le trafic internet n'est pas considéré comme tel. quelques fois aussi. ASP ou tout autre technologie web similaire. Chargement des modules LoadFile /usr/lib/libxml2. [hostname "company. permettant la mise en place d'un tout autre niveau de www. où nous faisons apparaître la directive SSLProxyEngine.\\")</script>"] [ unique_id "kiwv4Fdi6FkABAVRAMsABBAAA"] Il est important de remarquer que bien que les sites internes soient généralement considérés comme de confiance.so LoadModule unique_id_module /usr/lib/apache2/modules/mod_unique_id. Un autre aspect concernant l'implémentation de la fonctionnalité de mod_proxy concerne la répartition de charge et la délégation du chiffrement depuis le serveur applicatif vers le serveur proxy. le code n'est pas mis à disposition ou délivré. Donc cette approche peut servir de socle de travail pour des infrastructures à clefs publiques (PKI).org hakin9 Nº 7-8/2007 57 . Microsoft Internet Explorer nécessite de son côté un réglage côté serveur. ce qui peut être une amélioration significative. Ce qui peut être toléré dans un réseau interne d'entreprise.. selon les licenses logicielles utilisées. Toutefois. Lorsque nous publions des ressources http avec le moteur SSL actvité sur le reverse proxy public. Listen 443 NameVirtualHost *:443 Maintenant nous pouvons mettre à jour la configuration des hôtes virtuels présentée en Listing 3. nous pouvons par exemple desservir plusieurs intranet sous la même racine d'url. Netscape Navigator. plus généralement connue en tant que Windows Integrated Authentication. Pattern match "<script" at ARGS: username. Le reverse proxy demandera donc un certificat valide devant être fourni par le navigateur. Règles mod_security2 SecRuleEngine On SecDefaultAction log.com"] [uri "/vulnerable. nous permettant de publier des ressources au travers du protocole https. et avec le même certificat SSL.Utiliser Apache en mode reverse proxy Listing 4. Il n'est pas étonnant de constater qu'une entreprise ne dispose pas des ressources suffisantes pour vérifier chaque partie de code utilisé. Listing 4). En se réferant aux publications officielles de Microsoft. Il est donc impératif de pouvoir filtrer et surveiller sensiblement les accès à notre domaine de publication.company.phase:2. il est intéressant d'implémenter une autre couche d'authentification utili- sateur. echo $_GET['username'] ?> Listing 7.xxx.com" Configurations particulières Listing 5. nous devons im-plémenter SSL dans notre exemple en ajoutant les paramètres suivants (Cf. Par exemple. il se peut que les problèmes surviennent avec des services logiciels ou des configurations serveurs particulières. Pour ceci.so Listing 6. situé au niveau de l'authentification NTLM.php?username= noob<script>alert(\\"I%20am%20so%20vulnerable.auditlog.t:none SecRule ARGS "<script" Listing 8. via des certificats clients.xxx] ModSecurity: Access denied with code 409 (phase 2).so LoadModule security2_module /usr/lib/apache2/modules/mod_security2. la publication de l'outil OWA (Outlook Web Access) à l'aide de la configuration par défaut du serveur Microsoft Exchange a un inconvéniant majeur. où l'authentification basée sur NTLM doit être désactivée depuis la console de management d'Exchange sur le serveur IIS.deny. l'authentification NTML ne fonctionnera pas au travers de proxies. Un fichier vulnérable This site is vulnerable to javascript injection <? if(!isset($_GET['username'])) $_GET['username'] = "no username supplied". Opera traitent correctement l'information. tout en permettant de réduire le poste de coût concernant les certificats.xxx. si ce type d'authentification doit être utilisé. Si les ressources publiées doivent être mises à disposition des employés de l'entreprise et/ou de tierces parties. peut ne pas répondre aux exigences concernant la sécurité lorsque le traffic vient d'Internet.

status:409. des failles de sécurité de ayant pu apparaître. Le site est vulnérable Ensuite. afin de réduire owa. Il peut s'avérer dévastatrice sur l'application elle-même. D'un autre côté. Généralement.com HTTPS HTTP INTERNET Linux Firewall / NAT INTRANET Figure 4. nous avons besoin d'activer la fonctionnalité mod_security2 pour notre reverse proxy.Fiche technique filtrage du protocole. ne disposant d'aucune maintenance corrective et préventive. Après l'installation.phase:2. Il est important d'être informé que mod_security2 exécute des actions par défaut.deny. Un des types les plus répandu d'attaque web concerne l'injection SQL. à l'aide de la directive suivante.lan webserver. le comportement par défaut sera de refuser les requêtes concernées et de les loguer avec un code d'erreur 409. de nouvelles fonctionnalités PHP pouvant être mises à disposition des développeurs. La requête est filtrée 58 hakin9 Nº 7-8/2007 www. Afin d'éviter de telles failles.ph p?username=jonny. Il est également possible d'outrepas- ser ce comportement par défaut pour des règles spécifiques. Vous pouvez voir comment se fait le chargement du module mod_security2 auprès d'Apache en Listing 5. il est avisé de mettre en place un jeu de règles adéquat à l'aide du mod_security2 d'Apache. L'installation du mod_security2 nécessite parfois une compilation du module.auditlog. ceci fait que la mise à jour ou la réécriture de l'application est difficile à envisager dans un cadre opérationnel et financier correspondant à celui de l'entreprise. SecRuleEngine On SecDefaultAction log.lan intra. Le reverse proxy dédié Figure 5. Par exemple. le fait est que si l'application n'est pas protégée contre les injections SQL. une compilation s'avère nécessaire. ce que nous verrons plus tard. Généralement due à un mauvais contrôle des variables.t:none Dans cette configuration. ce type d'attaque peut être évité en adaptant le code source en conséquence. nous paramétrons le comportement par défaut qui sera adopté par les règles de sécurité comme suit : Figure 6. En imaginant la situation où vous avez une application web importante dont la mise en place n'est pas récente. ceci est à vérifier auprès de votre éditeur ou de votre distribution gnu/linux préférée.DROP%20TAB LE%20users.company.hakin9. Le code de l'application en PHP peut être obsolète. afin de ne pas laisser une application buggée en ligne.org . une url du type : http://company. cette application est cruciale et il s'avère donc impératif de trouver un compromis entre faisabilité et sécurité.com/buggy.

Dans ce jeu de règles core rules. permettant de se pré-munir des attaques les plus connues et utilisées. comme suivant : like ?username=jonny<script> alert(”I am so vulnerable. Plus communément connu sous le nom de core rules. le rendant vulnérable : contenu du fi-chier vulnerable.et de contrôler les risques d'attaques.com http://www. Si nous établissons une architecture réseau basée sur Apache en reverse proxy et si nous activons le mod_security2. et permet d'associer une action à exécuter. nous pouvons exploiter la vulnérabilité d'injection de script en soumettant le code du script en tant que nom d'utilisateur. Il peut s'avérer stratégique pour respecter le cloisonnement physique et logique des réseaux d'entreprise. Et cela peut être mise en place grâce à des technologies basées sur des logiciels open source.”) </script> et comme illustré en Figure 5.ifresearch. Ceci permet de mettre en place un jeu de règles auxquelles sera appliqué le comportement par défaut. le second est la signature elle-même..pl Comme présenté dans cet article. en tant qu'Intégrateur et Analyste Système et Réseau.com http://www. il est important de noter que la mise en œuvre d'une politique de filtrage de flux doit être étudiée et testée avec soin.. Pour contacter l'auteur : radek.org . Listing 7). de la manière suivante (Cf. Configuré de cette manière. mod_security2 permet aussi de détecter des signatures dans le code source. sinon le comportement par défaut sera adopté. l www. Le premier déclare où chercher la signature. Nous pouvons résoudre ce problème sur l'application ou le serveur web luimême. Après une telle modification.wallix. le troisième pouvant être une option. Une action pourra alors être associée. datagramme.. mais le reverse proxy peut être l'élément clef pour intervenir en étant le hub de filtrage stratégique dans une infrastructure réseau/sécurité. En travaillant avec mod_security2.php (Cf. La première consiste à canonicaliser les entrées en remplaçant les slashes multiples (// ) les répertoires auto référencés (. Cette directive créée une entrée dans le filtre. La directive la plus communément utilisée avec mod_security2 est la directive SecRule. nous pouvons créer un script PHP buggé qui sera installé sur un serveur web sommairement configuré. l'utilisation et l'analyse de ce jeu de règle dis-ponible par défaut est fortement recommandée. et jour-naliser ces tentatives d'accès avec un code d'erreur spécifique. Pour illustrer comment le mod_security2 peux protéger la publication des informations web. Conclusion À propos de l'auteur Radosław Pieczonka travaille depuis un an pour IFResearch Pologne. La solution Apache2/ mod_proxy/mod_security2 est une alternative à des solutions de type ISA(c) proxy server. Lorsque le navigateur web envoie la requête. C'est un fonctionnement similaire à celui de netfilter.pieczonka@wallix.hakin9. permettant d'associer une action lorsqu'un flux (trame. filiale Recherche et Développement de WALLIX. en décodant les codes URL (%00 ). paquet) correspond. ceci permet de couvrir la plupart des problèmes de sécurité connus dans les application web. chaque directive peut recevoir 2 ou 3 attributs. Listing 8). Nous allons voir comment intervenir sur ce type de trafic à partir du reverse proxy filtrant. afin de ne pas polluer et déranger l'utilisation normale de ressources mises à disposition des utilisateurs. l'attaquent recevra le code d'erreur 409 et toutes les tentatives d'accès seront journalisées de la manière suivante (Cf. le reverse proxy peut être utilisé afin d'améliorer la sécurité concernant la publication des informations de manière significative. Listing 6)./ ). nous pouvons simplement bloquer les requêtes contenant la chaîne <script>. le site est protégé par le reverse proxy filtrant.