reverse proxy sur Apache 2 pour OWA 2007

reverse proxy sur Apache 2 pour OWA 2007 - Sécurité - Systèmes & Réseaux Pro

Marsh Posté le 07-10-2010 à 17:19:25    

Bonjour à tous,
je viens poster ici car après des dizaines d'heures passées sur ce problème, je n'arrive toujours à rien.
Je précise que j'ai longtemps chercher avant de poster, et sur ce forum également, mais rien ne correspond exactement à mon soucis/archi.
 
Pour résumer rapidement, je voudrais publier l'OWA de mon Exchange 2007 sur le net via un nom de domaine que nous avons crée pour l'occasion.
Le petit schéma suivant vaut mille explications :
 
webmail.nomdomaine.fr --> IP-publique --> Netasq U250 --> RP Linux/Apache --> OWA 2007
    (http ou https)                                 (http ou https)     (http ou https)       (https seulement)
 
Donc quand on tape webmail.nomdomaine.fr la requête arrive sur le netasq qui porte l'IP publique, mais qui fait seulement une simple redirection des flux http/https vers un linux ou je voudrais faire tourner Apache en reverse proxy (RP). Apache redirigeant le flux http vers https, pour ensuite arriver uniquement en https sur l'OWA.
 
Mon Linux est une Centos 5.5 final, kernel 2.6.18-194.11.4 et Apache 2.2.3.
Je n'ai qu'une seule interface réseau (eth0) sur mon linux et il ne porte donc pas l'IP publique.
 
J'ai trouvé mille config différentes pour Apache, des parties fonctionnent, mais pas d'autres, quelqu'un pourrait-il me renseigner?
Voici ma conf Apache (résumé) :
 
NameVirtualHost webmail.nomdomaine.fr:80
NameVirtualHost webmail.nomdomaine.fr:443
 
# REDIRECTION VERS HTTPS
<VirtualHost webmail.nomdomaine.fr:80>
    ServerName webmail.nomdomaine.fr
    ServerAlias webmail.nomdomaine.fr
 
    Redirect permanent / https://webmail.nomdomaine.fr/owa
</VirtualHost>
 
# REDIRECTION VERS OWA EXCHANGE
<VirtualHost webmail.nomdomaine.fr:443>
    ServerAdmin admin@nomdomaine.fr
    ServerName webmail.nomdomaine.fr
    ServerAlias webmail.nomdomaine.fr
 
    ErrorLog logs/webmail.nomdomaine.fr-error_log
    CustomLog logs/webmail.nomdomaine.fr-access_log common
 
    SSLEngine On
    SSLCertificateFile /etc/httpd/conf/certs/server.crt
    SSLCertificateKeyFile /etc/httpd/conf/private/server.key
 
    SSLProxyEngine On
    SSLProxyVerify none
    ProxyRequests Off
    ProxyPreserveHost On
 
    RequestHeader set Front-End-Https "On"
 
    Redirect permanent / https://webmail.nomdomaine.fr/owa
 
    ProxyPass /owa https://monexchange/owa/
    ProxyPassReverse /owa https://monexchange/owa/
 
    CacheDisable *
</VirtualHost>
 
J'ai aussi ajouté dans le fichier /etc/hosts la correspondance IP <-> monexchange
J'ai aussi généré moi-même le certificat serveur directement, donc sans autorité de certification, donc même si j'ai un message comme quoi le certificat n'est pas valide, je bypass, on verra après pour en prendre un "vrai" publique.
Pour info, l'OWA en interne fonctionne très bien, et avec une simple redirection de port du linux vers l'exchange avec réécriture de l'IP source ça marche aussi de l'extérieur, mais je voudrais faire mieux en terme de sécurité.
 
La redirection http -> https fonctionne bien, pour le reste c'est moins sûr.
Je n'arrive pas à comprendre le fonctionnement des certificats déjà : il en faut un sur le RP linux et j'en ai un autre sur l'exchange, comment cela se passe du point de vue extérieur, donc webmail.nomdomaine.fr ? surtou que ce n'est pas le RP qui porte l'@ publique ?
Bref, comment dois-je faire au niveau de la PKI?
En tout cas, j'ai un beau message d'erreur "ssl_error_rx_record_too_long", donc erreur de certificat mais d'où?
 
De plus, je ne sais pas si je dois faire comme ça au niveau de ma conf Apache et plus précisément de mon virtualhost en 443.
Ma config est-elle vraiment fonctionnelle? Mon redirect et mon ProxyPass/reverse sont-ils corrects?
 
Merci d'éclairer ma lanterne, je deviens fou...  :cry:  
Si ça continue je vais retourner aux redirection de ports mais ça sucks et en plus ça fonctionne pas super niveau perf.
 
J'ajoute que sans me taper la doc complète d'Apache, je suis tombé sur plusieurs articles/doc sur l'utilisation des virtualhost entre autres, et à priori je ne vois pas pourquoi ma conf ne fonctionnerait pas. Par contre, y'a plein d'options que j'ai repris sans étudier à fond, j'avoue que j'ai moyen envie et que ma conf n'est pas non plus hyper longue.
 
Merci d'avance!

Reply

Marsh Posté le 07-10-2010 à 17:19:25   

Reply

Marsh Posté le 08-10-2010 à 10:57:39    

question stupide : sais-tu que ton netasq peut faire du vpn ssl et renvoyer vers le serveur owa ?

Reply

Marsh Posté le 08-10-2010 à 11:23:02    

ouahhh...  :pt1cable:  
j'avais déjà vu ce "VPN SSL" mais je pensais pas que ça faisait ça donc j'ai jamais été voir...
ça roxe! tu roxes aussi pkc!!!
big thanks!  :bounce:  
je vais tester ça illico !

Reply

Marsh Posté le 08-10-2010 à 12:04:16    

bof c'est un usage différent, faut savoir exactement ton besoin pour savoir si tu préfères un vpn ssl ou un reverse proxy

Reply

Marsh Posté le 08-10-2010 à 13:32:06    

le vpnssl ca permet aussi d'activer le outlook anywhere ?

Reply

Marsh Posté le 08-10-2010 à 14:43:23    

oui... l'effet trouvaille est retombé...   :(  
super chiant à config et surtout ça donne pas l'url que je veux au final --> http://monexchange:443/owa au lieu de https://monexchange/owa
en fait c'est utile pour un extranet ou tout autre serveur web uniquement en http.
 
et effectivement, je pense pas que ça marche PAS pour des smartphones (android, Iphone, WM) ni pour Outlook Anywhere et c'était aussi mon but. (vu qu'il faut se logguer sur le netasq et que du coup ça "bouffe" l'accès publique par l'IP/nom de domaine)
Donc je vais repartir sur du RP Apache... si quelqu'un à une piste sur ma conf...?  :sarcastic:  
 
Thx pour la fonction du Netasq, ça peut servir.

Message cité 1 fois
Message édité par albator_84 le 08-10-2010 à 14:45:31
Reply

Marsh Posté le 08-10-2010 à 15:02:47    

Je@nb a écrit :

bof c'est un usage différent, faut savoir exactement ton besoin pour savoir si tu préfères un vpn ssl ou un reverse proxy


 
Un VPN SSL est aussi de facto un reverse proxy donc bon. Mais c'est pas soumis à licence ?!
 

albator_84 a écrit :

oui... l'effet trouvaille est retombé...   :(  
super chiant à config et surtout ça donne pas l'url que je veux au final --> http://monexchange:443/owa au lieu de https://monexchange/owa
en fait c'est utile pour un extranet ou tout autre serveur web uniquement en http.
 
et effectivement, je pense pas que ça marche PAS pour des smartphones (android, Iphone, WM) ni pour Outlook Anywhere et c'était aussi mon but. (vu qu'il faut se logguer sur le netasq et que du coup ça "bouffe" l'accès publique par l'IP/nom de domaine)
Donc je vais repartir sur du RP Apache... si quelqu'un à une piste sur ma conf...?  :sarcastic:  
 
Thx pour la fonction du Netasq, ça peut servir.


 
Je comprends pas en quoi la solution VPN SSL pose problème pour les smartphones, normalement les solutions commerciales font toutes RP https->http(s) avec un portail sur lequel tu t'authentifies puis après un lien vers ton owa reverse proxifié.
 
Pour en revenir à apache : tes clients verront bien le certificat du RP, pas d'owa. Ta conf a l'air bonne, tu pourrais nous dire ce que tu vois dans les logs apache ?
 
A priori c'est le SSL côté client->RP qui foire, désactive le temporairement (SSLEngine). Tu auras un RP http->https, pas très secure évidemment.
 
 
 
 

Reply

Marsh Posté le 08-10-2010 à 15:08:30    


 
Prends l'habitude de toujours mettre le slash de fin de tes chemins quand même :
 
Redirect permanent / https://webmail.nomdomaine.fr/owa/
Redirect permanent / https://webmail.nomdomaine.fr/owa/
 
ProxyPass /owa/ https://monexchange/owa/
ProxyPassReverse /owa/ https://monexchange/owa/

Reply

Marsh Posté le 08-10-2010 à 15:45:39    

Parce que faire du activesync avec un portail faudra m'expliquer comment tu le fais marcher, tout comme outlook anywhere ....
 
Après outlook anywhere avec un RP Apache, laisse tomber, utilise Squid, c'est le seul moyen que j'ai trouvé de le faire marcher

Reply

Marsh Posté le 08-10-2010 à 15:49:25    

ok merci, j'avais déjà vu pour les "/" mais je l'ai pas fait... je vais les rajouter.
 

Citation :

Je comprends pas en quoi la solution VPN SSL pose problème pour les smartphones, normalement les solutions commerciales font toutes RP https->http(s) avec un portail sur lequel tu t'authentifies puis après un lien vers ton owa reverse proxifié.


Bah sur le netasq y'a pas vraiment de RP à proprement parlé... je pense que ça en fait en couplant le NAT/Filtrage/etc... en tout cas, je n'ai pas vu de fonctions qui permettaient une réécriture de l'@IP source comme iptables sous linux (si le NAT, mais ça fait pas vraiment pareil), ni même de réécriture d'URL ou RP HTTP/S.
Pas contre, le VPN SSL est fourni de base dans le boitier netasq (U250), on a a droit à 128 voir 256 serveur http je crois... lol
 
Du coup ,j'ai toujours mon erreur "ssl_error_rx_record_too_long"... erreur de certificat.
Je regarde les logs d'Apache en détail pour vous dire, et ce que ça fait avec les "/".

Reply

Marsh Posté le 08-10-2010 à 15:49:25   

Reply

Marsh Posté le 08-10-2010 à 16:06:44    

On doit pas parler de la même chose, je connais bien les VPN SSL Juniper et leur fonction "principale" est de bien RP SSL + authentification :)
 
Mais peut-être que netasq a vu les choses différemment...

Reply

Marsh Posté le 08-10-2010 à 16:19:45    

Alors quelques petits trucs supplémentaires :
Quand je laisse ma config comme indiqué dans mon 1er post... ça marche pas en fait (meme la simple redirection http->https), je tombe sur la page web (index) que j'ai faite pour voir si on arrivait bien sur le serveur au début.
Par contre, quand j'enlève les "NameVirtualHost" webmail.nomdomaine.fr:80 et :443 et que je mets des "*" dans les virtualhost à la place des "webmail.nomdomaine.fr" justement, eh ben là ça marche.. je comprends pas.
Le problème est que j'aimerais dans l'avenir mettre un autre nom de domaine (clients.nomdomaine.fr) pointant sur ce RP, donc créer 2 nouveaux virtualhost et que si ça répond déjà pas avec un, ça risque pas de marcher avec le 2ème...  :(

 

Donc la redirection marche bien (avec les "*" ) mais j'ai une Internal Server Error (erreur 500? d'après les access-log) :
xxx.xxx.xxx.xxx (IP publique client) - - [08/Oct/2010:16:03:29 +0200] "GET /owa/ HTTP/1.1" 500 623
pour l'url "https://webmail.nomdomaine.fr/owa/"

 

et pour les error-log j'ai ça:
[Fri Oct 08 16:03:29 2010] [error] [client IP-ExchangeInterne] SSL Proxy requested for webmail.nomdomaine.fr:443 but not enabled [Hint: SSLProxyEngine]
[Fri Oct 08 16:03:29 2010] [error] proxy: HTTPS: failed to enable ssl support for IP-ExchangeInterne:443 (srvexch-cas)

 

--> ces logs access et error ne sont valables que si j'enlève le SSLEngineOn
donc quand je le remets... je peux pas trop dire ce que ça fait... ça mouline, ça mouline... ("En attente de webmail.nomdomaine.fr..." ) mais y'a même pas de timeout... je vais voir les logs!

 

Maintenant j'ai ça :
[error] xxx.xxx.xxx.xxx (IP publique client) (104) Connection reset by peer: proxy: error reading status line from remote server nomDNS-ExchangeInterne
[error] xxx.xxx.xxx.xxx (IP publique client) proxy: Error reading from remote server returned by /owa/auth/logon.aspx

Message cité 1 fois
Message édité par albator_84 le 08-10-2010 à 16:25:11
Reply

Marsh Posté le 08-10-2010 à 16:45:38    

Citation :

On doit pas parler de la même chose, je connais bien les VPN SSL Juniper et leur fonction "principale" est de bien RP SSL + authentification :)
 
Mais peut-être que netasq a vu les choses différemment...


effectivement, je sais que les VPN SLL Juniper (ou autre.. Nortel Alteon) font ça mais ce sont encore plus des vrais boitiers pro spécialisés dans le Firewalling et le RP. Je connais pas du tout les produits Juniper mais j'ai déjà vu du Nortel Alteon je sais plus quel modèle qui faisait ça mais vraiment ça, et on pouvait carrément créer un workflow complet pour un flux (FW, RP, contrôle, filtrage, redirection, etc...), enfin tout était possible!
 
Le Netasq est à mi-chemin entre pro et grand public, même si c'est à 95% côté pro au vu des fonctionnalités et aussi du prix!  :ange:  
Par contre c'est assez une usine à gaz, mais je dirais que c'est complet et que ça fonctionne plutôt pas mal. Par contre, j'ai mis énormément de temps à comprendre certaines philosophies du bousin. En plus, y'a certain terme francisé qui veulent dire plein de choses mais au final on comprend pas. merci la doc dans ce cas. là aussi c'est pas mal, niveau doc, très complète mais pas assez exhaustive selon les cas.
 

Citation :

Parce que faire du activesync avec un portail faudra m'expliquer comment tu le fais marcher, tout comme outlook anywhere ....
 
Après outlook anywhere avec un RP Apache, laisse tomber, utilise Squid, c'est le seul moyen que j'ai trouvé de le faire marcher


Euh, pour le outlook anywhere, je n'envisage pas (ma boite) de le mettre en place, on a aucun nomade, uniquement de l'ActiveSync. Rassure moi ça marche avec le RP Apache l'activesync?  :D

Reply

Marsh Posté le 08-10-2010 à 17:11:23    

ça doit marcher l'active sync oui

Reply

Marsh Posté le 08-10-2010 à 17:22:50    

je vois bien passer les requêtes (owa et activsync) :
90.xxx.xxx.xxx - - [08/Oct/2010:17:00:11 +0200] "OPTIONS /Microsoft-Server-ActiveSync HTTP/1.1" 301 350
90.xxx.xxx.xxx - - [08/Oct/2010:17:00:12 +0200] "GET /owa/Microsoft-Server-ActiveSync HTTP/1.1" 302 -
90.xxx.xxx.xxx - - [08/Oct/2010:17:00:13 +0200] "GET /owa/auth/logon.aspx?url=https://webmail.nomdomaine.fr/owa/Microsoft-Server-ActiveSync&reason=0 HTTP/1.1" 200 8948
194.xxx.xxx.xxx - - [08/Oct/2010:17:03:05 +0200] "GET /owa/ HTTP/1.1" 302 -
194.xxx.xxx.xxx - - [08/Oct/2010:17:03:05 +0200] "GET /owa/auth/logon.aspx?url=https://webmail.nomdomaine.fr/owa/&reason=0 HTTP/1.1" 200 8921
194.xxx.xxx.xxx - - [08/Oct/2010:17:14:38 +0200] "GET /owa/ HTTP/1.1" 302 -
194.xxx.xxx.xxx - - [08/Oct/2010:17:14:39 +0200] "GET /owa/auth/logon.aspx?url=https://webmail.nomdomaine.fr/owa/&reason=0 HTTP/1.1" 200 1413
 
mais dans les error-log j'ai ça:
[error] [client 194.xxx.xxx.xxx] (104)Connection reset by peer: proxy: error reading status line from remote server ExchangeInterne
[error] [client 194.xxx.xxx.xxx] proxy: Error reading from remote server returned by /owa/auth/logon.aspx
[error] [client 90.xxx.xxx.xxx] (104)Connection reset by peer: proxy: error reading status line from remote server ExchangeInterne
[error] [client 90.xxx.xxx.xxx] proxy: Error reading from remote server returned by /owa/Microsoft-Server-ActiveSync
 
 :cry: mais pourquoi tant de haine !!!??  :cry:  
 
j'ai vu que c'est peut-être à cause de ma version d'Apache (bug dans la 2.2.3) mais yum ne me propose pas d'update... soulé de le faire à la main... ce sera pour lundi.
Quelqu'un aurait une piste ? (j'avance quand même je suis content! lol)

Reply

Marsh Posté le 08-10-2010 à 17:39:48    

Vu sur un forum, ce serait le maintien de session qui mettrait la grouille avec certaines pages vides.

 

SetEnv force-proxy-request-1.0 1
SetEnv proxy-nokeepalive 1

 

Absolument pas sûr de moi là dessus, et c'est dégueu j'avoue mais bon :D


Message édité par reckoner le 08-10-2010 à 17:40:09
Reply

Marsh Posté le 08-10-2010 à 18:03:28    

albator_84 a écrit :

Donc la redirection marche bien (avec les "*" ) mais j'ai une Internal Server Error (erreur 500? d'après les access-log) :
xxx.xxx.xxx.xxx (IP publique client) - - [08/Oct/2010:16:03:29 +0200] "GET /owa/ HTTP/1.1" 500 623
pour l'url "https://webmail.nomdomaine.fr/owa/"
 


 
Ca devrait marcher :/
 
Vu que ton vhost écoute sur 443 tu dois faire te connecter sur http://webmail.nomdomaine.fr:443/owa/ quand tu vires SSLEngine hein :)

Reply

Marsh Posté le 11-10-2010 à 10:21:44    

Citation :

Vu sur un forum, ce serait le maintien de session qui mettrait la grouille avec certaines pages vides.
SetEnv force-proxy-request-1.0 1
SetEnv proxy-nokeepalive 1


J'ai beau mettre ça (j'avais déjà testé car vu sur d'autre site/forum) mais rien ne fonctionne mieux apparemment.
 

Citation :

Vu que ton vhost écoute sur 443 tu dois faire te connecter sur http://webmail.nomdomaine.fr:443/owa/ quand tu vires SSLEngine hein :)


ça marche pas du tout si j'enlève le SSLEngine, Apache ne veut pas démarrer, mais bon c'est pas grave.
 
En tout cas, je n'ai plus d'erreurs 500... une bonne chose c'est sûr, mais dans les access-log j'ai toujours ça:
194.xxx.xxx.xxx - - [11/Oct/2010:10:10:05 +0200] "GET /owa/ HTTP/1.1" 302 -
194.xxx.xxx.xxx - - [11/Oct/2010:10:10:05 +0200] "GET /owa/auth/logon.aspx?url=https://webmail.nomdomaine.fr/owa/&reason=0 HTTP/1.1" 200 8921
 
Code erreur 302: move temporarly
Code erreur 200: OK
lol... en gros je sais pas pourquoi j'ai un 302, peut-être juste à cause du RP, mais en tout cas, ça a l'air de fonctionner! sauf qu'en fait ça charge mais rien ne s'affiche et la page reste en chargement... même pas de timeout!
Par contre, je n'ai plus rien dans les error-log. Comprends pas. Je remets ma config actuelle:
<VirtualHost *:80>
    ServerName webmail.nomdomaine.fr
    ServerAlias webmail.nomdomaine.fr
 
    Redirect permanent / https://webmail.nomdomaine.fr/owa/
</VirtualHost>
 
#<VirtualHost webmail.nomdomaine.fr:443>
<VirtualHost *:443>
    ServerAdmin adminweb@nomdomaine.fr
    ServerName webmail.nomdomaine.fr
    ServerAlias webmail.nomdomaine.fr
 
    ErrorLog logs/webmail.nomdomaine.fr-error_log
    CustomLog logs/webmail.nomdomaine.fr-access_log common
 
    SSLEngine On
    SSLCertificateFile /etc/httpd/conf/certs/server.crt
    SSLCertificateKeyFile /etc/httpd/conf/private/server.key
 
    SSLProxyEngine On
    SSLProxyVerify none
    ProxyRequests Off
    SetEnv force-proxy-request-1.0 1
    SetEnv proxy-nokeepalive 1
    ProxyPreserveHost On
 
    <Proxy *>
        Order deny,allow
        Allow from all
    </Proxy>
 
    RequestHeader set Front-End-Https "On"
 
    Redirect permanent / https://webmail.nomdomaine.fr/owa/
 
    ProxyPass /owa/ https://monexchange/owa/
    ProxyPassReverse /owa/ https://monexchange/owa/
 
    <Location /owa>
        Order deny,allow
        Allow from all
    </location>
 
    CacheDisable *
</VirtualHost>


Message édité par albator_84 le 11-10-2010 à 10:25:41
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed