|
|
par Denis Ducamp (11/11/2000)
Ce document décrit comment installer un serveur apache en relais inverse
avec authentification basique et chiffrement ssl.
L'installation d'apache se fait comme à l'accoutumée avec support de ssl et
du relayage. Il est préférable de désactiver également ce qui est inutile
comme le support des modules et des cgi. Dans l'exemple suivant, apache a
été installé dans le répertoire /www (./configure ... --prefix=/www).
Il est ensuite nécessaire de réaliser les modifications suivantes dans le
fichier httpd.conf :
. changer la ligne Port en "Port 443"
. ne garder qu'une ligne Listen en "Listen 443"
Puis changer la configuration de la partie relayage comme suit :
<IfModule mod_proxy.c>
ProxyRequests Off
ProxyPass / http://192.168.1.98:8080/
ProxyPassReverse / http://192.168.1.98:8080/
<Directory proxy:*>
AuthType Basic
AuthuserFile /www/proxy/.htpasswd
AuthName Proxy
require valid-user
</Directory>
</IfModule>
Où 192.168.1.98 est le serveur sensible à protéger et 8080 son port.
Il est important de faire attention à ce que la ligne ProxyRequests soit à
off sinon il sera possible d'utiliser le relais inverse comme un véritable
relais...
Il est également possible de rajouter avec la ligne "require valid-user" les
quatre lignes ci-dessous afin de permettre des tests sans authentification
depuis l'adresse 127.0.0.1 .
Order deny,allow
Deny from all
Allow from 127.0.0.1
Satisfy any
Le fichier de mots de passes est à créer/modifier avec la commande htpasswd :
$ cd /www/proxy
$ ../bin/htpasswd -c .htpasswd username
Il est également possible de déclarer des groupes dans un fichier et de
rajouter la ligne suivante :
AuthGroupFile /www/proxy/.htgroup
puis de changer la ligne "require" :
Require group proxy
Le fichier .htgroup doit être au format suivant :
proxy:user1,user2,user3
Lancer le relais par les commandes suivantes :
# cd /www
# ./bin/httpd
Les journaux contiennent les lignes suivantes :
. logs/error_log :
[Sat Nov 11 14:57:21 2000] [notice] Apache/1.3.14 (Unix) mod_ssl/2.7.1 OpenSSL/0.9.6 configured -- resuming normal operations
. logs/ssl_engine_log :
[11/Nov/2000 14:56:50 05670] [info] Server: Apache/1.3.14, Interface: mod_ssl/2.7.1, Library: OpenSSL/0.9.6
[11/Nov/2000 14:56:50 05670] [info] Init: 1st startup round (still not detached)
[11/Nov/2000 14:56:50 05670] [info] Init: Initializing OpenSSL library
[11/Nov/2000 14:56:50 05670] [info] Init: Loading certificate & private key of SSL-aware server brett.groar.org:443
[11/Nov/2000 14:56:50 05670] [info] Init: Seeding PRNG with 136 bytes of entropy
[11/Nov/2000 14:56:50 05670] [info] Init: Generating temporary RSA private keys (512/1024 bits)
[11/Nov/2000 14:57:21 05670] [info] Init: Configuring temporary DH parameters (512/1024 bits)
[11/Nov/2000 14:57:21 05671] [info] Init: 2nd startup round (already detached)
[11/Nov/2000 14:57:21 05671] [info] Init: Reinitializing OpenSSL library
[11/Nov/2000 14:57:21 05671] [info] Init: Seeding PRNG with 136 bytes of entropy
[11/Nov/2000 14:57:21 05671] [info] Init: Configuring temporary RSA private keys (512/1024 bits)
[11/Nov/2000 14:57:21 05671] [info] Init: Configuring temporary DH parameters (512/1024 bits)
[11/Nov/2000 14:57:21 05671] [info] Init: Initializing (virtual) servers for SSL
[11/Nov/2000 14:57:21 05671] [info] Init: Configuring server brett.groar.org:443 for SSL protocol
[11/Nov/2000 14:57:21 05671] [warn] Init: (brett.groar.org:443) You configured HTTP(80) on the standard HTTPS(443) port!
Tester ensuite avec les commandes suivantes :
$ /usr/local/ssl/bin/openssl s_client -connect 192.168.1.25:443
CONNECTED(00000003)
...
New, TLSv1/SSLv3, Cipher is EDH-RSA-DES-CBC3-SHA
Server public key is 1024 bit
...
---
HEAD / HTTP/1.0
HTTP/1.0 401 Authorization Required
Date: Sat, 11 Nov 2000 14:05:11 GMT
Server: Apache/1.3.14 (Unix) mod_ssl/2.7.1 OpenSSL/0.9.6
WWW-Authenticate: Basic realm="Proxy"
Connection: close
Content-Type: text/html; charset=iso-8859-1
closed
Ici l'entête http est générée par le relais qui a refusé la connexion,
demandant une authentification au client (erreur 401). Aucune requête n'a
été émise entre le relais et le serveur.
$ /usr/local/ssl/bin/openssl s_client -connect 192.168.1.25:443
CONNECTED(00000003)
...
New, TLSv1/SSLv3, Cipher is EDH-RSA-DES-CBC3-SHA
Server public key is 1024 bit
...
---
HEAD / HTTP/1.0
Authorization: Basic dGVzdDp0ZXN0
HTTP/1.0 200 OK
Date: Sat, 11 Nov 2000 14:09:03 GMT
Server: Apache/1.3.14 (Unix) PHP/4.0.3 mod_ssl/2.7.1 OpenSSL/0.9.6
Content-Type: text/html
closed
Ici le relais a validé l'authentification et renvoyé la requête au serveur.
L'entête http reçue par le client a été générée par le serveur sensible
protégé par le relais (apache avec PHP).
|