"Christmas - the time to fix the computers of your loved ones" « Lord Wyrm

Reverse Proxy für Joomla und Lotus Domino

Roli84 03.11.2010 - 15:02 3043 14
Posts

Roli84

Little Overclocker
Registered: Feb 2007
Location: Graz
Posts: 59
Hallo,

seit mehreren Wochen versuche ich schon einen Reverse Proxy für unseren Joomla-Webserver und für das Webmail-Interface von Lotus Domino zu konfigurieren. Es scheitert teilweise an meiner Dummheit und teilweise an Eigenheiten der Programme.


Was ich brauche:
............Internet
................|
........ reverse Proxy
...........|............|
Webserver..... Lotus Domino Webmail

Also wenn ich auf
http://www.example.com/ soll man auf den webserver kommen.
http://www.example.com/mail soll man auf den Lotus Domino Webmail kommen der auf einem anderen Port läuft.

Wobei der reverse Proxy ja nicht einfach forwarden darf, niemand darf direkt mit dem Webserver oder Webmail kommunizieren.

Was ich versucht habe:

Apache2 mit mod_proxy, mod_headers, mod_rewrite usw....
Auf meiner Debianinstallation hat das anpassen der Links in den Headern nicht funktioniert d.h. wenn man über den reverse Proxy auf einen xampp ins root geht und die dortige index.php öffnet gehts nicht weiter weil in der index.php die Weiterleitung ins /xampp/ subdirectory per
$uri .= $_SERVER['HTTP_HOST'];
header('Location: '.$uri.'/xampp/');
gemacht wird. Zusätzlich hat kein Rewrite Befehl funktioniert.

Ich vermute das Lotus Domino das ähnlich macht und dewegen nicht funktioniert.

So hab ich am Apache2 Webmail konfiguriert

Zitat
<Location />
ProxyPass https://10.30.236.1:444/
ProxyPassReverse https://172.30.236.1:444/
SetOutputFilter proxy-html
ProxyHTMLExtended On
ProxyHTMLDoctype XHTML
RequestHeader unset Accept-Encoding
</Location>

geht aber

Zitat
<Location /mail>
ProxyPass https://10.30.236.1:444/
ProxyPassReverse https://172.30.236.1:444/
SetOutputFilter proxy-html
ProxyHTMLExtended On
ProxyHTMLDoctype XHTML
RequestHeader unset Accept-Encoding
</Location>

geht nicht, es werden keine Images oder CSS geladen und PHP/js arbeitet nicht.
Hab schon mit Rewrite Befehlen rumprobiert die werden einfach ignoriert.


Pound kann keine Unterverzeichnisse verarbeiten deswegen ist es durchgefallen.

Nginx versuch ich grad da schaff ichs aber nicht die Ports umzudrehen und die Subdirectory Weiterleitungen richtig zu konfigurieren.

Das geht auch hier nicht.
Zitat
location /mail {
#rewrite ^/mail(.*)$ ^/$1;
proxy_pass https://10.30.236.1:444/;
proxy_redirect off;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For proxy_add_x_forwarded_for;
}

Ein weiteres Problem is das ich den der Port des Webmail Servers nicht abfangen kann... wenn ich http://iprproxy/mail aufrufe komme ich auf http://iprproxy:444/mail was natürlich nicht geht.

Wenn ich den reverse Proxy auf Port 444 hören lasse gehen wie beim Apache keine Bilder kein CSS und kein PHP/js

Hat irgendjemand von euch ne Idee? Bin schon am verzweifeln.

lg Roli

Smut

takeover &amp;amp; ether
Avatar
Registered: Feb 2003
Location: VIE
Posts: 16802
habs mir jetzt nicht alles durchgelesen. scheitert aber sicher am SSL, dafür ist grundsätzlich eine direkte kommunikation mit dem webserver erforderlich. der reverse proxy muss als man in the middle agieren um den server dahinter zugänglich zu machen.
also ich würde die verbindungen direkt an den webmail dienst weitergeben. ich sehe den sinn dahinter nicht. wenn der reverse proxy zum mitm wird, dann wird das der neue flaschenhals weil er doppelten verschlüsselungsaufwand hat.

EG

thinking with portals
Avatar
Registered: May 2004
Location: 11**
Posts: 3918
Was ist denn überhaupt der Sinn hinter diesem Konstrukt? Was willst du damit erreichen?
Irgendwie schaut das nämlich für mich so aus, als willst du dir ein bissl "botschates" VPN basteln?

Roli84

Little Overclocker
Registered: Feb 2007
Location: Graz
Posts: 59
@Smut
SSL ist kein Problem da der reverse Proxy auch SSL kann (er verwendet sogar die selben Zertifikate wie die Server dahinter)
Ma kann einen reverse Proxy so konfigurieren das ma übers Internet nur per https draufkommt aber er mit den Servern dahinter über http kommuniziert. Umgekehrt gehts auch aber das macht keinen Sinn.

@EvilGohan
da gibts an haufen Vorteile:
- es muss nurmehr der reverse Proxy in der DMZ stehen
- reverse Proxy macht Caching
- Load Balancing
- entlastet Webserver

schau mal auf https://secure.wikimedia.org/wikipe...i/Reverse_proxy

Erreichen will ich das wir nurmehr ein System in der DMZ stehen haben was dann je nach Pfad oder Port auf ein System dahinter vermittelt. Weiterleiten wär ja falsch.
Bearbeitet von Roli84 am 03.11.2010, 15:49

EG

thinking with portals
Avatar
Registered: May 2004
Location: 11**
Posts: 3918
Jaja das is mir eh klar...das heißt also du bist in einer Firma (?) im Rechenzentrum (?) und ihr wollt euren Kunden (?) die Möglichkeit geben auf eure interne Serverfarm zuzugreifen. Deswegen wollts den reverse proxy aus Caching/Balancing Gründen vorschalten?

Schonmal dran gedacht eine Cloud zu bauen? :D Soll sich ziemlich gut verkaufen hab ich gehört...

Smut

takeover &amp;amp; ether
Avatar
Registered: Feb 2003
Location: VIE
Posts: 16802
Zitat von Roli84
@Smut
SSL ist kein Problem da der reverse Proxy auch SSL kann (er verwendet sogar die selben Zertifikate wie die Server dahinter)
Ma kann einen reverse Proxy so konfigurieren das ma übers Internet nur per https draufkommt aber er mit den Servern dahinter über http kommuniziert. Umgekehrt gehts auch aber das macht keinen Sinn.
ok, das ist natürlich die andere möglichkeit. ich wusste nicht ob der webmailserver über einen öffentlichen link mit dem reverse-proxy verbunden ist oder nicht. sehs jetzt aber eh anhand der ip configs.

kleinerChemiker

Here to stay
Avatar
Registered: Feb 2002
Location: Wien
Posts: 4280
Loadbalancing bei einem Webserver und einem Mailserver? Vor allem Load Balancing könnte schwierig werden, wenn der Proxy wegen SSL in die Knie geht.

Roli84

Little Overclocker
Registered: Feb 2007
Location: Graz
Posts: 59
@EvilGohan
Reverse Proxy is da wesentlich billiger als ne Cloud zu bauen.
Wir brauchen den ja hauptsächlich um Leute die von extern kommen anhand des Paths auf verschiedene Server zu leiten.
An de Firewall kann ich Leute ja nur anhand des Ports auf andere Server schicken. Aber schonmal versucht von ner Firma auf Port 444 zu connecten?
Meistens sind nur die FTP und HTTP/S Ports offen.

@kleinerChemiker
Wir brauchen ihn ja nicht als Load Balancer sondern um Leute anhand des Paths auf verschiedene Server zu schicken.

Normal macht der Webserver SSL PHP und anderes Scripting Zeugs. Wenn man ihm jetzt SSL abnimmt (weil das ja der Proxy macht) und noch ein bisschen cached hat der Webserver weniger Arbeit.

EG

thinking with portals
Avatar
Registered: May 2004
Location: 11**
Posts: 3918
War eh eher scherzhaft gemeint, weil Clouds in letzer Zeit ja so "cool" sind...drum auch der smiley. ;)

Mir ist schon klar, was ihr damit bezwecken wollt, aber ich seh irgendwo den Vorteil nicht, gegenüber Systemen die einfach in der DMZ stehen...abgesehn davon, dass halt ein zusätzlicher Abstraktionslayer drin ist.

Du baust dir dadurch wie smut schon gesagt hat einen Flaschenhals und im Endeffekt auch einen single point of failure! Fällt der Proxy, fallen beide Systeme.
Außerdem bin ich wie meine beiden Mitdiskutanten der Meinung, dass die Verschlüsselung sehr schnell die Kapazitäten des Systems ausschöpft. Deswegen gibts für diesen Zweck ja auch eigene Appliances, die das in Hardware machen.
Im Prinzip verlagerst du ja die Last von 2 Systemen auf eines.

Was deine Frage angeht: Nein, ich kenn keine Firmen die Port 444 offen haben, weil die meisten einfach ihre Kisten in eine DMZ-Stellen und für ihre Kunden über den well known port zugänglich machen.

Wenns hier um Sicherheitsbedenken geht ists imho auch der falsche Weg, weil es keine Rolle spielen _sollte_ ob nun ein Mail-, oder ein Proxy-Server aus dem www zugänglich ist.

Wenn du kein load balancing damit betreiben willst, würd ich eher bei der Sicherheit ansetzen, anstatt diese exotische Konfiguration zu verfolgen.

userohnenamen

leider kein name
Avatar
Registered: Feb 2004
Location: -
Posts: 15854
btw: er meinte port 444 nach außen offen ;)
beim rest enthalte ich mich weil ich zur lösung nix beizutragen hab, aber gut zu wissen das es noch jemanden gibt der notes in salzburg einsetzt :D

Roli84

Little Overclocker
Registered: Feb 2007
Location: Graz
Posts: 59
@EvilGohan
Du hast schon recht vor allem mit der Ausfallsicherheit.
Aber ich kenn keine andere Möglichkeit Leute anhand des Paths auf verschiedene Server zu schicken.
zb:
http://www.example.com --> Webserver
http://www.example.com/webmail --> Webmail
http://www.example.com/traveler --> Traveler Server

Wir haben da zu viele Services die die selben well known ports brauchen würden.
Natürlich könnten wir jetzt neue IPs beantragen aber das ist ja auch keine Lösung.

Man kommt ja bei den meisten Firmen ja auch nicht mit Zielport z.B 444 raus. Wenn jetzt jemand seinen Webshop auf https betreibt kann er seinen Webmail Zugang zb auf Port 444 betreiben. Dann hast is Problem (was wir jetzt haben) dass wenn du bei ner anderen Firma schnell Mails checken willst nicht aufs Webmail kommst.

@userohnenamen
ja wir betreuen ca 50 Firmen in Salzburg die Lotus einsetzen.... aber schonmal versucht Lotus als relationale Datenbank zu verwenden? :)

Im nginx hab ich das zum laufen gebracht:
location / {
proxy_set_header X-Real-IP $remote_addr;
proxy_pass https://10.30.236.1:444/;
proxy_redirect off;

proxy_set_header Host $host;
proxy_set_header X-Forwarded-Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
Die folgende Config geht aber wenn ich "location /webmail" setz kommt ein Header mit ner anderen Location und Port zurück und der Request lauft ins leere.

Ich bräuchte sowas wie
"proxy_set_header location=localhost/webmail"
und
"proxy_set_header Port=443".

Habe aber nichts gefunden.

kleinerChemiker

Here to stay
Avatar
Registered: Feb 2002
Location: Wien
Posts: 4280
Kann man beim Apache nicht auch die Header modifizieren? Eventuell eigenes Modul notwendig?

edit: Klar gibts da ein Modul: http://httpd.apache.org/docs/2.0/mod/mod_headers.html

Schon mal angedacht, verschiedene Subdomains statt verschiedenen Pfaden zu verwenden? Wenn die Pfade schon zu verbreitet sind bei den Benutzern, könnte man einfach den Server, der auf http://www.domain.tld reagiert, 301er ausgeben lassen bei den einzelnen Pfaden.
Bearbeitet von kleinerChemiker am 04.11.2010, 15:20

Roli84

Little Overclocker
Registered: Feb 2007
Location: Graz
Posts: 59
@kleinerChemiker
mod_headers ist was anderes damit kannst du header modifizieren wenn du apache in verbindung mit mod_proxy als reverse proxy hernimmst.
hab ich allerdings nicht zum laufen gebracht weil apache meine rewrite und header statements völlig ignoriert hat.

aber bei Sachen wie lotus domino webmail kannst kein mod_headers installieren :) deswegen hilfts mir nicht.

Und auf welchem Gerät sortierst du incoming Traffic anhand der subdomains auf die richtigen Server? Laut meines Wissens brauchst dafür wieder sowas wie nen reverse Proxy.
Oder hab ich dich falsch verstanden?

kleinerChemiker

Here to stay
Avatar
Registered: Feb 2002
Location: Wien
Posts: 4280
Server sollten nun mal eigene IPs haben, die du dann jeder Subdomain am DNS zuordnest.

Lotus Domino braucht auch kein mod_proxy, sondern das sollte am Proxy laufen. Wenn es dort allerdings nicht funktioniert, kann ich dir auch nicht weiterhelfen. War nur so ein Gedanke von mir.

EG

thinking with portals
Avatar
Registered: May 2004
Location: 11**
Posts: 3918
So kannst btw. auch über DNS ganz einfach load balancen...
Kontakt | Unser Forum | Über overclockers.at | Impressum | Datenschutz