Reverse Proxy Web

réf  SSL: http://doc.ubuntu-fr.org/tutoriel/securiser_apache2_avec_ssl?s[]=apache2&s[]=ssl

Le serveur est sur la DMZ.
Son rôle est de faire reverse proxy web, c'est à dire point d'entrée web pour l'ensemble des serveurs web publics ou privés de notre domaine et faciliter ainsi le contrôle et les maintenances derrière.

Pour ceci, on installe un apache avec le mode proxy et ssl
apt-get install apache2
a2enmod proxy
a2enmod ssl
Il peut être intéressant d'installer le mode proxy_html, capable de ré-écrire les URL directement dans les pages html.
apt-get install libapache2-mod-proxy-html
a2enmod proxy_html

On autorise les requêtes sur notre domaine :
nano /etc/apache2/mods-enabled/proxy.conf
<Proxy *>
       AddDefaultCharset off
       Order allow,deny
       Allow from all
</Proxy>

Puis on fabrique le certificat :
openssl req -x509 -nodes -days 365 -newkey rsa:1024 -out /etc/apache2/server.crt -keyout /etc/apache2/server.key
Lire le doc du lien en référence  (en haut) pour l'explication des valeurs à saisir dans la fabrication du certificat.
Et on change les droits du fichier contenant  la clé générée
chmod 440 /etc/apache2/server.key

On fait ensuite la configuration des virtual host:
cd /etc/apache2/sites-available
nano vhost-iut.conf
et on saisit :
# Redirecteur toto.iut-rodez.fr port 443 SSL
<VirtualHost 193.75.75.133:443>
  ServerName toto.iut-rodez.fr
  SSLEngine on
  SSLCertificateFile /etc/apache2/server.crt
  SSLCertificateKeyFile /etc/apache2/server.key

  ProxyPass          /          http://titi.iut.rdz/
  ProxyPassReverse   /          http://titi.iut.rdz/
</VirtualHost>

# Redirecteur toto.iut-rodez.fr port 80
<VirtualHost 193.75.75.133:80>
  ServerName toto.iut-rodez.fr
  Redirect permanent / https://toto.iut-rodez.fr/
</VirtualHost>

# Redirecteur joomla-public.fr port 80
# Redirecteur avec ré-écriture d'URL dans le HTML
<VirtualHost 193.75.75.133:80>
  ServerName joomla-public.fr
  ProxyRequests off
  ProxyPass          /          http://joomla-inside.rdz/
#  ProxyHTMLURLMap http://joomla-inside.rdz /
  <Location />
         # ProxyHTMLEnable On        
         # selon la version de mod-proxy-html il faut ProxyHTMLEnable ou SetOutputFilter
          SetOutputFilter proxy-html
          ProxyPassReverse   http://joomla-inside.rdz/
          ProxyHTMLURLMap    http://joomla-inside.rdz  http://joomla-public.fr
  </Location>
</VirtualHost>

On n'oubliera pas, après chaque ajout d'un virtual host, de déclarer un CNAME du reverse proxy dans le DNS concerné et de redémarrer ce DNS.
S'il ne l'est pas encore, on active le virtual host :
a2ensite vhost-iut.conf


enfin on recharge apache :
/etc/init.d/apache2 force-reload

Attention :


Si le reverse proxy doit délivrer des certificats différents pour des noms d'hôtes différents, il faut que chaque virtual host dispose de sa propre adresse IP.
En effet, Apache a besoin de savoir quel certificat délivrer lors du chiffrement de la connexion SSL. Il va donc choisir son entrée dans le fichier en fonction de l'IP sur laquelle arrive la requête http.
Ceci implique bien sûr de procéder en plus à :
  • la création d'un enregistrement A dans le DNS (pas un CNAME !) pour chaque IP,
  • l'ajout de cette IP sur le serveur hébergeant le reverse proxy (vzctl set frontal-http --ipadd nouvelle_IP --save, pour un VPS, commande à passer sur l'hôte openVZ),
  • l'ajout de règles dans la politique de sécurité sur le fire-wall avec ces nouvelles adresses IP.
Comments