Installa Guacamole su Docker con Traefik, Postgres e 2FA
Nota
Finalmente ho trovato come far funzionare il Wake on LAN da Guacamole in docker, guarda questa guida.
Nota
Se vuoi installare Guacamole con il database mySQL guarda questa guida.
Accedere da remoto a un terminal SSH o a una sessione grafica con VNC/RDP può essere molto utile. In particolare se i device sono molti e se si cambia regolarmente la postazione di lavoro. Guacamole è una delle soluzioni open source sul mercato. Purtroppo non c’è un singolo container docker da installare e non è facile trovare una guida completa per l’installazione dall’inizio alla fine.
Qui sotto ho creato una piccola guida per l’installazione di Guacamole con un database postgres per la gestione degli utente e l’integrazione con Traefik per avere un collegamento https.
Requisiti
- Installazione funzionante di Traefik e relativi certificati per https (vedi esempio di base)
- Accesso con SSH alla macchina dove è installato
docker
Procedura per l’installazione
Database postgres
- Generare il file di inizializzazione per il database postgres (potrebbe servire sudo)
docker run --rm guacamole/guacamole /opt/guacamole/bin/initdb.sh --postgres > initdb.sql
Il file generato deve essere passato (collegato come volume) al database per importare la struttura necessaria per Guacamole
Lanciare e creare il container del database (potrebbe servire sudo)
docker-compose up -d guacamole-db
Guacamole
- Creare i due container di Guacamole lanciando il seguente comando (potrebbe servire sudo). Viste le dipendenze dei vari container, verranno creati entrambi.
docker-compose up -d guacamole
Guacamole è funzionante e puoi collegarti all’interfaccia all’indirizzo: https://guacamole.example.com I dati per il primo login sono:
- user: guacadmin
- password: guacadmin
Ti consiglio di duplicare l’account di default e crearne uno nuovo di amministratore. Poi eseguire il login con il nuovo account e cancellare quello di default.
2FA per Guacamole
Dalla versione 1.3.0 TOTP è integrato nel container docker (PR 471), purtroppo la documentazione non è ancora stata aggiornata.
Quando l’installazione di Guacamole è funzionante è consigliato attivare l’autentificazione a 2 fattori (2FA).
Aggiungere il parametro
TOTP_ENABLED: 'true'
al containerguacamole
. Al primo login verrà presentato il QR per attivare il 2FA e verrà richiesto d’immettere un codice per confermare.
Docker compose
guacd:
image: guacamole/guacd
container_name: guacd
hostname: guacd
restart: unless-stopped
volumes:
- /volume1/docker/guacamole/guacd/drive:/drive:rw
- /volume1/docker/guacamole/guacd/record:/record:rw
guacamole:
image: guacamole/guacamole
container_name: guacamole
hostname: guacamole
restart: unless-stopped
depends_on:
traefik:
condition: service_started
guacamole-db:
condition: service_started
guacd:
condition: service_started
environment:
GUACD_HOSTNAME: guacd
POSTGRES_HOSTNAME: guacamole-db
POSTGRES_DATABASE: guacamole_db
POSTGRES_USER: guacamole_user
POSTGRES_PASSWORD: ${GUACAMOLE_PASSWORD}
#TOTP_ENABLED: 'true'
labels:
- 'traefik.enable=true'
- 'traefik.http.routers.guacamole.rule=Host(`guacamole.${DOMAIN}`)'
- 'traefik.http.routers.guacamole.entrypoints=web-secure'
- 'traefik.http.routers.guacamole.tls=true'
- "traefik.http.routers.guacamole.tls.certresolver=certificato"
- "traefik.http.routers.guacamole.tls.domains[0].main=*.${DOMAIN}"
- "traefik.http.routers.guacamole.service=guacamoleService"
- "traefik.http.routers.guacamole.middlewares=guacamoleMdl"
- "traefik.http.middlewares.guacamoleMdl.addprefix.prefix=/guacamole"
- "traefik.http.services.guacamoleService.loadBalancer.server.port=8080"
guacamole-db:
container_name: guacamole-db
image: postgres:12-alpine
hostname: guacamole-db
environment:
POSTGRES_DB: guacamole_db
POSTGRES_PASSWORD: ${GUACAMOLE_PASSWORD}
POSTGRES_USER: guacamole_user
TZ: ${TIME_ZONE_ZUERICH}
PGDATA: /var/lib/postgresql/data/pgdata
logging:
driver: "none"
restart: unless-stopped
volumes:
- ./initdb.sql:/docker-entrypoint-initdb.d/initdb.sql #DB configuration file
- /volume1/docker/guacamole/database:/var/lib/postgresql/data/pgdata
Crediti Foto di Steve Buissinne da Pixabay