System-Linux

Aller au contenu | Aller au menu | Aller à la recherche

Compiler apache2 avec les options proxy pour faire du reverse proxy

Un peu d'explication par ici.

Présentation issue du journal du net :

Qu'est-ce qu'un reverse proxy ?

Le proxy inversé remplit le rôle de passerelle entre Internet et le réseau local d'entreprise. Il donne accès depuis l'extérieur et via Internet aux serveurs internes de l'entreprise en transmettant indirectement les requêtes qui lui sont adressées. Cela évite à l'entreprise de trop exposer ses serveurs Web frontaux, en les plaçant derrière un serveur sécurisé et prévu pour encaisser des grosses charges de trafic.

L'autre intérêt du reverse proxy provient de la gestion des logs de manière à établir des tableaux de bord précis de l'usage d'une application distante. Le reverse proxy peut faire office de serveur cache également, afin de soulager les serveurs Web frontaux des requêtes les plus courantes. Il sert également d'accélérateur SSL pour répondre à des besoins de temps de réponse court.

Quels sont les usages supplémentaires auxquels répond le reverse proxy ?

Ces serveurs se trouvent en position idéale pour réaliser la fonction de répartiteur de charge. Connecté aux différents serveurs internes de l'entreprise, il peut distribuer en fonction de la charge serveur, les requêtes Web aux machines les moins occupées. Dans une architecture où chaque serveur Web possède une fonction bien particulière (applications, gestion des images, gestion des sessions...), le reverse proxy redirige le trafic vers le serveur concerné.

Autre fonction utile, les reverse proxy peuvent faire office de machines intermédiaires pour la compression de données, ou comme pare-feu. C'est en effet la fonction du proxy que de bloquer les menaces entrantes et d'assurer l'authentification de l'utilisateur distant. A ce titre, il peut servir de serveur de cryptage SSL et être directement connecté à des serveurs d'authentification avec lesquels il va gérer les droits d'accès et la durée des sessions.

Le reverse proxy peut-il diminuer la complexité d'une architecture Web ?

Oui, s'il existe de nombreux services différents. D'abord parce qu'en centralisant toutes les requêtes depuis un point d'accès unique, il est ensuite possible de gérer de manière uniforme les pages d'erreurs 404 par exemple, la gestion du cache ou l'authentification des utilisateurs. De plus, si les applications Web accèdent à des environnements très distincts, le reverse proxy est capable de traiter de manière centralisée toutes les requêtes indistinctement.

En revanche, comme le reverse proxy devient vite le couteau suisse des sites Web, il devient aussi l'élément le plus fragile. En cas d'attaque à distance, si le hacker parvient à infiltrer le serveur proxy il peut avoir accès à tout élément du réseau interne. Pour limiter ce risque, les entreprises séparent généralement la machine dans une zone sécurisée (DMZ). L'idée étant de ne permettre les connexions entre les différentes DMZ que sur un port donné et entre deux applications, afin de limiter la zone d'exposition.

Compiler apache2 avec les options suivantes :

./configure --prefix=/opt/httpd-proxy --enable-module=most --enable-shared=max --enable-rewrite --enable-unique-id --enable-proxy-http --enable-proxy

Les modules utilisés:

Mod_proxy
Mod_proxy_http
Mod_ssl

Une fois la compilation terminée vérifiez bien que les modules sont chargés dans votre httpd.conf.

Vhost dans le fichier httpd-vhosts.conf ou autre selon votre configuration :

<VirtualHost *:80>
        ServerName      outils.test.net
        ProxyRequests Off
        ProxyVia On
        <Proxy *>
                Order deny,allow
                Allow from all
        </Proxy>
        ProxyPass / http://piwik.test.net/
        ProxyPassReverse / http://piwik.test.net/
        <Location />
                Order allow,deny
                Allow from all
        </Location>
</VirtualHost>

A savoir que pour faire du ssl, toujours dans httpd-vhost.conf, penser à enlever le vhost par défaut qui se trouve dans httpd-ssl.conf :

<VirtualHost *:443>
ServerAdmin moi
ServerName toto.la-bas.fr

SSLEngine On
SSLCertificateFile /etc/apache2/ssl/certificat.pem

LogLevel warn

CustomLog /var/log/apache2/toto-ssl-access.log combined
ErrorLog /var/log/apache2/toto-ssl-error.log

ServerSignature Off

ProxyRequests off
<Proxy *>
Order deny,allow
Allow from all


ProxyPass / http://serveur-interne/
ProxyPassReverse / http://serveur-interne/

</VirtualHost>

Principe de fonctionnement simple :

reverse proxy png

Biensur il peut y avoir plusieurs "web serveur" derrière le proxy.

Autre exemple de virtualhost :

<VirtualHost _default_:443>
DocumentRoot "/opt/httpd/htdocs"
ServerName localhost:443
ServerAdmin exploitation@test.fr
ErrorLog "/opt/httpd/logs/error_log"
TransferLog "/opt/httpd/logs/access_log"
SSLEngine on
SSLCipherSuite ALL:!ADH:!EXPORT56:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP:+eNULL
SSLCertificateFile "/ssl/ocs-server.crt
SSLCertificateKeyFile "/ssl/ocs-server.key"
BrowserMatch ".*MSIE.*" \
         nokeepalive ssl-unclean-shutdown \
         downgrade-1.0 force-response-1.0
CustomLog "/opt/httpd/logs/ssl_request_log" \
          "%t %h %{SSL_PROTOCOL}x %{SSL_CIPHER}x \"%r\" %b"

</VirtualHost>
Par GanGan | le lundi, mai 25 2009 08:00