felix.bro
Goto Top

Reverse Proxy Portfreigabe

Guten Tag, ich bin Felix und neu hier und habe (natürlich) eine frage zu meinem neu aufgesetzten Reverse Proxy-Server.

Zum Grundsetup:
Ich habe mit Proxmox mehrere Ubuntu-LXCs laufen, unter anderem auch den apache Reverse Proxy und die beiden Webserver, die ich ansteuere.
An meiner Fritz-Box sind die http und https Ports freigegeben. Erriechbar von aussen bin ich über einen DynDNS-Dienst. Hier lief bisher alles gut.
Auf meinem zweiten Webserver läuft nun Grafana welche sich lokal über den default-Port 3000 erreichen lässt und im Virtual Host auf 80 lauscht.

/etc/apache2/sites-enabled/grafana1.conf

<VirtualHost *:80>
 ServerName meinedomain.com
 ProxyPreserveHost On
 DocumentRoot /var/www/html
 ProxyPass /.well-known !
 ProxyPass / http://x.x.x.x:3000/
 ProxyPassReverse / http://x.x.x.x:3000/
RewriteEngine on
RewriteCond %{SERVER_NAME} =meindomain.com
RewriteRule ^ https://%{SERVER_NAME}%{REQUEST_URI} [END,NE,R=permanent]
</VirtualHost>

(Domain und IPs wurden zensiert)
Die Seite erreiche ich auch wunderbar von aussen.
Zusätzlich läuft auf dem Server noch InfluxDB welche den default-Port 8086 nutzt. Hier würde ich gerne mit einem Sensor Daten reinschreiben. Benutze ich die interne IP meines Netzwerks, gelingt das auch. Stelle ich ihn nun auf "meinedomain.com" um, bekomme ich ein "refused connection". Der Sensor, bzw. die Sensoren sollen später aber an unterschiedlichen Standorten stehen. Leider habe ich noch keinen Einblick in die LogFiles des Sensors, da ich Einstellungen nur über den bereitgestellten webserver des Sensors vornehmen kann.
Da warte ich noch auf eine Antwort der Veranwortlichen.

Um von außen auf die Datenbank zu kommen habe ich in der gleichen grafana1.conf ist noch ein Absatz für den Port 8086:

<VirtualHost *:8086>
 ServerName meinedomain.com        
 ProxyPreserveHost On
 ProxyPass / http://x.x.x.x:8086
 ProxyPassReverse / http://x.x.x.x:8086
</VirtualHost>


Ohne die Logs aus dem Sensor komme ich alleine nicht wirklich weiter. Daher wollte ich fragen ob meine Einträge überhaupt richtig sind, oder ich irgendwas falsch gemacht habe?


TLDR; ich bekomme mit einem Sensor ein "refused connection" für den port 8086.

Dem reverse Proxy Thema habe ich mich letztes Wochenende angenommen und bin daher noch nicht ganz Sattelfest, habt also bitte Rücksicht wenn ich 2x nachfrage.
(Sorry, sollte ich das Falsche Thema gewählt haben)

EDIT:
Domain und IPs wurden zensiert

Content-Key: 567998

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

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

Member: ichi1232
ichi1232 Apr 27, 2020 at 11:37:09 (UTC)
Goto Top
Dein virtueller Host lauscht auf 8086.

Ist der Port denn so in der Fritte auch freigegeben?

Entweder das oder du stellst den virtuellen Host auch auf 80 und lässt den R-Proxy dann die Weiterleitung auf 8086 machen.
Member: felix.bro
felix.bro Apr 27, 2020 updated at 11:51:12 (UTC)
Goto Top
Danke erstmal für die schnelle Anwort.
ja richtig. An der Fritzbox ist 8086/tcp auch freigegeben.

Also meinst du dein Eintrag so abändern:
<VirtualHost *:80>
 ServerName meinedomain.com        
 ProxyPreserveHost On
 ProxyPass / http://x.x.x.x:8086
 ProxyPassReverse / http://x.x.x.x:8086
</VirtualHost>

Wenn ich den <VirtualHost *:8086> auf 80 umstelle, muss ich das beim Sensor ja auch angeben, richtig? Wie Entscheidet der Proxy dann was eine Browseranfrage (also echte 80/443) und was ein Datenbank-Eintrag (eigentlich 8086) sein soll?
Member: ichi1232
ichi1232 Apr 27, 2020 updated at 12:23:05 (UTC)
Goto Top
Dem Sensor musst du erstmal gar nichts angeben.
Der hört weiter auf 8086.

Der Proxy kann anhand verschiedener Kriterien entscheiden, wohin er die Anfragen schickt.

Ich empfehle dir die offizielle Doku:
https://httpd.apache.org/docs/2.4/vhosts/examples.html

z.B. anhand dessen was du in deinem entfernten Browser versuchst aufzurufen:

http://grafana.example.com -> Proxy -> 192.168.x.100:3000 (Beispiel)

http://influxdb.example.com -> Proxy -> 192.168.x.101:8086 (Beispiel)


Vereinfacht: Der Host Header sagt dem Proxy, was er eigentlich sucht.

Deswegen ist es wichtig, dass die virtuellen Hosts den richtigen ServerName tragen.
Member: felix.bro
felix.bro Apr 27, 2020 at 12:51:45 (UTC)
Goto Top
Aktuell habe ich influx und grafana auf dem gleiche nserver laufen, daher auch die gleiche domain.
Ich werde es heute Abend mal mit einem neuen Server einer neuen domain probieren.

Danke schon einmal für deine Hilfe!
Member: felix.bro
felix.bro Apr 27, 2020 at 16:12:54 (UTC)
Goto Top
Ich habs geschafft, dass Daten in die DB geschrieben werden, bin mir nur nicht sicher ob es so korrekt ist:

Ich hatte bisher in der Firtz.box den Port 8086 für den R-Proxy freigegeben, dabei hatte ich keinen erfolg.
Jetzt habe ich den Port 8086 für den Server auf dem InfluxDB läuft freigegeben und es klappt.

Ist das so richtig? Meinem Verständnis nach sollte sich doch der r-proxy um die weiterleitung an den webserver kümmern, oder? solange ich nur einen Sensortypen habe und nur eine Datenbank befüttern möchte scheint es zu klappten, aber ist es so der korrekte weg?
Member: ichi1232
ichi1232 Apr 27, 2020 updated at 21:25:12 (UTC)
Goto Top
Jetzt regelt die Fritz!Box die "Weiterleitung". Das ist nichts anderes als eine reine Portweiterleitung.

Die Fritz!Box schaut sich den Zielport deiner Anfrage an und anhand der Portweiterleitung, welche du unter "Internet -> Freigaben" festgelegt hast und schickt die Pakete dann stumpf DIREKT an den Webserver weiter.

Das willst du aber anscheinend nicht. Es funktioniert zwar, jedoch ist es immer ratsam, Server hinter einen Proxy zu stellen, gerade wenn Datenbanken mit im Spiel sind.

Ein GANZ EINFACHES SETUP:

Szenario 1
untitled diagram

<VirtualHost *:80>
    ServerName webserver1.example.com
    ProxyPreserveHost On

    ProxyPass / http://192.168.x.124:8086/
    ProxyPassReverse / http://192.168.x.124:8086/
</VirtualHost>

<VirtualHost *:80>
    ServerName webserver2.example.com
    ProxyPreserveHost On

    ProxyPass / http://192.168.x.125:3000/
    ProxyPassReverse / http://192.168.x.125:3000/
</VirtualHost>



SZENARIO 2:

Du gibst Port 8086 ZUSÄTZLICH zu Port 80 frei - hier aber ebenfalls auf den PROXY und nicht auf den Webserver.

untitled diagram(1)

Listen 8086

<VirtualHost *:8086>
    ServerName bla.example.com
    ProxyPreserveHost On

    ProxyPass / http://192.168.x.124:8086/
    ProxyPassReverse / http://192.168.x.124:8086/
</VirtualHost>

<VirtualHost *:80>
    ServerName bla.example.com
    ProxyPreserveHost On

    ProxyPass / http://192.168.x.125:3000/
    ProxyPassReverse / http://192.168.x.125:3000/
</VirtualHost>


Noch 2 Bemerkungen:

Das ist ein GANZ einfaches Beispiel. Hier findet KEINE Transportverschlüsselung statt. Benutze das auf KEINEN Fall für sensible Daten.

Das alles sind nur Tipps. Die Umsetzung erfolgt durch dich alleine und du bist für die korrekte und sichere Umsetzung verantwortlich.

Vergiss

a2enmod proxy

und

a2enmod proxy_http

systemctl restart apache2

nicht.
Member: felix.bro
felix.bro Apr 28, 2020 at 07:09:31 (UTC)
Goto Top
Moin ichi,
danke, bis hierher hatte ich es auch so verstanden und so versucht.
Die direkte Portfreigabe des Servers möchte ich auch vermeiden.
Aauf dem Server wo die Daten hin sollen, der Port 8086 freigegeben ist:
:~# netstat -tulpen | grep -v '127.0.0.1'  | grep -v '::1:' 
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address           Foreign Address         State       User       Inode      PID/Program name
tcp        0      0 127.0.0.53:53           0.0.0.0:*               LISTEN      102        184007229  129/systemd-resolve
tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN      0          184008559  224/sshd
tcp6       0      0 :::8086                 :::*                    LISTEN      999        184013541  162/influxd
tcp6       0      0 :::22                   :::*                    LISTEN      0          184008570  224/sshd
tcp6       0      0 :::3000                 :::*                    LISTEN      109        184008899  163/grafana-server
udp        0      0 127.0.0.53:53           0.0.0.0:*                           102        184007228  129/systemd-resolve
udp6       0      0 fe80::98e7:58ff:fe8:546 :::*

Auf dem proxy allerdings nicht:
:~# netstat -tulpen | grep -v '127.0.0.1'  | grep -v '::1:' 
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address           Foreign Address         State       User       Inode      PID/Program name
tcp        0      0 127.0.0.53:53           0.0.0.0:*               LISTEN      106        181962682  91/systemd-resolved
tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN      0          183365425  1092/sshd: /usr/sbi
tcp6       0      0 :::80                   :::*                    LISTEN      0          185578753  3158/apache2
tcp6       0      0 :::22                   :::*                    LISTEN      0          183365436  1092/sshd: /usr/sbi
tcp6       0      0 :::443                  :::*                    LISTEN      0          185578757  3158/apache2
udp        0      0 127.0.0.53:53           0.0.0.0:* 

Ich habe an der Fritz.box wieder den Port 8086 am proxy freigegeben, und es klappt wieder nicht.
Wie bekomme ich denn eine Portfreigabe hin, ohne den entsprechenden Dienst zu installieren? Oder brauch ich das nicht?
Liegt es daran, dass ich influx und grafana auf einem Server laufen lasse?

Zu deinen anmerkungen:
die mods sind schon aktiviert und apache restart wird genutzt.

https: Ich habe gestern ein wenig mit subdomains experimentiert. mein DynDNS service unterstützt diese, auch mit certbot. Sensible Daten liefern die Sensoren nicht. ein paar Schalldruck und Temperaturdaten. Das ganz ist für ein Hobby, bzw. Straßenlärmmessung. Trotzdem sind alles angesteuerten Domains mit letsencrypt verschlüsselt.
Member: ichi1232
ichi1232 Apr 28, 2020 at 13:27:56 (UTC)
Goto Top
Denk an das -> 'Listen 8086' in der ersten Zeile des VirtualHost in der Proxy-Config.

Listen 8086     

<VirtualHost *:8086>
    ServerName bla.example.com
    ProxyPreserveHost On

    ProxyPass / http://192.168.x.124:8086/
    ProxyPassReverse / http://192.168.x.124:8086/
</VirtualHost>

<VirtualHost *:80>
    ServerName bla.example.com
    ProxyPreserveHost On

    ProxyPass / http://192.168.x.125:3000/
    ProxyPassReverse / http://192.168.x.125:3000/
</VirtualHost>