My boring Blog

Home page di Mauro Frigerio
it en

Installa Guacamole su Docker con Traefik e 2FA

13-07-2021 Tempo di lettura 2 minuti article

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 mysql 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 mysql

  1. Generare il file di inizializzazione per il database mysql (potrebbe servire sudo)
docker run --rm guacamole/guacamole /opt/guacamole/bin/initdb.sh --mysql > 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:
      - guacd
      - guacamole-db
    environment:
      GUACD_HOSTNAME: guacd
      MYSQL_HOSTNAME: guacamole-db
      MYSQL_DATABASE: guacamole_db
      MYSQL_USER: guacamole_user
      MYSQL_PASSWORD: ${GUACAMOLE_PASSWORD}
      #TOTP_ENABLED: 'true'
    links:
      - guacd
    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.tls.options=myTLSOptions@file"
      - "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:
    image: mysql/mysql-server
    container_name: guacamole-db
    hostname: guacamole-db
    environment:
      MYSQL_USER: guacamole_user
      MYSQL_PASSWORD: ${GUACAMOLE_PASSWORD}
      MYSQL_DATABASE: guacamole_db
    restart: unless-stopped
    volumes:
      - ./initdb.sql:/initdb.sql				#DB configuration file
      - /volume1/docker/guacamole/database:/var/lib/mysql/:rw


Crediti Foto di Steve Buissinne da Pixabay