[DIY-Projekt] Traefik2 (Google-OAuth/TLS) feat. Nextcloud und Guacamole (und mehr)

Also Nextcloud ging eigentlich ganz einfach: Ich hab in meiner MariaDB eine neue Datenbank, Benutzer mit eigenem Passwort angelegt und dann den Nextcloud Container so gestartet:

Code:
  # Nextcloud
  nextcloud:
    container_name: nextcloud
    image: nextcloud:latest
    restart: unless-stopped
    networks:
      - t2_proxy
    security_opt:
      - no-new-privileges:true
#    ports:
#      - 8080:80
    volumes:
      - $DOCKERDIR/nextcloud/data:/var/www/html
    depends_on:
      - mariadb
    links:
      - mariadb:db
    environment:
      - PUID=$PUID
      - PGID=$PGID
      - TZ=$TZ
    labels:
      - "traefik.enable=true"
      ## HTTP Routers
      - "traefik.http.routers.nextcloud.entrypoints=https"
      - "traefik.http.routers.nextcloud.rule=Host(`nextcloud.$DOMAINNAME`)"
      - "traefik.http.routers.nextcloud.tls=true"
      ## Middlewares
      - "traefik.http.routers.nextcloud.middlewares=chain-oauth@file" # Google OAuth 2.0
      ## HTTP Services
      - "traefik.http.routers.nextcloud.service=nextcloud"
      - "traefik.http.services.nextcloud.loadbalancer.server.port=80"

Im Netcloud Setup hab ich dann MySQL als Datenbank gewählt, Host ist dann "db", User, Passwort und Datenbank entsprechend was ich in MariaDB angelegt habe.

Und schon konnte ich via nextcloud.domain.com auf den Server zugreifen :)

Bzgl fail2Ban: das hab ich nicht laufen. Ich hab nur den 80 und den 443 offen von außen. Dazu noch einen VPN Port für Wireguard. Ich mach also das ganze sensible Zeugs über VPN.
 
  • Gefällt mir
Reaktionen: mae1cum77
LieberNetterFlo schrieb:
Und schon konnte ich via nextcloud.domain.com auf den Server zugreifen
Alles klar, das Tutorial macht das etwas anders.

Nichtsdestotrotz habe ich die alte Version entfernt und umgestellt, funktionierte recht gut.

Läuft. Danke nochmal für den Test!
 
also bei mir geht WebDAV ... hast du auch genug nach einer Lösung gesucht oder willst du meine haben? :D
Ergänzung ()

Hier die neue compose

Code:
  # Nextcloud
  nextcloud:
    container_name: nextcloud
    image: nextcloud:latest
    restart: unless-stopped
    networks:
      - t2_proxy
    security_opt:
      - no-new-privileges:true
#    ports:
#      - 8080:80
    volumes:
      - $DOCKERDIR/nextcloud/data:/var/www/html
    depends_on:
      - mariadb
    links:
      - mariadb:db
    environment:
      - PUID=$PUID
      - PGID=$PGID
      - TZ=$TZ
    labels:
      - "traefik.enable=true"
      ## HTTP Routers
      - "traefik.http.routers.nextcloud.entrypoints=https"
      - "traefik.http.routers.nextcloud.rule=Host(`nextcloud.$DOMAINNAME`)"
      - "traefik.http.routers.nextcloud.tls=true"
      ## Middlewares
      - "traefik.http.routers.nextcloud.middlewares=nextcloud-redirectregex1,nextcloud-redirectregex2,chain-no-auth@file" # No Auth
      - "traefik.http.middlewares.nextcloud-redirectregex1.redirectregex.permanent=true"
      - "traefik.http.middlewares.nextcloud-redirectregex1.redirectregex.regex=https?://([^/]*)/.well-known/(card|cal)dav"
      - "traefik.http.middlewares.nextcloud-redirectregex1.redirectregex.replacement=https://$${1}/remote.php/dav/"
      - "traefik.http.middlewares.nextcloud-redirectregex2.redirectregex.permanent=true"
      - "traefik.http.middlewares.nextcloud-redirectregex2.redirectregex.regex=https?://([^/]*)(/.well-known[^#]*)"
      - "traefik.http.middlewares.nextcloud-redirectregex2.redirectregex.replacement=https://$${1}/index.php$${2}"
      ## HTTP Services
      - "traefik.http.routers.nextcloud.service=nextcloud"
      - "traefik.http.services.nextcloud.loadbalancer.server.port=80"

Wie du vielleicht bemerkst: du darfst natürlich kein OAuth nutzen, das können die ganzen WebDAV Clients nicht! Damit kommt quasi nie eine Verbindung zustande. Und dann hab ich in der config.php von Nextcloud noch folgendes ergänzt:

Code:
  'trusted_proxies' =>
  array (
    0 => '172.18.0.11/16',
  'overwriteprotocol' => 'https',
  'overwritehost' => 'nextcloud.domain.com',
  'default_phone_region' => 'DE',

die IP ist die IP des Traefik Containers!!! Und dann noch folgendes geändert:

Code:
  'overwrite.cli.url' => 'https://nextcloud.domain.com',
 
  • Gefällt mir
Reaktionen: mae1cum77
Ach, ich wollte noch ergänzen, da du scheinbar direkt ne TLD nutzt und kein DuckDNS oder ähnliches mehr: bei Netcup gibt es verdammt günstig .de Domains. Regulär 5 Euro pro Jahr, im Angebot immer mal wieder für 2,64€ oder 1,68€ pro Jahr.

Hast du deinen Webserver auch in einen Docker Container gesteckt? Man kann fast alles in Container stecken :)
 
  • Gefällt mir
Reaktionen: mae1cum77
LieberNetterFlo schrieb:
Wie du vielleicht bemerkst: du darfst natürlich kein OAuth nutzen, das können die ganzen WebDAV Clients nicht!
Das war wohl das Problem. OK. Muß ich mir noch mal in Ruhe zu Gemüte führen.

Ich nutze momentan DuckDNS, habe zwar eine TLD aber die ist nur für Email. Ist nur als Test, weiß nicht, ob ich die behalte/brauche.
 
Sehr gut! Das scheint zu funktionieren. Meine WebDAV Tests mit Total Commander vom PC und Smartphone sind diesmal positiv 👍.

Darf man fragen wo die regex redirect rules her sind?

Gleich noch fail2ban scharfgemacht und getestet:
Code:
today at 19:50:122022-06-20 19:50:12,385 fail2ban.filter         [1]: INFO    [nextcloud] Found 185.226.64.118 - 2022-06-20 19:50:12
today at 20:03:592022-06-20 20:03:59,413 fail2ban.filter         [1]: INFO    [nextcloud] Found 185.226.64.118 - 2022-06-20 20:03:59

Ohne den TCP-Redirect zeigt das Log die tatsächliche IP an und nicht mehr die lokale von Traefik, jetzt geht auch Fail2ban. Perfekt!
 
Zuletzt bearbeitet:
mae1cum77 schrieb:
Darf man fragen wo die regex redirect rules her sind?

Freut mich dass jetzt alles soweit geht :) die Einträge habe ich aus dem Nextcloud Forum, letzter Eintrag https://help.nextcloud.com/t/well-known-seems-to-work-but-still-a-warning-using-traefik/120462/8
Ergänzung ()

Kennst du https://mattermost.com ? vielleicht ist das ja auch was für dich? Hab es selbst aber noch nicht im Container zum laufen gebracht ... aber vielleicht bist du ja motiviert und teilst dann deine Erfahrungen ;)
 
Zuletzt bearbeitet:
  • Gefällt mir
Reaktionen: mae1cum77
LieberNetterFlo schrieb:
Freut mich dass jetzt alles soweit geht
Hab das ganze noch erweitern können, um auch die letzten Fehler aus dem Overview-Tab zu bekommen.

Forum habe ich auch gefunden, alles klar.

Mit allen nötigen Middlewares:
Bash:
# Nextcloud
  nextcloud:
    container_name: nextcloud
    image: nextcloud:latest
    restart: unless-stopped
    networks:
      - t2_proxy
    security_opt:
      - no-new-privileges:true
#    ports:
#      - 8080:80
    volumes:
      - $DOCKERDIR/nextcloud/data:/var/www/html
    depends_on:
      - mariadb
    links:
      - mariadb:db
    environment:
      - PUID=$PUID
      - PGID=$PGID
      - TZ=$TZ
    labels:
      - "traefik.enable=true"
      ## HTTP Routers
      - "traefik.http.routers.nextcloud.entrypoints=https"
      - "traefik.http.routers.nextcloud.rule=HostHeader(`nextcloud.$DOMAINNAME`)"
      - "traefik.http.routers.nextcloud.tls=true"
      ## Middlewares
      - "traefik.http.routers.nextcloud.middlewares=nextcloud-headers,nextcloud-redirectregex1,nextcloud-redirectregex2,chain-no-auth@file" # No Auth
      - "traefik.http.middlewares.nextcloud-redirectregex1.redirectregex.permanent=true"
      - "traefik.http.middlewares.nextcloud-redirectregex1.redirectregex.regex=https?://([^/]*)/.well-known/(card|cal)dav"
      - "traefik.http.middlewares.nextcloud-redirectregex1.redirectregex.replacement=https://$${1}/remote.php/dav/"
      - "traefik.http.middlewares.nextcloud-redirectregex2.redirectregex.permanent=true"
      - "traefik.http.middlewares.nextcloud-redirectregex2.redirectregex.regex=https?://([^/]*)(/.well-known[^#]*)"
      - "traefik.http.middlewares.nextcloud-redirectregex2.redirectregex.replacement=https://$${1}/index.php$${2}"
      - "traefik.http.middlewares.nextcloud-headers.headers.customFrameOptionsValue=SAMEORIGIN"
      - "traefik.http.middlewares.nextcloud-headers.headers.framedeny=true"
      - "traefik.http.middlewares.nextcloud-headers.headers.sslredirect=true"
      - "traefik.http.middlewares.nextcloud-headers.headers.STSIncludeSubdomains=true"
      - "traefik.http.middlewares.nextcloud-headers.headers.STSPreload=true"
      - "traefik.http.middlewares.nextcloud-headers.headers.STSSeconds=315360000"
      - "traefik.http.middlewares.nextcloud-headers.headers.forceSTSHeader=true"
      - "traefik.http.middlewares.nextcloud-headers.headers.sslProxyHeaders.X-Forwarded-Proto=https"
      - "traefik.http.middlewares.nextcloud-headers.headers.customResponseHeaders.X-Robots-Tag=none"
      - "traefik.http.middlewares.nextcloud-headers.headers.contentTypeNosniff=true"
      - "traefik.http.middlewares.nextcloud-headers.headers.referrerPolicy=same-origin"
      - "traefik.http.middlewares.nextcloud-headers.headers.browserXssFilter=true"
      ## HTTP Services
      - "traefik.http.routers.nextcloud.service=nextcloud"
      - "traefik.http.services.nextcloud.loadbalancer.server.port=80"
 
Neue Reiseimpressionen - die Odyssee dauert an:

Holla die Waldfee; Nextcloud im Docker ist echt eine Diva. Neben den brennenden Reifen für die Middlewares ist auch Cron nicht Teil des Dockers (ist anscheinend auch nicht empfohlen). Die Einstellungen bewirken also genau nichts. Folglich beschwert sich Nextcloud beim Systemcheck.

Empfehlung des Gits ist ein eigener Container für Cron. Wollte bei mir nicht laufen.

Die anderen Tipps bezüglich Cron und eines Dienstes wollten auch nicht funktionieren.

Zu funktionieren scheint letztlich ein direkter Eintrag in die Crontab-Datei des Hosts unter /etc/crontab, bisher ist der Fehler nicht mehr aufgetaucht.
Ergänzung ()




Anhang Part 2.3


Wetty – SSH über das Web:​

SSH-Zugang zum lokalen Netz ohne Konsole, direkt über den Browser.

Usernamen und IP anpassen.

Bash:
## Wetty - SSH over the web
  wetty:
    container_name: wetty
    image: svenihoney/wetty:latest
    restart: always
    networks:
      - t2_proxy
#    ports:
#      - "3000:3000"
    security_opt:
      - no-new-privileges:true
    volumes:
      - /etc/timezone:/etc/timezone:ro
      - /etc/localtime:/etc/localtime:ro
    environment:
      - VIRTUAL_HOST=wetty.$DOMAINNAME
      - VIRTUAL_PORT=3000
      - REMOTE_SSH_SERVER=192.168.1.12
      - REMOTE_SSH_PORT=22
      - REMOTE_SSH_USER=username
    labels:
      - "traefik.enable=true"
      ## HTTP Routers
      - "traefik.http.routers.wetty-rtr.entrypoints=https"
      - "traefik.http.routers.wetty-rtr.rule=Host(`wetty.$DOMAINNAME`)"
      - "traefik.http.routers.wetty-rtr.tls=true"
      ## Middlewares
      - "traefik.http.routers.wetty-rtr.middlewares=chain-oauth@file"
      ## HTTP Services
      - "traefik.http.routers.wetty-rtr.service=wetty-svc"
      - "traefik.http.services.wetty-svc.loadbalancer.server.port=3000"## Wetty - SSH over the web

UI unter https://wetty.subdomain.duckdns.org


Bin – Pastebin​

Wieder eine MariaDB Datenbank anlegen und Daten entsprechend anpassen.

Bash:
## Paste Bin

  ## Change the theme:
    # sudo nano $USERDIR/docker/bin/cfg/conf.php
    # change template = "bootstrap" to "bootstrap-dark-page"
  ## Other options: https://privatebin.info/screenshots.html

  bin:
    container_name: bin
    image: jgeusebroek/privatebin:latest
    restart: always
    networks:
      - t2_proxy
#      - mariadb
#    ports:
#     - "80:80"
    security_opt:
      - no-new-privileges:true
    depends_on:
      - mariadb
    links:
      - mariadb:db
    volumes:
      - $USERDIR/docker/bin/data:/privatebin/data
      - $USERDIR/docker/bin/cfg:/privatebin/cfg
    environment:
      UID: $PUID
      GID: $PGID
      MYSQL_HOSTNAME: mariadb
      MYSQL_PORT: 3306
      MYSQL_DATABASE: bin_db
      MYSQL_USER: username
      MYSQL_PASSWORD: 'password'
    labels:
      - "traefik.enable=true"
      ## HTTP Routers
      - "traefik.http.routers.bin-rtr.entrypoints=https"
      - "traefik.http.routers.bin-rtr.rule=Host(`bin.$DOMAINNAME`)"
      - "traefik.http.routers.bin-rtr.tls=true"
      ## Middlewares
      - "traefik.http.routers.bin-rtr.middlewares=chain-oauth@file"
      ## HTTP Services
      - "traefik.http.routers.bin-rtr.service=bin-svc"
      - "traefik.http.services.bin-svc.loadbalancer.server.port=80"

UI unter https://bin.subdomain.duckdns.org.


QDirStat – Verzeichnis-Statistiken:​

Nichts anzupassen.

Bash:
# qDirStat - Directory Statistics
  qdirstat:
    image: jlesage/qdirstat:latest
    container_name: qdirstat
    restart: unless-stopped
    networks:
      - t2_proxy
    security_opt:
      - no-new-privileges:true
    volumes:
      - /volume1:/storage:ro
      - $DOCKERDIR/appdata/qdirstat/config:/config:rw
    environment:
      USER_ID: $PUID
      GROUP_ID: $PGID
      UMASK: 002
      TZ: $TZ
      KEEP_APP_RUNNING: 1
      CLEAN_TMP_DIR: 1
      DISPLAY_WIDTH: 1600
      DISPLAY_HEIGHT: 960
    labels:
      - "traefik.enable=true"
      ## HTTP Routers
      - "traefik.http.routers.qdirstat-rtr.entrypoints=https"
      - "traefik.http.routers.qdirstat-rtr.rule=Host(`qdirh.$DOMAINNAME`)"
      - "traefik.http.routers.qdirstat-rtr.tls=true"
      ## Middlewares
      - "traefik.http.routers.qdirstat-rtr.middlewares=chain-oauth@file"
      ## HTTP Services
      - "traefik.http.routers.qdirstat-rtr.service=qdirstat-svc"
      - "traefik.http.services.qdirstat-svc.loadbalancer.server.port=5800"

UI unter https://qdirh.subdomain.duckdns.org.


DupeGuru – Duplikatfinder:​

Nichts anzupassen.

Bash:
# DupeGuru - Duplicate File/Folder Remover
  dupeguru:
    image: jlesage/dupeguru:latest
    container_name: dupeguru
    restart: unless-stopped
    networks:
      - t2_proxy
    security_opt:
      - no-new-privileges:true
    volumes:
      - $USERDIR:/data/home:ro
      - $DOCKERDIR/appdata/dupeguru/config:/config:rw
      - /media/data:/data/data:rw
    environment:
      USER_ID: $PUID
      GROUP_ID: $PGID
      UMASK: 002
      TZ: $TZ
      KEEP_APP_RUNNING: 1
      CLEAN_TMP_DIR: 1
      DISPLAY_WIDTH: 1600
      DISPLAY_HEIGHT: 960
    labels:
      - "traefik.enable=true"
      ## HTTP Routers
      - "traefik.http.routers.dupeguru-rtr.entrypoints=https"
      - "traefik.http.routers.dupeguru-rtr.rule=Host(`dupe.$DOMAINNAME`)"
      - "traefik.http.routers.dupeguru-rtr.tls=true"
      ## Middlewares
      - "traefik.http.routers.dupeguru-rtr.middlewares=chain-oauth@file"
      ## HTTP Services
      - "traefik.http.routers.dupeguru-rtr.service=dupeguru-svc"
      - "traefik.http.services.dupeguru-svc.loadbalancer.server.port=5800"

UI unter https://dupe.subdomain.duckdns.org.


Cloud Commander – Web Datei Manager:​

Nichts anzupassen.

Bash:
# Cloud Commander - web file manager
  cloudcmd:
    image: coderaiser/cloudcmd
    container_name: cloudcmd
    restart: unless-stopped
    networks:
      - t2_proxy
    security_opt:
      - no-new-privileges:true
    volumes:
      - ./cloudcmd:/root
      - $USERDIR:/mnt/fs
    environment:
      PUID: $PUID
      PGID: $PGID
      TZ: $TZ
    labels:
      - "traefik.enable=true"
      ## HTTP Routers
      - "traefik.http.routers.cloudcmd-rtr.entrypoints=https"
      - "traefik.http.routers.cloudcmd-rtr.rule=Host(`cloudcmd.$DOMAINNAME`)"
      - "traefik.http.routers.cloudcmd-rtr.tls=true"
      ## Middlewares
      - "traefik.http.routers.cloudcmd-rtr.middlewares=chain-oauth@file"
      ## HTTP Services
      - "traefik.http.routers.cloudcmd-rtr.service=cloudcmd-svc"
      - "traefik.http.services.cloudcmd-svc.loadbalancer.server.port=8000"

UI unter https://cloudcmd.subdomain.duckdns.org.
 
Zuletzt bearbeitet:
LieberNetterFlo schrieb:
warum brauchst du noch Wetty wenn du schon Guacamole hast?
Manchmal reicht SSH, da brauch ich keinen Desktop. Ist halt zum Testen/Rumspielen :).
 
oh, Guacamole kann doch als Protokoll direkt SSH, ohne Desktop etc. :) ja ich weiß, wenn man einmal kapiert wie easy solche Docker Container funktionieren, besonders im Zusammenspiel mit Traefik, dann probiert man aus was man so brauchen könnte :)
 
  • Gefällt mir
Reaktionen: mae1cum77
LieberNetterFlo schrieb:
Guacamole kann doch als Protokoll direkt SSH
Valider Hinweis :). Wetty ist halt schneller aufgerufen und Redundanz ist immer gut.
 
  • Gefällt mir
Reaktionen: LieberNetterFlo
ksk23 schrieb:
Oauth klingt nett, nen externen Provider reinziehen find ich aber bäh!
Klingt schlimmer, als es ist, sichert ja nur den Zugang, dahinter sitzt noch TOTP-Auth für die meisten Dienste. Nextcloud ist ausgenommen, da sonst WebDAV nicht funktioniert, hier sind zig Labels konfiguriert (u.a. Verbot von i-Frames) plus die Sachen, die Nextcloud schon mitbringt.

Als Alternative kann man auch Authelia mutzen. Traefik bietet da einige Möglichkeiten.
 
  • Gefällt mir
Reaktionen: ksk23
Zurück
Oben