Avis config reverse proxy

Nouveau WRInaute
Bonjour à tous.

J'ai récemment revu la config de mon reverse proxy, à l'occasion d'un passage en SSL/TLS.
Il s'agit d'une architecture basique, où tous les serveurs sont vus de la même manière en interne (chacun son nom et IP) et en externe (tous les noms d'hôte pointent vers la même IP), sans aucune modification d'URL, et le certificat utilisé est donc un wildcard.
Jusqu'alors j'utilisais des définitions de VirtualHosts multiples, un VirtualHost par serveur "reverse-proxyfié". Difficilement maintenable...
Maintenant, je n'en ai plus que 2, un pour le HTTP (simple redirecteur) et un pour le HTTPS, avec un paquet de RewriteCond et RewriteRule [P] derrière.
N'étant pas expert dans le domaine, loin de là, j'aimerais beaucoup avoir un avis là-dessus.

Pour des raisons de maintenabilité là encore, toute la config serveur est celle par défaut (CentOS 5.3, Apache 2.2.3) et j'ai juste déposé un fichier reverse.conf dans /etc/httpd/conf.d.
Voici son contenu :

Code:
NameVirtualHost *:80
NameVirtualHost *:443

# Redirection HTTP vers HTTPS
<VirtualHost *:80>
	RewriteEngine On
	RewriteRule ^/(.*)$ https://%{SERVER_NAME}/$1 [R,L]
</VirtualHost>

<VirtualHost *:443>

ErrorLog logs/rev_error_log
TransferLog logs/rev_access_log

# Activation et configuration SSL
SSLEngine on
SSLProtocol all -SSLv2
SSLCipherSuite ALL:!ADH:!EXPORT:!SSLv2:RC4+RSA:+HIGH:+MEDIUM:+LOW
SSLCertificateFile /etc/pki/tls/certs/star_mondomaine_com.crt
SSLCertificateKeyFile /etc/pki/tls/private/star_mondomaine_com.key
SetEnvIf User-Agent ".*MSIE.*" \
         nokeepalive ssl-unclean-shutdown \
         downgrade-1.0 force-response-1.0

#   Per-Server Logging:
#   The home of a custom SSL log file. Use this when you want a
#   compact non-error SSL logfile on a virtual host basis.
CustomLog logs/rev_request_log \
          "%t %h %{SSL_PROTOCOL}x %{SSL_CIPHER}x \"%r\" %b"

# Active le moteur de réécriture d'URL
RewriteEngine On

# Autorise l'accès proxy vers un port HTTPS
SSLProxyEngine On

# Si le serveur demandé fait partie de la liste...
RewriteCond %{SERVER_NAME} ^abc\.mondomaine\.com$ [OR]
RewriteCond %{SERVER_NAME} ^def\.mondomaine\.com$ [OR]
RewriteCond %{SERVER_NAME} ^ghi\.mondomaine\.com$ [OR]
RewriteCond %{SERVER_NAME} ^jkl\.mondomaine\.com$ [OR]
RewriteCond %{SERVER_NAME} ^mno\.mondomaine\.com$

# Autre syntaxe possible...
#RewriteCond %{SERVER_NAME} ^(abc|def|ghi|jkl)\.mondomaine\.com$

# on redirige vers lui, toujours en HTTPS...
RewriteRule ^/(.*)$ https://%{SERVER_NAME}/$1 [P]

# Idem pour les serveurs qui ne supportent pas le HTTPS/SSL
RewriteCond %{SERVER_NAME} ^pqr\.mondomaine\.com$ [OR]
RewriteCond %{SERVER_NAME} ^stu\.mondomaine\.com$
RewriteRule ^/(.*)$ http://%{SERVER_NAME}/$1 [P]

# sinon on bloque tout!
RewriteRule ^.*$ - [F]

</VirtualHost>

Question subsidiaire:
Ma liste de serveur (la vraie) est plutôt longue. J'aimerais bien la déporter dans un fichier avec un genre de RewriteMap, mais je n'ai pas réussi. C'est possible ?

NB: La partie log mériterait d'être revue (pour au moins inclure le nom de serveur), si il y a des avis là-dessus je suis preneur aussi.

Merci d'avance!
 
Nouveau WRInaute
Le but d'un reverse proxy, c'est de permettre l'accès à un serveur que l'on ne peut pas ou que l'on ne veut pas rendre accessible directement.

En l'occurrence, ces serveurs sont pour la plupart des serveurs de messagerie, répartis sur une trentaine de sites sur le réseau privé de mon entreprise.
Les rendre accessible directement nécessiterait de leur attribuer à chacun une adresse IP publique, ainsi que quelques aménagements réseau (NAT). Et la connexion directe d'un client public vers les serveurs privés serait un risque de sécurité potentiel pour des serveurs HTTP pas forcément bâtis pour être exposés « in the wild », avec à la clé un accès direct au réseau privé en cas d'exploitation fructueuse d'une faille.
À l'inverse, l'utilisation en DMZ d'un serveur Apache (dont la fiabilité est éprouvée) comme reverse proxy permet de simplifier l'architecture réseau et protège les serveurs internes d'un certain nombre d'attaques.

Bref, c'est un dispositif un peu sensible, d'où ma demande d'avis sur cette config. :)
 
WRInaute accro
Il y a plein d'autres utilisations possibles d'un reverse proxy, mais au moins je comprends ce que tu veux faire.

Concernant ta config:
- tu n'as a priori pas besoin des NameVirtualHost, puisque tu ne fais pas de name-based virtual hosting.
- pour le rewritemap, je n'ai jamais utilisé, mais ceci devrait fonctionner, non?

Code:
RewriteMap toto txt:/chemin/vers/fichier
RewriteCond ${toto:%{SERVER_NAME}|BAD} =HTTPS
RewriteRule ^/(.*)$ https://%{SERVER_NAME}/$1 [P]

RewriteCond ${toto:%{SERVER_NAME}|BAD} =HTTP
RewriteRule ^/(.*)$ http://%{SERVER_NAME}/$1 [P]

Sachant que ton fichier devra avoir HTTP ou HTTPS comme valeur associée à chaque domaine.

Maintenant, je n'ai jamais utilisé mod_proxy (dans les scénarios de reverse proxying que j'utilise, pound est plus adapté) et je ne me sers pratiquement jamais de mod_rewrite, donc d'autres auront peut-être un avis plus éclairé!

Jacques.
 
Discussions similaires
Haut