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



