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

  • Ersteller Ersteller s1ave77
  • Erstellt am Erstellt am
@mae1cum77 ja Guacamole läuft bei mir auch. Eigentlich ist das Gute an Docker ja, dass man die VM nicht zurücksetzen muss, sondern einfach die Container vernichtet und neu erstellt?!

# Guacamole Daemon - Needed for Guacamole
guacd:
image: guacamole/guacd
container_name: guacd
restart: unless-stopped
security_opt:
- no-new-privileges:true
networks:
- t2_proxy

# Guacamole - Remote desktop, SSH, on Telnet on any HTML5 Browser
guacamole:
image: guacamole/guacamole:latest
container_name: guacamole
restart: unless-stopped
networks:
- t2_proxy
security_opt:
- no-new-privileges:true
depends_on:
- mariadb
environment:
GUACD_HOSTNAME: $GUACD_HOSTNAME
MYSQL_HOSTNAME: $DB_HOST
MYSQL_PORT: $DB_PORT
MYSQL_DATABASE: $GUAC_MYSQL_DATABASE
MYSQL_USER: $GUAC_MYSQL_USER
MYSQL_PASSWORD: $GUAC_MYSQL_PASSWORD
labels:
- "traefik.enable=true"
## HTTP Routers
- "traefik.http.routers.guacamole-rtr.entrypoints=https"
- "traefik.http.routers.guacamole-rtr.rule=Host(guac.$DOMAINNAME)"
- "traefik.http.routers.guacamole-rtr.tls=true"
## Middlewares
- "traefik.http.routers.guacamole-rtr.middlewares=chain-oauth@file,add-guacamole"
- "traefik.http.middlewares.add-guacamole.addPrefix.prefix=/guacamole"
## HTTP Services
- "traefik.http.routers.guacamole-rtr.service=guacamole-svc"
- "traefik.http.services.guacamole-svc.loadbalancer.server.port=8080"

# MariaDB - SQL Database
mariadb:
container_name: mariadb
image: linuxserver/mariadb:latest
restart: unless-stopped
networks:
- t2_proxy
security_opt:
- no-new-privileges:true
volumes:
- $USERDIR/docker/mariadb/data:/config
- /etc/timezone:/etc/timezone:ro
- /etc/localtime:/etc/localtime:ro
environment:
- PUID=$PUID
- PGID=$PGID
- MYSQL_ROOT_PASSWORD=$MYSQL_ROOT_PASSWORD

# Adminer - Database management
adminer:
image: adminer:standalone
container_name: adminer
restart: unless-stopped
networks:
- t2_proxy
security_opt:
- no-new-privileges:true
volumes:
- $DOCKERDIR/adminer:/etc/adminer
depends_on:
- mariadb
links:
- mariadb:db
labels:
- "traefik.enable=true"
## HTTP Routers
- "traefik.http.routers.adminer-rtr.entrypoints=https"
- "traefik.http.routers.adminer-rtr.rule=Host(adminer.$DOMAINNAME)"
- "traefik.http.routers.adminer-rtr.tls=true"
## Middlewares
- "traefik.http.routers.adminer-rtr.middlewares=chain-oauth@file"
## HTTP Services
- "traefik.http.routers.adminer-rtr.service=adminer-svc"
- "traefik.http.services.adminer-svc.loadbalancer.server.port=8080"

Die ganzen Variablen müsstest du direkt setzen oder in einer .env Datei setzen. Ich hab den Guacamole Benutzer und die Datenbank mit Adminer in MariaDB manuell angelegt.
 
  • Gefällt mir
Reaktionen: s1ave77
@LieberNetterFlo Danke! Habe festgestellt, daß ich für die Initialisierung der MariaDB für Guacamole zu dumm bin :). Habe bisher manuell in der CLI gearbeitet, erfolglos. Alles andere läuft tadellos.

Wäre an deinem Weg über Adminer interessiert. Finde da keine Möglichkeit eine DB zu erstellen.

Habe als Alternative meine Guacamole Instanz als 2ten Stack installiert. Funktioniert auch, aber ist nicht ganz so elegant.
 
OH MANN!!! Hat sich erledigt - ICH BIN DUMM!!!

Das Passwort für mariadb als: 'passwd' - und schon läuft es.

Habe noch den homefolder als environment und die volumes für config und extensions hinzugefügt und siehe da - TOTP funktioniert auch noch.

firefox_UTN30FIujI.png
 
Zuletzt bearbeitet von einem Moderator:
LieberNetterFlo schrieb:
heißt das du ziehst mit allen deinen Apps in Container hinter Traefik2 um
Schon passiert ... nachdem Guacamole den Widerstand aufgab, war es geschehen. Das neue System ist schon eingerichtet und versieht online seinen Dienst. Ein Check auf Nextcloud Security Scan bescheinigt meiner Instanz ein A+ Rating mit allen nützlichen 'Härtungen' gegen Angriffe.

Problem ist eher immer, ein How-To zu finden, welches einen nicht vor einer unüberwindbaren Wand stehen läßt (ist deprimierend, wenn das immer wieder im späteren Verlauf passiert).

Der Tipp von dir war da echt Gold wert, da er bis zum Ende führt. Fehler enstehen hauptsächlich durch Unaufmerksamkeiten und Syntax-'Slips'.

Traefik2 ist wirklich ein Fortschritt und macht es relativ einfach eine sichere Umgebung aufzubauen und an die eigenen Bedürfnisse anzupassen. Das Dashboard ist hilfreich bei Konfigurationsfehlern, gerade die Middlewares können zickig sein. In deinem Guacamole-Snipplet fehlen z.B. Backquotes bei der Route für die 'guac' Subdomain ;). Funktionierend: - "traefik.http.routers.guacamole-rtr.rule=Host(`guac.$DOMAINNAME`)"

Lasse das gerade sacken und werde meinen Guide später überarbeiten, auf Basis des neuen How-Tos.

Mal schauen, was da an Funktionen noch so passt...
 
die fehlenden Anführungszeichen hat das Forum verschluckt :O bei mir sind die noch drin!

Bin schon gespannt was du noch so an Containern spawnst, gibt Bescheid, ich bin immer auf der Suche nach neuem!
 
  • Gefällt mir
Reaktionen: s1ave77
Werde ich hier berichten. Bin mich auch gerade am umschauen. Da ist ein recht umfangreiches Git-Repo verlinkt mit zig Snipplets für Apps/Funktionen, mal sehen, was nützlich ist.

https://github.com/CVJoint/traefik2/tree/master/ymlfiles

Ist immer sinnvoll Code in entsprechenden Code-Tags zu posten, dann kann Xenforo sich nicht einmischen.

Vor allem die hierarchischen Einrückungen lassen Docker-Compose schnell verrückt spielen, wenn falsch gesetzt.
 
Neue Organizr Startpage mit Glances:
firefox_epfnhAlmJF.png

Mußte den Repo-Code etwas anpassen für Google OAuth und TLS, nun läuft es.
CSS:
## Glances - Container and System Monitor
  glances:
    container_name: glances
    image: nicolargo/glances:latest
    pid: host
    restart: always
    networks:
      - t2_proxy
#    ports:
#      - "61208:61208"
    security_opt:
      - no-new-privileges:true
    volumes:
      - $USERDIR/docker/glances:/glances/conf # Use this if you want to add a glances.conf file
      - /var/run/docker.sock:/var/run/docker.sock:ro
    environment:
      - GLANCES_OPT=-w
    labels:
      - "traefik.enable=true"
      ## HTTP Routers
      - "traefik.http.routers.glances-rtr.entrypoints=https"
      - "traefik.http.routers.glances-rtr.rule=Host(`glances.$DOMAINNAME`)"
      - "traefik.http.routers.glances-rtr.tls=true"
      ## Middlewares
      - "traefik.http.routers.glances-rtr.middlewares=chain-oauth@file"
      ## HTTP Services
      - "traefik.http.routers.glances-rtr.service=glances-svc"
      - "traefik.http.services.glances-svc.loadbalancer.server.port=61208"

Dozzle Realtime Logviewer:

firefox_i9qTdMBUy1.png

CSS:
# Dozzle - Real-time Docker Log Viewer
  dozzle:     
    image: amir20/dozzle:latest
    container_name: dozzle
    restart: unless-stopped
    networks:
      - t2_proxy
    security_opt:
      - no-new-privileges:true
    # ports:
    #   - "$DOZZLE_PORT:8080"
    environment:
      DOZZLE_LEVEL: info
      DOZZLE_TAILSIZE: 300
      DOZZLE_FILTER: "status=running"
      # DOZZLE_FILTER: "label=log_me" # limits logs displayed to containers with this label
      # DOCKER_HOST: tcp://socket-proxy:2375
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock # Use Docker Socket Proxy instead for improved security
    labels:
      - "traefik.enable=true"
      ## HTTP Routers
      - "traefik.http.routers.dozzle-rtr.entrypoints=https"
      - "traefik.http.routers.dozzle-rtr.rule=Host(`dozzle.$DOMAINNAME`)"
      - "traefik.http.routers.dozzle-rtr.tls=true"
      ## Middlewares
      - "traefik.http.routers.dozzle-rtr.middlewares=chain-oauth@file"
      ## HTTP Services
      - "traefik.http.routers.dozzle-rtr.service=dozzle-svc"
      - "traefik.http.services.dozzle-svc.loadbalancer.server.port=8080"

FileBrowser Filesharing Tool:

firefox_aohIiDRYVc.png

CSS:
# File Browser - Explorer
  filebrowser:
    container_name: filebrowser
    image: filebrowser/filebrowser:s6
    restart: unless-stopped
    networks:
      - t2_proxy
    security_opt:
      - no-new-privileges:true
    #ports:
    #  - "$FILEBROWSER_PORT:80"
    volumes:
      - $DOCKERDIR/appdata/filebrowser:/config
      - /media:/data/media
      - $USERDIR:/data/home
    environment:
      - PUID=$PUID
      - PGID=$PGID
      - TZ=$TZ
    labels:
      - "traefik.enable=true"
      ## HTTP Routers
      - "traefik.http.routers.filebrowser-rtr.entrypoints=https"
      - "traefik.http.routers.filebrowser-rtr.rule=Host(`fb.$DOMAINNAME`)"
      - "traefik.http.routers.filebrowser-rtr.tls=true"
      ## Middlewares
      - "traefik.http.routers.filebrowser-rtr.middlewares=chain-oauth@file"
      ## HTTP Services
      - "traefik.http.routers.filebrowser-rtr.service=filebrowser-svc"
      - "traefik.http.services.filebrowser-svc.loadbalancer.server.port=80"
 
Zuletzt bearbeitet von einem Moderator:
DuckDNS Host IP Updater (alle 5 min laut Beschreibung auf dockerhub):

CSS:
  duckdns:
    image: lscr.io/linuxserver/duckdns:latest
    container_name: duckdns
    environment:
      - PUID=$PUID
      - PGID=$PGID
      - TZ=$TZ
      - SUBDOMAINS=subdomain1,subdomain2
      - TOKEN=$DUCKDNS_TOKEN
      - LOG_FILE=true #optional
    volumes:
      - ./appdata/config:/config #optional
    restart: unless-stopped

subdomains anpassen und Token setzen (direkt oder in der .env).

Habe gerade meinen Updatetask deaktiviert, den Router neugestartet und ca 5 min gewartet. Ein erneuter Check im DuckDNS Dashboard zeigte ein erfolgreiches Update - PERFEKT!!!

Code:
today at 23:15:17[services.d] starting services
today at 23:15:17[services.d] done.
today at 23:23:46Your IP was updated at Fri Jun 10 23:23:46 CEST 2022

Scheint laut log zu laufen - Fein.
Code:
Your IP was updated at Fri Jun 10 23:52:01 CEST 2022
Your IP was updated at Fri Jun 10 23:57:01 CEST 2022
Your IP was updated at Sat Jun 11 00:22:01 CEST 2022
Your IP was updated at Sat Jun 11 00:27:01 CEST 2022
Your IP was updated at Sat Jun 11 00:32:01 CEST 2022
Your IP was updated at Sat Jun 11 00:37:01 CEST 2022
Your IP was updated at Sat Jun 11 00:42:01 CEST 2022
Your IP was updated at Sat Jun 11 00:47:01 CEST 2022
 
Zuletzt bearbeitet von einem Moderator:
Letztes Ärgernis beseitigt. Trotz Anleitung und verschiedener Konfigurationsversuche, hat Nextcloud hartnäckig das Standard-Zertifikat von linuxserver.io geladen, geht garnicht!

Also etwas gesucht und nach einiger Anpassung erwies sich folgender Certdumper als 'Lösung'. Dieser holt sich das Let's Encrypt Zertifikat aus der acme.json und kopiert es in den ./nextcloud/keys/ Ordner. Dann startet er nextcloud neu. Subdomainname anpassen.


Code:
# Let's Encrypt Certs Dumper
  certdumper:
    image: humenius/traefik-certs-dumper:latest
    command: --restart-containers nextcloud
    networks:
      - t2_proxy
    security_opt:
      - no-new-privileges:true
    volumes:
    - ./traefik2/acme:/traefik:ro
    - ./nextcloud/keys:/output:rw
    - /var/run/docker.sock:/var/run/docker.sock:ro
    environment:
    - DOMAIN=subdomain.duckdns.org

Dann unter ./nextcloud/nginx/site-conf/ die 'default' Datei editieren und die *.crt und *.key Dateien durch die *.pem Einträge austauschen. Sollte so aussehen:
Rich (BBCode):
upstream php-handler {
    server 127.0.0.1:9000;
}
server {
    listen 80;
    listen [::]:80;
    server_name _;
    return 301 https://$host$request_uri;
}
server {
    listen 443 ssl http2;
    listen [::]:443 ssl http2;
    server_name _;
    ssl_certificate /config/keys/cert.pem;
    ssl_certificate_key /config/keys/key.pem;
 
Warum Owncloud ein eigenes Zertifikat? Sollte doch auch über Traefik2 gehen, oder?

DNS mache ich bei Cloudflare mit einer TLD für keine 3 Euro im Jahr :)

Als Datei Browser nutze ich aktuell CrushFTP... Werde mir deine Lösung mal anschauen 👍
 
  • Gefällt mir
Reaktionen: s1ave77
LieberNetterFlo schrieb:
Warum Owncloud ein eigenes Zertifikat? Sollte doch auch über Traefik2 gehen, oder?

Ich nutze Nextcloud, keine Ahnung was OwnCloud treibt :). Ersteres braucht eine TCP Route mit Umleitung, da die Images mit Nginx im Gepäck kommen. Daher zieht es anscheinend eigene Zertifikate von linuxserver.io und ignoriert Traefik. Ein bischen von-hinten-durch die-brust-ins-auge muß ja sein, anscheinend. Ist kein Beinbruch, Zertifikate halten 88 Tage und ab und zu den Cert-Dumper laufen zu lassen geht über Portainer schnell.

CF hatte ich überlegt, wollte aber wissen, ob das auch kostenlos machbar ist, daher DuckDNS. Funktioniert zusammen mit dem Updater-Container wie beworben, ganz ohne Task/Tool/Router direkt aus dem Stack heraus.

Für CF gibt es auch einen Update Companion habe ich gesehen.

Der FileBrowser ist eher ein Experiment, habe nicht mal direkt ein Szenarion dafür bisher, mal schauen.

Die meisten anderen Sachen beziehen sich auf Medienbibliotheken und zugehörige Tools zur Verwaltung. Das brauche ich alles nicht.

Mal sehen, was ich noch finde... bin für Tipps offen.
 
Gerade etwas mit Fail2Ban gespielt ... sieht gut aus:
Code:
today at 11:39:152022-06-12 11:39:15,830 fail2ban.filter         [1]: INFO    [traefik-auth] Found 109.201.130.5 - 2022-06-12 11:39:15
today at 11:39:162022-06-12 11:39:16,084 fail2ban.filter         [1]: INFO    [traefik-auth] Found 109.201.130.5 - 2022-06-12 11:39:16

IPs von mislungenen Loginversuchen, werden nach 5 Anläufen gebannt.
 
Letzte schwere Eingriffe ins System sind getan. Traefik2 auf 2.7 aktualisiert und YAML angepaßt.

Alt: - "traefik.http.routers.dozzle-rtr.rule=Host(`dozzle.$DOMAINNAME`)"
Neu: - "traefik.http.routers.dozzle-rtr.rule=HostHeader(`dozzle.$DOMAINNAME`)"

Und als letztes die fast volle Platte noch erweitert und mit GParted im Linux angepaßt.

Redigiere noch den überarbeiteten Bericht...
 
LieberNetterFlo schrieb:
warum nutzt du den Nextcloud Container von Linuxserver.io anstatt den offiziellen?
Gute Frage, muß mal schauen, wo der herkam...

@LieberNetterFlo kannst du mir dein Nextcloud Snippet zukommen lassen, das offizielle Image wehrt sich mit meinem :).
 
Zuletzt bearbeitet von einem Moderator:
Update: Traefik 2 Tutorial eingepflegt. Anhänge angepaßt. Das alte Tutorial ist jetzt in Anhang Part X.
 
@LieberNetterFlo meine letzte Bitte ist wohl untergegangen. Wäre immer noch an deiner Nextcloud YML interessiert. Bin neugierig, was da anders ist.

Info: schreibe gerade noch den (vorerst) letzten Part. Fail2Ban und ein paar Apps fehlen noch.

Habe eine brauchbare Konfig für Fail2Ban gefunden, die auch SSH überwacht, neben der Traefik-Auth. Hat jetzt schon einige neugierige Pen-Tester gebannt (schreibt die IPs zuverlässig in die Tables).
 
LieberNetterFlo schrieb:
Ich kann aber mal morgen schauen ob ich das auf die schnelle zum laufen bekomme
Das ist nett!

Hast du Fail2ban am laufen? Hat mich einige Recherche gekostet, die Konfigs richtig zu erstellen. Will ja den SSH-Port offen haben, ohne ständig DDOS-Tests anzuziehen. Jetzt bannt F2B nach 3 Versuchen für 1 h und wenn das öfter passiert, verdoppelt sich die Zeit jeweils.

SSH-Ports sind interessant wie es aussieht.

Läuft ;).
Code:
today at 22:08:152022-06-18 22:08:15,247 fail2ban.filter         [1]: INFO    [sshd] Found 101.173.221.55 - 2022-06-18 22:08:15
today at 22:08:172022-06-18 22:08:17,341 fail2ban.filter         [1]: INFO    [sshd] Found 101.173.221.55 - 2022-06-18 22:08:17
today at 22:08:202022-06-18 22:08:20,741 fail2ban.filter         [1]: INFO    [sshd] Found 101.173.221.55 - 2022-06-18 22:08:20
today at 22:08:202022-06-18 22:08:20,777 fail2ban.actions        [1]: NOTICE  [sshd] Ban 101.173.221.55
today at 22:32:042022-06-18 22:32:04,290 fail2ban.filter         [1]: INFO    [sshd] Found 61.177.172.114 - 2022-06-18 22:32:04
today at 22:32:042022-06-18 22:32:04,294 fail2ban.observer       [1]: INFO    [sshd] Found 61.177.172.114, bad - 2022-06-18 22:32:04, 1 # -> 2.0
today at 22:32:072022-06-18 22:32:07,950 fail2ban.filter         [1]: INFO    [sshd] Found 61.177.172.114 - 2022-06-18 22:32:07
today at 22:32:072022-06-18 22:32:07,955 fail2ban.observer       [1]: INFO    [sshd] Found 61.177.172.114, bad - 2022-06-18 22:32:07, 1 # -> 2.0
today at 22:32:082022-06-18 22:32:08,072 fail2ban.actions        [1]: NOTICE  [sshd] Ban 61.177.172.114
today at 22:32:082022-06-18 22:32:08,083 fail2ban.observer       [1]: INFO    [sshd] IP 61.177.172.114 is bad: 1 # last 2022-06-18 20:41:32 - incr 1:00:00 to 4:00:00
today at 22:32:082022-06-18 22:32:08,090 fail2ban.observer       [1]: NOTICE  [sshd] Increase Ban 61.177.172.114 (2 # 4:00:00 -> 2022-06-19 02:32:07)
 
Zuletzt bearbeitet von einem Moderator:
  • Gefällt mir
Reaktionen: LieberNetterFlo
Zurück
Oben