My boring Blog

Home page di Mauro Frigerio

Installa Guacamole su Docker con Traefik, Postgres e 2FA

21-01-2023 Tempo di lettura 3 minuti Article

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

  1. 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
  1. Il file generato deve essere passato (collegato come volume) al database per importare la struttura necessaria per Guacamole

  2. Lanciare e creare il container del database (potrebbe servire sudo)

docker-compose up -d guacamole-db

Guacamole

  1. 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
  1. Guacamole è funzionante e puoi collegarti all’interfaccia all’indirizzo: https://guacamole.example.com I dati per il primo login sono:

    • user: guacadmin
    • password: guacadmin
  2. 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.

  1. Quando l’installazione di Guacamole è funzionante è consigliato attivare l’autentificazione a 2 fattori (2FA).

  2. Aggiungere il parametro TOTP_ENABLED: 'true' al container guacamole. 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