also lege ich z.B. auf der DS 2 virtuelle Hosts an wobei ich dann einen weiterleite an den Ubuntu-Server. Verstehe ich das richtig so?
ich glaube kaum, dass eine reine Weiterleitung hier helfen wird. Das würde nur gehen wenn die "Weiterleitung" eigentlich ein Proxy ist. Bei einer reinen Weiterleitung bekommt der Client einen Redirect Header und sendet seine Query dorthin. Sagen wir du hast die Domain beispiel.de und beispiel.com, dabei sollte beispiel.com auf den Ubuntu Server gehen. Der vhost von beispiel.com würde dann einen Redirect Header an den Client senden. Der Client würde dann den Request erneut stellen (mit dem Ziel, das im Redirect genannt wurde) und dabei wegen der Portweiterleitung wieder auf der DS landen, die wieder einen Redirect Header senden würde. imho kann das nur eine Endlosschleife geben ;-)
Der vhost auf der DS darf also keine Weiterleitung senden, sondern muss den Request des Clients via Proxy Request an den Ubuntuserver schicken.
Das kann man mit mod_rewrite Regeln und dem 'P' Flag machen, ABER es ist bei diesen rewrite Regeln exterm wichtig, dass man NIEMALS einen Pfad mit dem Hostnamen/IP zusammenfügt
Code:
#sehr gefährliches Beispiel für den Einsatz von mod_rewrite und Proxy Requests
RewriteRule ^(.*)$ http://meinInternerServer$1 [P]
obige Rewrite Regel würde das gesamte LAN von aussen zugänglich machen, indem man einen solchen Request generieren würde
Code:
GET :user@IP_AUS_DEINEM_LAN:WUNSCHPORT/pfad/irgendwas
Host: beispiel.com
mod_rewrite würde daraus eine solche URL generieren
Code:
http://meinInternerServer:user@IP_AUS_DEINEM_LAN:WUNSCHPORT/pfad/irgendwas
das Problem ist das '@' welches den Usernamen vom Hostnamen trennt. sprich alles vor dem '@' würde als Username angeschaut, der eigentliche Request würde also nicht mehr an meinInternerServer gehen, sondern an IP_AUS_DEINEM_LAN:WUNSCHPORT/pfad/irgendwas. Damit könnte man auf JEDE IP in deinem LAN und auf einen beliebigen Port zugreifen.
Um eine solche mod_rewrite Regel abzusichern sollte/muss man erst diese gefährlichen Requests abfangen und zwar indem man als allererstes in der htaccess Datei
Code:
RewriteCond %{REQUEST_URI} !^$
RewriteCond %{REQUEST_URI} !^/
RewriteRule .* - [R=400,L]
einfügt. Diese Regeln killen alle Requests bei denen der Request Pfad nicht leer ist und die nicht mit einem / beginnen. Ein Angreifer könnte zwar jetzt den bösen Request von oben generieren und einen / voranstellen, damit die Deny Regeln nicht greifen.
Code:
GET /:user@IP_AUS_DEINEM_LAN:WUNSCHPORT/pfad/irgendwas
Host: beispiel.com
Die RFC definieren aber, dass der Hostname in einer URL bei ersten Vorkommen u.A. eines Slashs aufhört und danach der Pfad beginnt
mod_rewrite würde also folgenden Request generieren
Code:
http://meinInternerServer/:user@IP_AUS_DEINEM_LAN:WUNSCHPORT/pfad/irgendwas
und das wäre "nur" ein ungültiger Pfad auf meinInternerServer.
Lange Rede kurzer Sinn: dein Vorhaben wird nur klappen wenn du entweder (wie von frogman bereits erwähnt) einen andern externen Port für den Ubuntuserver nimmst oder einen Proxy (standalone oder mod_rewrite) einsetzt. Eine reine Weiterleitung mittels eines vhosts auf der DS kann auch nur dann gehen, wenn der Ubuntuserver unter einem anderen externen Port erreichbar ist. Mit demselben externen Port wird eine Weiterleitung in einer Endlosschleife enden