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 MariaDB o PostgreSQL:
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: