Subdomain für Websites - Nextcloud Security

Status
Für weitere Antworten geschlossen.

TheACBH

Benutzer
Mitglied seit
24. Jun 2019
Beiträge
5
Punkte für Reaktionen
0
Punkte
0
Setup:
- DS716+ mit DSM 6.2.2-24922
- Nextcloud 16.0.2 über PHP 7.2 und Apache 2.4
- Hauptdomain ("meinedomain.de") mit externer Weiterleitung auf die DDNS Subdomain ("www.meinedomain.de").
- DDNS Subdomain in Router 1 (x.x.1.x) konfiguriert; Portweiterleitungen von Router 1 auf Router 2 (x.x.2.x) und von Router 2 zur Diskstation. Statische Route von Router 1 auf Router 2.
- Let's Encrypt Zertifikat für "meinedomain.de"
- Nextcloud Data Ordner außerhalb vom Webserver
- Individuelle Ports für alle Dienste (soweit möglich)

Vorgeschichte:
Nachdem mich der Funktionsumfang von den Synology-Programmen zunehmend eingeschränkt hat, habe ich mich dazu entschieden Nextcloud auf dem Webserver zu hosten. Funktioniert alles auch soweit und ich hab sie schon grundlegend eingerichtet.
Momentan mache ich mich an die Security Guidelines https://docs.nextcloud.com/server/16/admin_manual/installation/harden_server.html .

Hier ist meine Fragestellung verankert:
Nextcloud schreibt in seiner Dokumentation: "Administrators are encouraged to install Nextcloud on a dedicated domain such as cloud.domain.tld instead of domain.tld to gain all the benefits offered by the Same-Origin-Policy."
Sie empfehlen also eine Subdomain, damit der Host und damit die Herkunft anders ist. Bis jetzt war Nextcloud eben unter "meinedomain.de/nextcloud" erreichbar und in Zukunft soll Sie nur noch über "nextcloud.meinedomain.de" erreichbar sein. Klingt erstmal logisch. Nach Stunden des Suchens und der Konfiguration hab ich es aber immer noch nicht hinbekommen. Ich hab mich durch einen Informationsdschungel von vhosts, subdomains, cname, etc.pp. durchgeschlagen und einfach keine Lösung gefunden.

Momentan habe ich folgendes im Kopf: Eine Subdomain erstellen (z.B. "nextcloud.meinedomain.de"). Danach soll ein CNAME Eintrag bei meiner Domainverwaltung (STRATO) eingerichtet werden, der in etwa so aussieht:
"nextcloud.meinedomain.de CNAME www.meinedomain.de.". Als nächstes noch ein vhost der namensbasiert von "nextcloud.meinedomain.de" auf /web/nextcloud weiterleitet mit Custom Port.

Erfüllt dieses Setup die Same-Origin-Policy und funktioniert es? Im Grunde ist ein CNAME doch einfach nur eine Weiterleitung auf die ursprüngliche Domain und deshalb verstehe ich nicht, was der Zugewinn an Sicherheit sein soll. Im Grunde bleibt ja immer noch die Domain "www.meinedomain.de" bestehen, die auch für alle anderen Dienste, etc. benutzt wird, es wird halt nur von der Subdomain darauf weitergeleitet. Oder bleibt sozusagen im Browser, also für den Client-PC "nextcloud.meinedomain.de" als Alias bestehen, der Client kennt die DDNS-Domain "www.meinedomain.de" gar nicht und dadurch ist jeder Zugriff auf etwas, das nicht unter diese Nextcloud-Subdomain fällt, verwehrt?

Andersherum gedacht: Wie bekomme ich es als nächsten Schritt dann überhaupt hin, dass Nextcloud, bzw. mein gesamter Webserver unter "www.meinedomain.de/nextcloud" nicht mehr erreichbar ist, also dass wirklich nur noch mit der Eingabe von der Adresse "nextcloud.x.x" auf die Website zugegriffen werden kann? Ich kann den vhost auf einen Custom HTTPS Port einstellen und den Port 443 nicht weiterleiten. Das wäre meine Idee den Webserver bis auf diese Ausnahme zu blockieren.

Wie ihr seht, viel Verwirrung um so einen kleinen Satz. Bevor ich irgendwas mit CNAMEs einstelle, will ich dass mir irgendwie bestätigt wird, dass ich so zum gewünschten Ergebnis komme, bzw. dass mir (als absoluter Neuling) verständlich erklärt werden kann wie ich es hinbekomme, dass Nextcloud eine eigene Subdomain und damit Same-Origin-Protection für die Website herrscht und mein Webserver ansonsten auch nicht von außen erreichbar ist, es also nur den einen Weg gibt.
Ich habe verschiedene Seiten angezapft, vom Anfänger-Tutorial bis zu Foreneinträgen wo ich nur jeden zweiten Satz verstehe und die meistens nichts mit meinem konkreten Fall zu tun haben. Sich daraus ne Lösung zusammenzubasteln ist sehr schwer für mich.
Danke schonmal für eure Hilfe :eek: Dieses Forum hat mich schon erfolgreich durch so viele Probleme geleitet. :cool:
 

Lux007

Benutzer
Mitglied seit
08. Aug 2016
Beiträge
116
Punkte für Reaktionen
2
Punkte
18
Hallo!

Andersherum gedacht: Wie bekomme ich es als nächsten Schritt dann überhaupt hin, dass Nextcloud, bzw. mein gesamter Webserver unter "www.meinedomain.de/nextcloud" nicht mehr erreichbar ist, also dass wirklich nur noch mit der Eingabe von der Adresse "nextcloud.x.x" auf die Website zugegriffen werden kann? Ich kann den vhost auf einen Custom HTTPS Port einstellen und den Port 443 nicht weiterleiten. Das wäre meine Idee den Webserver bis auf diese Ausnahme zu blockieren.

Die Diskstation hat allgemein das Problem, dass sich der Hauptpfad des Webservices fest auf /volumeX/web befindet. Daher der Tipp für die Anlage von vHosts eine neuen gemeinsamen Ordner (z.B. /volumeX/vhosts) anlegen und der Systemgruppe und dem Systemnutzer HTTP Zugriff zu geben. Da dann den Ordner nextcloud für deine Subdomain nextcloud.meinedomain.de anlegen. Für die PHP-Nutzung sollte ein eigenes Profil pro vHost angelegt und der open_basedir-Pfad angepasst werden!
Damit kann der Webserver der Diskstation erreichbar bleiben - aber die Zugriffe auf andere vHosts-Ordner sind nicht mehr möglich.

Die Änderung auf einen Custom HTTPS-Port für die Subdomain sorgt auf Dauer für Probleme mit der Zertifikatserneuerung z.B. bei Letsencrypt. Die Prüfung dort läuft (soweit mir bekannt) nur wenn die Port 80/443 von Extern bis auf die Diskstation durchgereicht werden.

Wie ihr seht, viel Verwirrung um so einen kleinen Satz. Bevor ich irgendwas mit CNAMEs einstelle, will ich dass mir irgendwie bestätigt wird, dass ich so zum gewünschten Ergebnis komme, bzw. dass mir (als absoluter Neuling) verständlich erklärt werden kann wie ich es hinbekomme, dass Nextcloud eine eigene Subdomain und damit Same-Origin-Protection für die Website herrscht und mein Webserver ansonsten auch nicht von außen erreichbar ist, es also nur den einen Weg gibt.

Durch die Subdomain alleine sollte der Schutz bereits gegeben sein. Mit der o.g. Lösung und der Einstellung des open_basedir-Pfades in PHP für jede Webanwendung sollte auch bei einer fehlerhaften Webanwendung nicht auf Ordner anderer vHosts zugegriffen werden können.

Gruß
Lux007
 

TheACBH

Benutzer
Mitglied seit
24. Jun 2019
Beiträge
5
Punkte für Reaktionen
0
Punkte
0
Die Diskstation hat allgemein das Problem, dass sich der Hauptpfad des Webservices fest auf /volumeX/web befindet. Daher der Tipp für die Anlage von vHosts eine neuen gemeinsamen Ordner (z.B. /volumeX/vhosts) anlegen und der Systemgruppe und dem Systemnutzer HTTP Zugriff zu geben. Da dann den Ordner nextcloud für deine Subdomain nextcloud.meinedomain.de anlegen. Für die PHP-Nutzung sollte ein eigenes Profil pro vHost angelegt und der open_basedir-Pfad angepasst werden!
Damit kann der Webserver der Diskstation erreichbar bleiben - aber die Zugriffe auf andere vHosts-Ordner sind nicht mehr möglich.
Okay, ich hab mich ein bisschen in open_basedir eingelesen, das sollte ich wohl hinbekommen ;)
Was meinst du mit dem Profil? Die grundlegende Überlegung über die Einrichtung der Subdomain (Subdomain, CNAME, vhost) ist richtig, oder?


Die Änderung auf einen Custom HTTPS-Port für die Subdomain sorgt auf Dauer für Probleme mit der Zertifikatserneuerung z.B. bei Letsencrypt. Die Prüfung dort läuft (soweit mir bekannt) nur wenn die Port 80/443 von Extern bis auf die Diskstation durchgereicht werden.
Das hab ich mir auch schon so gedacht. Hatte am Anfang natürlich alle Ports geschlossen und dann gemerkt, dass 80/443 für die Zertifikatsprüfung notwendig ist. Im laufenden Betrieb funktioniert es aber ohne und da ich sowieso das Zertifikat manuell erneuern muss, öffne ich für die 5 Minuten halt die 2 Ports am Router 1.

Danke für deine aufklärende Antwort :)
 

Lux007

Benutzer
Mitglied seit
08. Aug 2016
Beiträge
116
Punkte für Reaktionen
2
Punkte
18
Hallo!

Okay, ich hab mich ein bisschen in open_basedir eingelesen, das sollte ich wohl hinbekommen ;)
Was meinst du mit dem Profil?

In der Web Station unter PHP-Einstellungen kannst Du mehrere Profile anlegen (neben den/dem Default-Profil). Hier habe ich z.B. ein neues Profil angelegt mit "nextcloud" und die passenden Einstellung (insbesondere den openbase_dir-Pfad, aber auch die Module usw.) eingestellt.

Im Bereich Virtualer Host kannst Du dann dieses PHP-Profil in der Auswahl nach PHP: zuordnen.
Damit gelten die PHP-Einstellungen aus dem PHP-Profil (insbesondere die openbase_dir-Pfade) nur für diesen virtuellen Host.

Gruß
Lux007
 
Zuletzt bearbeitet:

TheACBH

Benutzer
Mitglied seit
24. Jun 2019
Beiträge
5
Punkte für Reaktionen
0
Punkte
0
Okay, alles konfiguriert und es funktioniert auch. Die einzige Fehlermeldung die ich (wieder) bekomme ist diese:
Dein Web-Server ist nicht richtig eingerichtet um "/.well-known/caldav" aufzulösen. Weitere Informationen findest Du in der Dokumentation.
Dein Web-Server ist nicht richtig eingerichtet um "/.well-known/carddav" aufzulösen. Weitere Informationen findest Du in der Dokumentation.


Natürlich finde ich wie immer keine Dokumentation für die Anwendung auf der Synology mit einem vhost. Es gibt ein allgemeines Tutorial von Nextcloud, das bis jetzt auch funktioniert hat: https://docs.nextcloud.com/server/1...eneral_troubleshooting.html#service-discovery
Ich hatte das vor der Einstellung des vhost und Subdomain unter der "meinedomain.de/nextcloud" Konfiguration mit dem rewrite Befehl gelöst. Redirect hat dort bei mir nicht funktioniert.

1. Möglichkeit: rewrite
<IfModule mod_rewrite.c>
RewriteEngine on
RewriteRule ^\.well-known/host-meta /nextcloud/public.php?service=host-meta [QSA,L]
RewriteRule ^\.well-known/host-meta\.json /nextcloud/public.php?service=host-meta-json [QSA,L]
RewriteRule ^\.well-known/webfinger /nextcloud/public.php?service=webfinger [QSA,L]
RewriteRule ^\.well-known/carddav /nextcloud/remote.php/dav/ [R=301,L]
RewriteRule ^\.well-known/caldav /nextcloud/remote.php/dav/ [R=301,L]
</IfModule>

Hab ich probiert in folgenden Dateien:
/web/.htaccess
/vhosts/.htaccess
/vhosts/nextcloud/.htaccess

mit diesen verschiedenen Zielpfaden im rewrite Befehl:
/remote.php/dav/
/nextcloud/remote.php/dav/
/volumeX/vhosts/nextcloud/remote.php/dav/
--> keine Änderung

Option 2: Redirect 301
Redirect 301 /.well-known/caldav https://nextcloud.meinedomain.de:PORT/nextcloud/remote.php/dav
Redirect 301 /.well-known/carddav https://nextcloud.meinedomain.de:PORT/nextcloud/remote.php/dav


Hab ich probiert in folgenden Dateien:

/usr/local/etc/apache24/sites-enabled/httpd-vhost.conf
/usr/local/etc/apache24/sites-enabled/webstation-default.conf
/usr/local/etc/apache24/conf/httpd24.conf

mit diesen verschiedenen Zielpfaden im redirect Befehl:
https://nextcloud.meinedomain.de:PORT/nextcloud/remote.php/dav
https://nextcloud.meinedomain.de:PORT/remote.php/dav
/nextcloud/remote.php/dav
/remote.php/dav


Mir fällt jetzt nichts mehr ein zum ausprobieren. Bei manchen funktioniert dies, bei manchen das, in vielen Forenbeiträgen wird nicht spezifiziert wie der Server gehosted wird. Angeblich soll es eine nextcloud.conf geben, die ich nicht gefunden habe, vermutlich weil ich einen vhost benutze ist das die httpd-vhost.conf. Manche machen das in der ssl.conf, die ich aber auch nicht habe.

Theoretisch ist es doch so: Wenn eine CalDAV Anfrage an "nextcloud.meinedomain.de" geleitet wird, dann landet sie im Ordner /volumeX/vhosts/nextcloud. So ist das im vhost spezifiziert. Dementsprechend müsste es ja in der Theorie reichen, in die Datei .htaccess von /volumeX/vhosts/nextcloud oben festgehaltenen rewrite hinzuzufügen, damit sie ordentlich weitergeleitet wird. Funktionieren tut das leider nicht.

Tut mir leid, dass ich immer mit neuen Fragen ankomme, aber für mich ist das grad so ein bisschen "im-dunkeln-stochern". Das ist der erste Webserver den ich hoste. Immerhin recherchiere und probiere ich erst mal 3h bevor ich dann hier wirklich was nachfrage.
Wahrscheinlich hast du eher einen Plan als ich, wie die notwendigen redirects bzw. rewrites bei Verwendung eines vhosts zu benutzen sind. Ansonsten mach ich das morgen nochmal wie beim Zahlenschloss und probier jede Kombinationsmöglichkeit von a-z durch.

LG und danke für die Hilfe.
 

Lux007

Benutzer
Mitglied seit
08. Aug 2016
Beiträge
116
Punkte für Reaktionen
2
Punkte
18
Hallo!

Bei mir mit vHost sieht der mod_rewrite-Block in der .htaccess im nextcloud-Verzeichnis so aus:

<IfModule mod_rewrite.c>
RewriteEngine on
RewriteCond %{HTTP_USER_AGENT} DavClnt
RewriteRule ^$ /remote.php/webdav/ [L,R=302]
RewriteRule .* - [env=HTTP_AUTHORIZATION:%{HTTP:Authorization}]
RewriteRule ^\.well-known/host-meta /public.php?service=host-meta [QSA,L]
RewriteRule ^\.well-known/host-meta\.json /public.php?service=host-meta-json [QSA,L]
RewriteRule ^\.well-known/webfinger /public.php?service=webfinger [QSA,L]
RewriteRule ^\.well-known/carddav /remote.php/dav/ [R=301,L]
RewriteRule ^\.well-known/caldav /remote.php/dav/ [R=301,L]
RewriteRule ^remote/(.*) remote.php [QSA,L]
RewriteRule ^(?:build|tests|config|lib|3rdparty|templates)/.* - [R=404,L]
RewriteCond %{REQUEST_URI} !^/\.well-known/(acme-challenge|pki-validation)/.*
RewriteRule ^(?:\.|autotest|occ|issue|indie|db_|console).* - [R=404,L]
</IfModule>

Damit habe ich keine Fehlermeldungen. Hast Du für den vHost auch Apache 2.4 eingestellt?

Gruß
Lux007
 
Status
Für weitere Antworten geschlossen.
 

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