networkuser
Goto Top

Apache Webserver im LAN via SSH reverse Proxy erreichbar - IP und vHost Konfiguration

Hallo liebe Community und einen schönen Sonntagmorgen face-smile ,

leider habe ich nach stundenlangem googeln keine Antwort gefunden und wende mich nun vertrauensvoll an euch. face-wink

Folgendes Szenario ist gegeben:


Skizze:

HomeVM mit Apache/WebDAV auf Port 443/TCP -----------------> Router mit NAT -------------------------> Strato vServer -------------------------------------------> WWW
----------------------- SSH Reverse Tunnel für Port 443 -------------> vServer mit erreichbarem Port 443/TCP ---> WWW (Client connect auf HomeVM)
<---------------------------------------------------- Durchgehend verschlüsselte SSL-Verbindung zwischen Client und HomeVM ----------------------------------------------->

Ich betreibe einen Apache Webserver auf einer Ubuntu VM im lokalen LAN bei mir zu Hause. Der Port 443 wird via SSH Reverse Proxy zu einem Strato vServer im Internet geleitet.
(Auf meiner Heim-VM: ssh -R 443:localhost:443 root@StratovServer)
Das funktioniert auch ohne Probleme.


Folgende Schwierigkeiten sind mir jedoch nun aufgefallen und ich habe keine Lösung gefunden:

1. Im Apache Log wird nur localhost angezeigt. Nicht jedoch die Remote Client IP.
-> Ich möchte gerne Zugriffskontrolle via fail2ban einrichten. Dies ist so jedoch nicht möglich. Gibt es eine Möglichkeit SSHd mitzuteilen, dass er die entsprechende Client IP mit schicken soll und Apache kann diese in's Log schreiben?.

2. Ein Apache Reverse Proxy kommt nicht in Frage, da ich damit nicht die Möglichkeit habe eine SSL Verbindung ohne Unterbrechung durchzureichen. Ich möchte sicherstellen, dass es zu keinem Zeitpunkt eine unverschlüsselte Verbindung zwischen dem Client und der HomeVM gibt. Die Verbindung soll zwingend durchgehend via SSL abgesichert werden. Zusätzlich möchte ich in Zukunft SSL-Cert-based authentifizieren, sodass dies ebenfalls zu Problemen führen würde.

Das Dilemma ist perfekt. - Ich hoffe mir kann hier jemand mit hilfreichen Tips zur Seite stehen. face-smile

Ich danke schon jetzt vielmals für Hilfe jeglicher Art! Falls ihr noch weitere Infos haben wollt oder ich etwas wichtiges vergessen habe. -> Immer raus damit. face-wink

Liebe Grüße

NetworkUser

Content-Key: 300801

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

Printed on: April 26, 2024 at 14:04 o'clock

Member: Lochkartenstanzer
Lochkartenstanzer Apr 03, 2016 at 10:32:26 (UTC)
Goto Top
Zitat von @NetworkUser:

Hallo liebe Community und einen schönen Sonntagmorgen face-smile ,

1. Im Apache Log wird nur localhost angezeigt. Nicht jedoch die Remote Client IP.
-> Ich möchte gerne Zugriffskontrolle via fail2ban einrichten. Dies ist so jedoch nicht möglich. Gibt es eine Möglichkeit SSHd mitzuteilen, dass er die entsprechende Client IP mit schicken soll und Apache kann diese in's Log schreiben?.

Nein. Denn die Verbindungen gehen ja vom apache aus gesehen von localhost aus. Du müßtest schon ein VPN einrichten und so dafür sorgen, daß durch korrektes Routing die korrekten IP-Adressen beim Apache ankommen.

  • VPN von Apache-rechner zu "smarthost" bei strato.
  • default route des apache-Servers in den tunnel.
  • routing/nat auf dem smarthost zu apacheserver.

Dann sollte alles korrekt beim Apache protokolliert werden.


Das Dilemma ist perfekt. - Ich hoffe mir kann hier jemand mit hilfreichen Tips zur Seite stehen. face-smile

s.o.

lks
Member: NetworkUser
NetworkUser Apr 04, 2016 updated at 11:27:55 (UTC)
Goto Top
Hallo,

vielen Dank für deine Antwort. Gestern hatte ich es leider nicht mehr geschafft zu antworten.

Dein Tipp doch ein VPN zu nehmen war Gold wert. Zwar ist die Konfiguration nun einmalig doch wesentlich aufwendiger. Aber nagut. - Ich denke wenn es einmal läuft.. dann ist die Wartungsarbeit die selbe. face-wink

Ich habe mich gestern noch dran gemacht und das VPN installiert. Die Verbindung steht. Ein Ping auf die Server VPN IP bzw anders herum auf die Client VPN IP funktionieren einwandfrei.

Jetzt gehts ums Routing... und da beginnt es ein wenig zu haken. ;) ... Folgendes:

Mit Hilfe dieser Anleitung habe ich das VPN eingerichtet: http://wiki.openvpn.eu/index.php/Konfiguration_eines_Internetgateways

Um den Traffic vom VPN-Client (mit ApacheServer) in's Internet mit der öffentlichen IP des Strato Servers zu versehen benötige ich folgenden Befehle aus der Anleitung:

Forwarding und NAT:

echo "1" > /proc/sys/net/ipv4/ip_forward  
Der zweite wichtige Schritt ist das Hinzufügen einer SNAT-Rule. Wenn euer Server eine statische IP-Adresse besitzt, verwendet folgendes Kommando:
iptables -t nat -A POSTROUTING -o venet0 -s 10.8.0.0/24 -j SNAT --to 1.1.1.1
Ersetzt dabei ethX durch eurer Netzwerkinterface und 1.1.1.1 mit eurer statischen öffentlichen IP-Adresse. -> Bei mir ist das Netzwerkinterface venet0

Und um die Anfrage des Besuchers an den VPN-Client weiterzuleiten benötige ich auf dem Server noch folgende DNAT Rule:

iptables -t nat -A PREROUTING -i venet0 -p tcp --dport 443 -j DNAT --to 10.8.0.6:443

Somit klappt aber noch keine Verbindung.. ich habe folgendes festgestellt:
- Der Server ist richtig konfiguriert
- Der VPN Client braucht als default Route das VPN via VPN Client Config "redirect-gateway def1"

Die Probleme:
1. Ich habe keinen Zugriff mehr auf den VPN Client, da dieser jegliche Antwort auf Anfragen über den VPN GW schickt.
2. Ich möchte die Ports beschränken können, welche zum Strato Server geleitet werden, damit nicht alle Dienste beim Strato Server ankommen. (Gibt es eine Möglichkeit dies umzusetzen? Ähnlich wie bei SSH, wo ich ganz genau bestimmen kann welcher Port getunnelt wird?)

Ersteres lässt sich theoretisch nach meinen Tests mit einer neuen Route (route add -net xx.....) realisieren. Aber ist das so "best practice"?

Ich freue mich auf Antworten und danke schon jetzt! face-smile

LG
NetworkUser