DSM 6 Reverse Proxy

sector

Benutzer
Mitglied seit
19. Nov 2013
Beiträge
166
Punkte für Reaktionen
0
Punkte
16
gibts möglichkeiten mit dem DSM reverse proxy Username und Passwort authentifizierung zu machen zu bestimmten einträgen?
Gefunden habe ich leider nichts. Ich möchte gerne den Zugriff zu einem Docker absichern
 

kannebecker

Benutzer
Mitglied seit
28. Mrz 2011
Beiträge
38
Punkte für Reaktionen
0
Punkte
6
Hallo,

ich hab da mal ne Frage :)

Ist Stand:
DS416 ist erreichbar per subdomain --> nas.domain.xxx (über dyndns )
auf der DS habe ich per Lets Encrypt ein Zertifikat hinzugefügt, geht alles.

Soll:
Jetzt würde ich gerne meinen Unifi Controller ebenfalls mit einem Zertifikat bestücken das dieser auch "sicher" zuerreichen ist.
subdomain.domain.xxx ist bereits eingerichtet und erreichbar

Was muss ich jetzt machen ?
Muss ich auf dem Unifi Controller auch ein Lets Encrypt Zertifikat aufspielen, oder geht das irgendwie über die DS ?

Gruß Kai
 

Fusion

Benutzer
Sehr erfahren
Mitglied seit
06. Apr 2013
Beiträge
14.135
Punkte für Reaktionen
898
Punkte
424
Und der Unifi ist per reverse proxy eingerichtet?
Dann einfach für sub.example.com ein neues Lets Encrypt holen und unter Sicherheit > Zeritifikate > Konfigurieren dem "Dienst" sub.example.com zuweisen.
 

kannebecker

Benutzer
Mitglied seit
28. Mrz 2011
Beiträge
38
Punkte für Reaktionen
0
Punkte
6
Danke,
jetzt muss ich nur noch meinem UnifiController beibringen das es über einen Reverse Proxy läuft :)
 
Zuletzt bearbeitet:

-[Stefan]-

Benutzer
Mitglied seit
31. Mrz 2017
Beiträge
17
Punkte für Reaktionen
0
Punkte
1
Hallo zusammen,

ich bin auf dieses Thema aufmerksam geworden und wollte es daher noch mal aufgreifen.
Ich nutze eine DS216+ II mit aktuellster DSM Version (6.2.3-25426 Update 2). Die DS ist extern per Hostname (via DynDNS Service) erreichbar.

Über verschiedene externe Ports, die in der FB freigegeben sind, kann ich den VPN Server (auf Port 443 extern), DS Note, DS File und DSM selbst (alle Port 8080 extern) soweit problemlos per SSL Verbindung (LE Zertifikat) erreichen.

Ist es möglich via Reverse Proxy diese Dienste/Anwendungen alle via Port 443 zu erreichen und intern entsprechend umzuleiten? Das wäre mir deutlich lieber, schon allein um weniger Portforwardings offen haben zu müssen. Folgende Anwendungen/Dienste werden genutzt:

DSM
VPN Server (nutze hiervon OpenVPN)
DS Note
DS File

Falls ja wäre ich für Tipps dankbar... bisher kam ich da nicht sonderlich weit.

Danke!
 

sector

Benutzer
Mitglied seit
19. Nov 2013
Beiträge
166
Punkte für Reaktionen
0
Punkte
16
Das geht nur wenn du Subdomains hast. Anderenfalls ist bei deiner Domain die 443 dann schon belegt
 

-[Stefan]-

Benutzer
Mitglied seit
31. Mrz 2017
Beiträge
17
Punkte für Reaktionen
0
Punkte
1
Bei meinem DynDNS Anbieter habe ich 5 Hosts frei, nicht so elegant wie Subdomains, aber wäre theoretisch auch darüber lösbar? Müsste natürlich dafür auch Zertifikate von LE besorgen.
Abseits davon, wie siehts mit dem Thema der Suffixe aus? Oder geht das auch nur bei klassischen Domains? Danke.
 

linuxdep

Benutzer
Mitglied seit
02. Jan 2009
Beiträge
584
Punkte für Reaktionen
11
Punkte
38
schau dir mal das sslh packet an, das macht so was, ist auch aktuell gerade gepatcht worden, hatte ich mal im Einsatz, bis es nicht mehr ging.
Der Vorteil ist, wenn du z.B. im Urlaub bist und dort nur 443 erlaubt ist (machen FB gerne so) dann kannst nur zu 80 oder 443 verbinden. Der sslh Dienst ermöglich es dir dann VPN und Co entsprechend Umzuleiten.
Wenn ich zeit finde, dann werde ich das auch mal wieder einrichten.
 

-[Stefan]-

Benutzer
Mitglied seit
31. Mrz 2017
Beiträge
17
Punkte für Reaktionen
0
Punkte
1
Hi,

mit sslh habe ich früher mal gearbeitet, da war es aber noch buggy und sorgte immer für 90% CPU last auf der DS. Also nicht nutzbar.

Mittlerweile gibt's eine deutlich neuere Version des Pakets, aber ich bekomme es nicht sinnvoll ans laufen. VPN und SSH routet es korrekt, DSM nicht. Habe mich schon stundenlang damit auseinander gesetzt und vieles gelesen, schlussendlich hat es aber nicht so geklappt, wie ich es bräuchte, obwohl es klappen müsste.

Auch wenn es für diesen Thread OT ist, hat jemand vielleicht sslh am laufen und könnte tipps geben, ggf. auch per PN?

Danke.
 

QBN

Benutzer
Mitglied seit
30. Nov 2020
Beiträge
4
Punkte für Reaktionen
0
Punkte
1
Hallo,

Ich kann leider kein Beispiel finden, welches mein Anliegen löst. Nach stundenlangem Nachlesen und Probieren, hab ich mich jetzt deshalb doch dazu durchgerungen, hier eine Frage zu platzieren.
Seit Jahren verwende ich an meinem Router verschiedene Portweiterleitungen um meine Syno Dienste / Apps von extern zu erreichen. HTTPS forciert und gültiges LE Zertifikat inklusive. Neulich bin ich über den Begriff Reverse Proxy gestolpert. Ich habe mir so vorgenommen, in Zukunft nur mit einer Portweiterleitung auszukommen und über Slash (zum Beispiel meinedomäne.com/dateien --> port x, meinedomäne.com/bilder --> port y) die unterschiedlichen Dienste anzusprechen. Auf Subdomänen möchte ich verzichten. Laut den Hilfestellungen in diesem Thread, sollte das ja möglich sein. Weiter will ich einen beliebigen gemeinsamen Port verwenden, zB. 8000 und mit HTTPS + Zertifikat von LE fahren.

Als ersten Testgang, habe ich anhand des GUI einen einfachen HTTPS Reverse Proxy mit HSTS eingerichtet, welcher Port 8000 auf 443 umleitet. Damit ich mich an etwas halten kann, habe ich mal das generierte "/etc/nginx/app.d/server.ReverseProxy.conf" angeschaut. Ebenfalls ist mir aufgefallen, dass in Sicherheit->Firewall unter ReverseProxy ein Eintrag generiert wurde, welchen ich als Ausnahme aktiviere. Mit dieser Konfiguration bin ich im Stande, von Extern die DS Photo App über Port 8000 zu verbinden. So weit, so gut.

Nun ist mir bewusst, dass ich das generierte File nicht einfach modifizieren soll, da es früher oder später überschrieben wird. Also kopiere ich mir die Vorlage und füge sie, wie ursprünglich von <DerLord> in #14 vorgeschlagen, unter "usr/local/etc/nginx/sites-enabled/" ein. Anschliessend ändere ich im Skript "location /" durch "location /bilder/" und lösche den ReverseProxy eintrag im GUI, wodurch die Originaldatei unter "/etc/.../app.d/" verschwindet. Ebenso verschwindet die Ausnahme in der Firewall, somit habe ich Quellport 8000 manuell als Ausnahme eingefügt. Anschliessend Test anhand von "nginx -T > /tmp/nginx.conf" durchgeführt und "nginx -s reload" ausgeführt.

Die grosse Enttäuschung, mit dieser Konfiguration bringe ich durch die DS Photo App keine Verbindung hin. Getestet mit: A) "meinedomäne.com/bilder:8000" und B) "meinedomäne.com:8000/bilder".

So zu meinen Fragen:
1) Sollte, wenn der Reverse Proxy eingerichtet ist, der URL A) oder B) heissen?
2) Sollte bei einer korrekten Konfiguration, der Eintrag nicht in der Firewall Liste erscheinen, so als hätte ich das GUI zum Erstellen der .conf verwendet?
3) Weshalb sollte die manuell erstellte .conf unter "usr/local/etc/nginx/sites-enabled/" eingefügt werden, wenn das GUI diese offenbar unter "/etc/nginx/app.d" erstellt? (Letztere Variante habe ich durch erstellen eines solchen Ordners "usr/local/etc/nginx/app.d" auch erfolglos getestet)
4) Sowohl "/usr/syno/etc/certificate/ReverseProxy/XYZ/fullchain.pem" als auch "/usr/syno/etc/certificate/ReverseProxy/YXZ/privkey.pem" existieren nur unter Verwendung des GUI. Ich habe den Pfad daher wie im angehängten .conf angepasst. Ist das korrekt?
5) Wozu ist der Pfad "/usr/syno/share/nginx" gedacht?

Vielen Dank im Voraus, für jeden der mich in die richtige Richtung weisen kann.

server {
listen 8000 ssl;
listen [::]:8000 ssl;

server_name meinedomäne.com;

ssl_certificate /usr/syno/etc/certificate/system/default/fullchain.pem;

ssl_certificate_key /usr/syno/etc/certificate/system/default/privkey.pem;

add_header Strict-Transport-Security "max-age=15768000; includeSubdomains; preload" always;

location /bilder/ {

proxy_connect_timeout 60;

proxy_read_timeout 60;

proxy_send_timeout 60;

proxy_intercept_errors off;

proxy_http_version 1.1;

proxy_set_header Host $http_host;

proxy_set_header X-Real-IP $remote_addr;

proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

proxy_set_header X-Forwarded-Proto $scheme;

proxy_pass https://localhost:443;


}

error_page 403 404 500 502 503 504 @error_page;

location @error_page {
root /usr/syno/share/nginx;
rewrite (.*) /error.html break;

}
}
 

QBN

Benutzer
Mitglied seit
30. Nov 2020
Beiträge
4
Punkte für Reaktionen
0
Punkte
1
@blurrrr Mein Wissen über Server etc. ist begrenzt. Ich wäre froh, wenn du mir erklären kannst, weshalb dein Hirn bei "meinedomäne.com/bilder:8000" überlastet :).

Aber erstmal, danke, deine Antwort hat insofern geholfen, dass ich besser wusste nach was zu suchen ist "synology unterverzeichnisse reverse proxy" und bestätigt, dass mein Ansatz stimmt. Einen Fehler habe ich bereits gefunden, in der Firewall muss der entsprechende Port nicht als Quell-Port sondern als Ziel-Port eingetragen werden.
Weitere hilfreiche Links für Leidensgenossen:
https://www.synology-forum.de/threa...er-fuer-vhost-und-reverse-proxy-sites.107848/https://primalcortex.wordpress.com/2018/05/07/synology-reverse-proxy-revisited-again/
Meine .conf funktioniert jetzt und leitet den Port weiter wenn "location / {". Sobald auf "location /bilder" angepasst, kann die Verbindung nicht aufgebaut werden.

Es kommt der Verdacht auf, dass ich keinen alternativen Port verwenden darf, sobald ich mit Unterverzeichnissen in der Domäne arbeiten will. Ist das richtig?
 

blurrrr

Benutzer
Sehr erfahren
Mitglied seit
23. Jan 2012
Beiträge
6.204
Punkte für Reaktionen
1.103
Punkte
248
Mein Wissen über Server etc. ist begrenzt.

Das hat man wohl gemerkt, was aber auch keine Schande ist - viel wichtiger: nur sprechenden (schreibenden) Menschen kann geholfen werden ?

Ich wäre froh, wenn du mir erklären kannst, weshalb dein Hirn bei "meinedomäne.com/bilder:8000" überlastet

Tja.... wo fang ich da an... würde mal sagen: Hinsetzen und Popcorn holen, könnte etwas dauern....:

Ganz am Anfang steht die "IP" eines Systems. Auf diesem System läuft ein Dienst (z.B. Webserver). Damit dieser Dienst jetzt irgendwie angesprochen werden kann, braucht es eine entsprechende Zugriffsmöglichkeit. Diese wird über den "Port" gegeben. Kurzum: Dieser Dienst "lauscht" auf Port XY (oder wie in Deinem Beispiel halt 8000), Damit wäre unser Konstrukt jetzt: "<host>:<port>" (bzw. alternativ formuliert: IP: Port, oder auch FQDN: Port).

Das wäre also nun unser Ziel... Host:Port, weil nur auf diesem Host und diesem Port der entsprechende Dienst horcht. So, dazu gibt es jetzt eine Default-Config für den sogenannten "vHost" (das ist die Schnittstelle zwischen Webserver und lokalem Ordner mit den Website-Dateien)... Das sieht dann ungefähr so aus:

Host: Port -> </lokaler/ordner>

Kurzum: Sobald Du jetzt "Host: Port" aufrufst (und das bleibt auch so in der Browserzeile stehen), wird Dir der Inhalt von "/lokaler/ordner" angezeigt. Angenommen, Du legst einen neuen Ordner innerhalb von /lokaler/ordner/ an... z.B. "testordner", wäre der aktuelle Pfad dann wie folgt:

/lokaler/ordner/testordner

Dürfte ja soweit klar sein. Wie spricht man diesen "testordner" jetzt aber über Host: Port an? Da wir im vHost gesagt haben, dass unsere "Basis" sowieso schon /lokaler/ordner/ ist bzw. wir genau den Inhalt über "Host: Port" angezeigt bekommen, müsste man da jetzt noch den Pfad erweitern:

Host:IP/testordner

Und genau deswegen kann es nur "so" funktionieren. Ganz zu Anfang hast Du IMMER grundsätzlich stehen, WIE das System angesprochen wird und das bedingt die IP/FQDN + Port. Anders sieht es aus, wenn man "bereits bekannte" Ports nutzt (z.B. 443 für https), da erkennt der Browser schon am Protokoll (https) welchen Port er zu nutzen hat (443).

https mit Standard-Port 443 :
https://Host/testordner

https mit geändertem Port 8000 :
https://Host:8000/testordner

Hoffe, dass das jetzt einigermaßen klar geworden ist, wenn nicht, oder sonst noch Fragen auftauchen, nur zu :)
 
  • Like
Reaktionen: QBN und Benares

QBN

Benutzer
Mitglied seit
30. Nov 2020
Beiträge
4
Punkte für Reaktionen
0
Punkte
1
Danke @blurrrr, das hat geholfen! Tatsächlich ist noch eine Frage aufgetaucht.
Ich habe mir jetzt im server block nginx sowohl error als auch access Logs erstellen lassen und folgendes festgestellt:
Wenn ich aus einem Browser heraus "meinedomäne.com:8000/bilder" aufrufe, dann ist $request = "/etc/nginx/html/bilder"
Dies könnte ich über "location /bilder{ ..." abfangen und die Anfragen über "rewrite" anpassen (bitte korrigiere mich falls ich da falsch liege ^^).
Jetzt aber, wenn ich in der DS-Photo App denselben URL "meinedomäne.com:8000/bilder" als Addresse verwende, stelle ich fest, dass es sehr egal ist, was hinter dem Port steht. Beim Reverse Proxy kommt immer $request = "/etc/nginx/html/photo" an. Bedeutet das, die App verwirft meinen Versuch den URL anzupassen und ich bin gezwungen eben doch Subdomänen zu erstellen?
 

blurrrr

Benutzer
Sehr erfahren
Mitglied seit
23. Jan 2012
Beiträge
6.204
Punkte für Reaktionen
1.103
Punkte
248
Verworfen wird da normalerweise nix, sondern (wenn vorher ein entsprechender Reload der Config erfolgt ist) es wird schon genau befolgt, was Du da eingetragen hast. Allerdings nutze ich die Photostation nicht und kann Dir diesbezüglich leider auch nix zu den intern Pfaden sagen (schon allein, weil mich das auch nie interessiert hat). Ich habe (leider, oder auch gott-sei-dank ??) nichts mit dieser ganzen "Umbiegerei" an der Mütze und ansonsten mit "spezieller" Webserver-Config ebenso wenig (sowohl Nginx als auch beim Indianer) und mit Webgedöns als solches eigentlich auch noch viel weniger.

Damit aber ggf. andere (die sicherlich wesentlich mehr in diesem Bereich wissen als ich) eventuell auch mal ein Statement abgeben können, wäre es wohl ganz sinnvoll, wohl Du einfach mal die entsprechende Config hier posten würdest :)
 

QBN

Benutzer
Mitglied seit
30. Nov 2020
Beiträge
4
Punkte für Reaktionen
0
Punkte
1
Da ich den URL über beide Wege, Browser und DS Photo App, abgefangen habe, bin ich ziemlich sicher, dass das Problem auf Client Seite liegt.
Die .conf Datei konnte ich separat verifizieren.

Falls sich also jemand mit den Mobile Apps auskennt, wäre guter Rat sehr willkommen. Ansonsten muss ich dieses Projekt leider abstreichen.
 


 

Kaffeautomat

Wenn du das Forum hilfreich findest oder uns unterstützen möchtest, dann gib uns doch einfach einen Kaffee aus.

Als Dankeschön schalten wir deinen Account werbefrei.

:coffee:

Hier gehts zum Kaffeeautomat