markuswo
Goto Top

Weiterleitung mit Apache über Linux-Gateway ohne Portangaben

Hallo Community,

ich stehe mal wieder vor einem kleinen Problem.

Folgende technische Situation ist vorhanden.

- DNS Eintrag für meine-domain.de auf meine statische IP vom Serverstandort

- Router --> externes Netz <-- Ubuntu 14.04 als Firewall (als DMZ Host im Router) --> dahinter dann im internen Netz eine Apache Webserver mit verschiedenen vhosts.

Ich möchte jetzt diese vhosts über das Internet erreichbar machen. Das einfachste wäre Portweiterleitung in der Firewall mit verschiedenen Ports zu nutzen, aber eigentlich möchte ich das vermeiden, da die Endnutzer, welche die Zugriffe benutzen... ich sag mal etwas betagt sind in der Bedienung des Internets & Computers

Fällt euch hierzu eine alternative ein dieses Problem zu lösen?

Gruß und Dank,
Markus

Content-ID: 305600

Url: https://administrator.de/contentid/305600

Ausgedruckt am: 22.11.2024 um 06:11 Uhr

maretz
maretz 28.05.2016 um 14:19:52 Uhr
Goto Top
Moin,

wenn du nur eine öffentliche IP hast (was ich mal vermute) könntest du natürlich nen forward-all machen / machen lassen, aber dann muss natürlich auch dein Interner Server für alles da sein... Ohne Portangabe kannst du natürlich nichts auf div. unterschiedliche Server leiten...
129413
129413 28.05.2016 aktualisiert um 14:24:57 Uhr
Goto Top
Häufig gestellte Frage: Lösung: Reverse Proxy mit Squid oder Nginx
Benötigt wird dann nur eine einzige Weiterleitung Port 80/443 auf den Proxy.
Die interne Proxy-Weiterleitung erfolgt dann anhand der Hostheader der Anfragen.

Gruß skybird
BirdyB
BirdyB 28.05.2016 um 18:04:24 Uhr
Goto Top
Hi,

sowas löst man am besten mit einem Reverse-Proxy...
z.B. Apache, nginx oder squid.

Beste Grüße!


Berthold
Lochkartenstanzer
Lösung Lochkartenstanzer 28.05.2016 aktualisiert um 18:29:11 Uhr
Goto Top
Moin,

da braucht man weder verschiedene Ports noch einen reverse Proxy . Die vhosts laufen jaalle innerhalb desselben apcahe. Von daher klabüsert der anhand der http-anfrage selbst auf, welchem vhost die Anfrage gilt.

lks
Sheogorath
Sheogorath 28.05.2016 um 20:12:02 Uhr
Goto Top
Moin,

Das einfachste wäre Portweiterleitung in der Firewall mit verschiedenen Ports zu nutzen, aber eigentlich möchte ich das vermeiden, da die Endnutzer, welche die Zugriffe benutzen...

Wie @Lochkartenstanzer schon richtig schrieb, macht dein vHost das schon. Einfach eine Portweiterleitung. Fertig.

Dein Webserver kümmert sich schon darum, dass die passende Seite ausgeliefert wird. Deine "Firewall" kümmert sich dann darum, dass die TCP-Sessions auch wieder da ankommen, wo sie hin sollen.

Alternativ kannst du natürlich einen Reverse-Proxy auf deiner Firewall nutzen, aber das verkompliziert dein Setup nur unnötig und führt zu unnötig viel Last auf dem Gerät.

Ein Virtual-Host wird innerhalb des HTTP Requests bzw. während des TLS-Handshakes bestimmt und ist somit unabhängig von deiner Firewall. Terminierst du die HTTP-Session auf der Firewall muss diese die Logik kennen um diese Anfragen zu händeln. Also Worker-Prozesse, die die Anfragen behandeln und weiterleiten. Das ist sehr aufwendig und kann für Angriffe auf deine Firewall genutzt werden. Will man also nicht. Bei einer Port Weiterleitung ist die Last auf deiner Firewall wesentlich geringer und der Angriff trifft "nur" deinen Webserver. Das bringt deinen Webserver vielleicht ins Wanken aber deine anderen Anwendungen bleiben aktiv. Außerdem kann man keine Sicherheitslücken in der Webserver-Anwendung nutzen um deine Firewall zu kompromittieren.

Du hattest also eigentlich schon die Lösung ;)

Gruß
Chris
markuswo
markuswo 30.05.2016 um 20:37:04 Uhr
Goto Top
Danke schon mal für die Antworten, ich schau mir das mit meinen vHosts am Wochenende nochmal genauer an.
Also im Klartext, Portweiterleitung von HTTP und HTTPS auf den Apache Webserver in der Firewall. Und je nach Domain weiß er dann welchen vHost er nimmt?

Also wenn ich server1.mein-server.de aufrufe erkennt das der Apache durch die Firewall und wenn ich server2.mein-server.de aufrufe das auch? Obwohl in der DNS config für mein-server.de nur die öffentliche IP steht?

... irgendwie klingt das zu einfach. Dann hab ich wahrscheinlich noch irgendwo nen Fehler.
Lochkartenstanzer
Lösung Lochkartenstanzer 30.05.2016 um 20:54:20 Uhr
Goto Top
Zitat von @markuswo:

Also wenn ich server1.mein-server.de aufrufe erkennt das der Apache durch die Firewall und wenn ich server2.mein-server.de aufrufe das auch? Obwohl in der DNS config für mein-server.de nur die öffentliche IP steht?

Du mußt natürlich noch aliase für server1.mein-server.de und server2.mein-server.de einrichten, die auf mein-server.de zeigen (ode A-records mit derselben IP-Adresse).

... irgendwie klingt das zu einfach. Dann hab ich wahrscheinlich noch irgendwo nen Fehler.

Das sist so einfach:

Die Adresse severx.mein-server.de wird auf die IP-Adresse aufgelöst und dann einfach an diese ein http-request geschickt, in dem drinsteht, daß Du etwas vom Server "severx.mein-server.de" willst.

Der Appache schaut dann in seiner Config nach, ob er für serverx einen vhost hat und wenn ja, liefert er diese Seiten aus. Ansonsten liefert er das aus, was er als default eingestellt hat oder er gibt dier eine 404er.

lks
markuswo
markuswo 31.05.2016 aktualisiert um 12:21:28 Uhr
Goto Top
Also ich habe jetzt folgendes eingerichtet:

Zwei A-Recors beim DNS:
server1.mein-server.de
server2.mein-server.de

Portweiterleitung für 80 und 443 (tcp und udp) in der Firewall -> klappt, ich lande auf meinem Apache.

unter /etc/apache2/sites-enabled zwei .config Dateien für die vHosts. (Definiert in sites-available und mit a2ensite aktiviert)

www.server1.mein-server.de.conf (owncloud)
www.server2.mein-server.de.conf (normale Webseite)

in der /etc/hosts sind folgende Einträge

127.0.0.1 localhost
127.0.1.1 hostname
10.10.1.8 www.server1.mein-server.de
10.10.1.8 www.server2.mein-server.de


Ich erhalte jedes Mal eine Antwort von dem server1 wenn ich die Internetseiten extern Aufrufe. server2 klappt nur wenn ich www.server1.mein-server.de/PFAD-ZUM-UNTERORDNER eintippe.

Die DocumentRoot sehen so aus in den config-Dateien.

(server1) DocumentRoot /var/www
(server2) DocumentRoot /var/www/server2

Kann es ein Problem sein das der Hostname des Servers nicht dem Domainnamen "mein-server.de" entspricht? Oder hat das damit nichts zu tun?
129413
Lösung 129413 31.05.2016 aktualisiert um 13:03:04 Uhr
Goto Top
www.server1.mein-server.de ----> ist nicht gleich -----> server1.mein-server.de face-wink

https://httpd.apache.org/docs/current/vhosts/examples.html

Die DocumentRoot sehen so aus in den config-Dateien.
Und die ServerName Direktive ?? Die ist ja das gerade das essentielle bei einer vHost Config.

Und warum die Hosts bearbeiten ??? Unnötig ...

Der Server entscheidet anhand des Hostheaders an welchen vHost die Anfrage weitergeleitet wird, d.h. das was der User in die Adresszeile eingibt ... einfach mal in die HTTP-Header schauen, dann verstehst du auch was wir meinen.

screenshot

Gruß skybird
markuswo
markuswo 01.06.2016 aktualisiert um 14:19:15 Uhr
Goto Top
www.server1.mein-server.de ----> ist nicht gleich -----> server1.mein-server.de

Naja, beim Anbiete wo der DNS Eintrag getätigt wird (strato) leg ich ja ne Subdomain an und weise dieser über den A-Record meine IP zu, da habe ich ja kein "www" davor.

Hier die kompletten .conf
<IfModule mod_ssl.c>
        <VirtualHost   *:443>
                ServerAdmin webmaster@localhost
                <IfModule mod_headers.c>
                ServerName www.server1.mein-server.de
                Header always set Strict-Transport-Security "max-age=15768000; includeSubDomains; preload"  
                </IfModule>
                DocumentRoot /var/www
                ErrorLog ${APACHE_LOG_DIR}/error.log
                CustomLog ${APACHE_LOG_DIR}/access.log combined
                SSLEngine on
                SSLCertificateFile /etc/apache2/ssl/apache.crt
                SSLCertificateKeyFile /etc/apache2/ssl/apache.key
                <FilesMatch "\.(cgi|shtml|phtml|php)$">  
                                SSLOptions +StdEnvVars
                </FilesMatch>
                <Directory /usr/lib/cgi-bin>
                                SSLOptions +StdEnvVars
                </Directory>
                BrowserMatch "MSIE [2-6]" \  
                                nokeepalive ssl-unclean-shutdown \
                                downgrade-1.0 force-response-1.0
                BrowserMatch "MSIE [17-9]" ssl-unclean-shutdown  
        </VirtualHost>
</IfModule>
<IfModule mod_ssl.c>
        <VirtualHost *:443>
                ServerAdmin webmaster@localhost
                <IfModule mod_headers.c>
                ServerName www.server2.mein-server.de
                Header always set Strict-Transport-Security "max-age=15768000; includeSubDomains; preload"  
                </IfModule>
                DocumentRoot /var/www/wiki/
                ErrorLog ${APACHE_LOG_DIR}/error.log
                CustomLog ${APACHE_LOG_DIR}/access.log combined
                SSLEngine on
                SSLCertificateFile /etc/apache2/ssl/apache.crt
                SSLCertificateKeyFile /etc/apache2/ssl/apache.key
                <FilesMatch "\.(cgi|shtml|phtml|php)$">  
                                SSLOptions +StdEnvVars
                </FilesMatch>
                <Directory /usr/lib/cgi-bin>
                                SSLOptions +StdEnvVars
                </Directory>
                BrowserMatch "MSIE [2-6]" \  
                                nokeepalive ssl-unclean-shutdown \
                                downgrade-1.0 force-response-1.0
                BrowserMatch "MSIE [17-9]" ssl-unclean-shutdown  
        </VirtualHost>
</IfModule>
129413
Lösung 129413 01.06.2016 aktualisiert um 14:33:01 Uhr
Goto Top
www ist auch eine Subdomain/CNAME/A-Record face-smile und wenn du das also benutzt muss dein DNS mit dem www auch entsprechend auf das richtige Ziel zeigen. In der Subdomain müsste man dann quasi noch ein Alias bzw. C-Name 'www' anlegen.
markuswo
markuswo 01.06.2016 um 14:47:15 Uhr
Goto Top
Das wars!

Ich hab bei Strato jetzt einfach noch Subdomains "mit www" angelegt und es klappt wunderbar.

Doofe Frage... ich kann doch einfach im Apache über ServerAlias das selbe erreichen, oder? :D
129413
129413 01.06.2016 um 14:52:03 Uhr
Goto Top
Solange alles auf die richtige IP zeigt ...
https://httpd.apache.org/docs/2.2/de/mod/core.html#servername