Menu Home

Sostituire Azure Bastion con Apache Guacamole (Parte 2)

apache guacamole azure bastion rdp ssh vnc

Nella prima parte di questa guida abbiamo visto come installare Apache Guacamole e utilizzarlo come alternativa al servizio Azure Bastion, oggi completeremo il progetto integrando l’utilizzo di certificati Let’s Encrypt, la Two-Factor Authentication e la possibilità di editare le configurazioni delle connessioni direttamente dal portale web (grazie alla presenza di un database).

Installazione ngnix e certbot

Per completare la configurazione del nostro sistema installeremo ngnix e certbot, necessario per ottenere il certificato Let’s Encrypt:

sudo apt install --yes nginx-core
sudo snap install core; sudo snap refresh core
sudo snap install --classic certbot

Successivamente configureremo certbot con un dominio (bastion.azurelab.blog) e un indirizzo email così da integrarlo con nginx.

sudo certbot --nginx -d "bastion.azurelab.blog" -m "veneto@azuremeetup.it" --agree-tos -n

Dovremo editare il file /etc/nginx/sites-enabled/default e sostituire questa sezione:

con questa:

server_name bastion.azurelab.blog; # managed by Certbot

        location / {


                proxy_pass http://localhost:8080/;
                proxy_buffering off;
                proxy_http_version 1.1;
                proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
                proxy_set_header Upgrade $http_upgrade;
                proxy_set_header Connection $http_connection;
                proxy_cookie_path /guacamole/ /;
                access_log off;
        }

Questo imposterà nginx come proxy per il tuo servlet. Non sarà necessario il reindirizzamento da HTTP a HTTPS, poiché già fatto da certbot.
A questo punto possiamo testare la configurazione e riavviare il servizio web:

sudo nginx -t
sudo systemctl restart nginx

E come per magia, accedendo all’indirizzo https://miodominio/guacamole, vedremo comparire l’interfaccia della nostra applicazione di accesso remoto:

Installazione database

Come anticipato all’inizio uno degli obiettivi è rendere editabile, tramite la GUI web, le configurazioni. Dovremo, quindi, installare un database. In questo esempio utilizzeremo MySQL, ma Guacamole supporta anche MariaDBPostgreSQL:

sudo apt install --yes mysql-server

Possiamo controllare lo stato del servizio MySQL tramite il comando systemctl status mysql --no-pager

Dopo l’installazione di MySQL sarà necessario installare anche le estensioni e le librerie di Guacamole necessarie al dialogo con il DB:

export GUAC_VERSION="1.5.5"

# Download and install JDBC extensions
curl -fLO "https://downloads.apache.org/guacamole/${GUAC_VERSION}/binary/guacamole-auth-jdbc-${GUAC_VERSION}.tar.gz"
tar -xzf "guacamole-auth-jdbc-${GUAC_VERSION}.tar.gz"
sudo mkdir -p /etc/guacamole/extensions
sudo cp "guacamole-auth-jdbc-${GUAC_VERSION}/mysql/guacamole-auth-jdbc-mysql-${GUAC_VERSION}.jar" "/etc/guacamole/extensions/"

# Download and install MySQL Connector/J
CONNECTORJ_VERSION="8.0.24"
curl -fLO "https://dev.mysql.com/get/Downloads/Connector-J/mysql-connector-java-${CONNECTORJ_VERSION}.tar.gz"
tar -xvf "mysql-connector-java-${CONNECTORJ_VERSION}.tar.gz"
sudo mkdir -p /etc/guacamole/lib
sudo cp "mysql-connector-java-${CONNECTORJ_VERSION}/mysql-connector-java-${CONNECTORJ_VERSION}.jar" "/etc/guacamole/lib/"

Ora possiamo procedere con la configurazione creando un database e un utente:

MYSQL_PASSWORD="@PasswordComplessa!!"
sudo mysql --execute='CREATE DATABASE bastion_db;'
sudo mysql --execute="CREATE USER 'bastion_user'@'localhost' IDENTIFIED BY '${MYSQL_PASSWORD}';"
sudo mysql --execute="GRANT SELECT,INSERT,UPDATE,DELETE ON bastion_db.* TO 'bastion_user'@'localhost';"
sudo mysql --execute='FLUSH PRIVILEGES;'

A questo punto eseguiremo gli script di creazione dell’utente di default guacadmin:

cd /etc/guacamole/extensions
cat guacamole-auth-jdbc-1.5.5/mysql/schema/*.sql | sudo mysql bastion_db

Adesso andrà creato il file /etc/guacamole/guacamole.properties con i parametri del DB:

# MySQL properties
mysql-hostname: localhost
mysql-port: 3306
mysql-database: bastion_db
mysql-username: bastion_user
mysql-password: @PasswordComplessa!!

e possiamo rimuovere il file user-mapping.xml e riavviare il servizio Tomcat:

sudo rm -f /etc/guacamole/user-mapping.xml

sudo systemctl restart tomcat

L’attività è a questo punto terminata e potremo accedere al nostro Guacamole con l’utenza di default guacadmin / guacadmin:

Two-Factor Authentication

Per abilitare l’autenticazione a due fattori sarà sufficiente installare il modulo TTOP e riavviare il servizio Tomcat:

export GUAC_VERSION=1.5.5
# Download and install TOTP extension
curl -fLO "https://downloads.apache.org/guacamole/${GUAC_VERSION}/binary/guacamole-auth-totp-${GUAC_VERSION}.tar.gz"
tar -xzf "guacamole-auth-totp-${GUAC_VERSION}.tar.gz"
sudo mkdir -p /etc/guacamole/extensions
sudo cp "guacamole-auth-totp-${GUAC_VERSION}/guacamole-auth-totp-${GUAC_VERSION}.jar" "/etc/guacamole/extensions/"

# Restart tomcat
sudo systemctl restart tomcat

Al prossimo accesso potremo eseguire la configurazione di una app di autenticazione, come ad esempio il Microsoft Authenticator:

Per quanto riguarda Azure Bastion vi segnalo l’ottimo video di Luca Torresi:

Categories: Azure Blog Cloud Sistemi

Tagged as: