Pound : Installation et Configuration d'un Reverse Proxy

From Deimos.fr / Bloc Notes Informatique
Jump to: navigation, search
Pound Logo

1 Introduction

Un reverse proxy (« proxy inverse » en français, ou surrogate en terminologie anglaise) est un type de serveur proxy, habituellement placé en frontal de serveurs web. Il est à différencier dans son utilisation des serveurs mandataires traditionnels.

Le proxy inverse est implémenté du côté des serveurs Internet. L'utilisateur du web passe par son intermédiaire pour accéder aux applications de serveurs internes. Cette technique permet entre autres de protéger un serveur web des attaques provenant de l'extérieur.

Cette technologie est employée dans les solutions de sécurité applicative.

Il existe plusieurs applications reconnues pour les proxy inverses :

  • Sécurité : la couche supplémentaire apportée par les proxy inverses peut apporter une sécurité supplémentaire. La ré-écriture programmable des URL permet de masquer et de contrôler, par exemple, l'architecture d'un site web interne. Mais cette architecture permet surtout le filtrage en un point unique des accès aux ressources web.
  • Accélération SSL : le proxy inverse peut être utilisé en tant que « terminateur SSL », par exemple par le biais de matériel dédié,
  • Répartition de charge : le proxy inverse peut distribuer la charge d'un site unique sur plusieurs serveurs web applicatifs. Selon sa configuration, un travail de ré-écriture d'URL sera donc nécessaire,
  • cache : le proxy inverse peut décharger les serveurs web de la charge de pages/objets statiques (pages HTML, images) par la gestion d'un cache local. La charge des serveurs web est ainsi généralement diminuée,
  • Compression : le proxy inverse peut optimiser la compression du contenu des sites.

Après quelques recherches, il semblerait que ce Pound réponde comme l'une des meilleures solutions pour faire du reverse proxy. On peut également en faire avec Apache, Lighttpd, Nginix...
Mais vraisemblablement, c'est Pound qui sort du lot grâce car :

  • Il est léger et performant (fonctionne très bien avec + de 600 connections/sec)
  • On peu faire évoluer la configuration simplement pour faire du Load Balancing
  • Il est capable de gérer les sessions

2 Installation

Pour l'installer, c'est simple :

Command apt-get
apt-get install pound

3 Configuration

3.1 default

Configurez le /etc/default/pound si vous souhaitez qu'il démarre automatiquement :

Configuration File /etc/default/pound
startup=1

3.2 Basique Reverse Proxy

Ici, j'ai un apache qui tourne en local sur le port 8080 et j'ai donc Pound qui écoute sur le port 80 :

Configuration File /etc/pound/pound.cfg
## Minimal sample pound.cfg
##
## see pound(8) for details
 
 
######################################################################
## global options:
 
User            "www-data"
Group           "www-data"
#RootJail       "/chroot/pound"
 
## Logging: (goes to syslog by default)
##      0       no logging
##      1       normal
##      2       extended
##      3       Apache-style (common log format)
LogLevel        1
 
## check backend every X secs:
Alive           30
 
## use hardware-accelleration card supported by openssl(1):
#SSLEngine      "<hw>"
 
# poundctl control socket
Control "/var/run/pound/poundctl.socket"
 
 
######################################################################
## listen, redirect and ... to:
 
## redirect all requests on port 8080 ("ListenHTTP") to the local webserver (see "Service" below):
ListenHTTP
        Address 10.101.0.39
        Port    80
 
        ## allow PUT and DELETE also (by default only GET, POST and HEAD)?:
        xHTTP           0
 
        Service
                BackEnd
                        Address 127.0.0.1
                        Port    8080
                End
        End
End

3.3 Basique Load Balancée

Pour une configuration nous allons tenter une redirection avec IP ou VirtualHost :

Configuration File /etc/pound/pound.cfg
       ListenHTTP
           Address 192.168.0.200
           Port    80

           Service
               HeadRequire "Host: .*www.deimos.fr.*"

               BackEnd
                   Address 192.168.0.1
                   Port    80
               End
           End

           Service
               HeadRequire "Host: .*www.mavro.fr.*"

               BackEnd
                   Address 192.168.0.2
                   Port    80
               End
           End
       End

Ici, notre serveur écoute sur le port 80 de l'IP 192.168.0.200. Si on utilises le VirtualHost deimos.fr, il y aura redirection sur l'ip 192.168.0.1:80. Sinon si c'est mavro.fr, la redirection se fera sur l'adresse 192.168.0.2:80.
Vous l'aurez compris, c'est assez simple.

Note : Le développeur de Pound ne recommande pas d'utiliser les VirtualHosts et de le faire faire par la couche inférieure.

Important : Sachez qu'il est impossible de faire du VirtualHost avec du https. Ceci est dû à une limitation du protocole et non à Pound spécifiquement.

4 Ressources

http://www.apsis.ch/pound/index_html
http://www.cyberciti.biz/faq/linux-http-https-reverse-proxy-load-balancer