In questo tutorial spiegherò come installare Guacamole su Ubuntu, configurare l’accesso ai dispositivi e utilizzarlo.
Prima di entrare negli aspetti tecnici, vorrei presentarvi Apache Guacamole e spiegarvi in particolare perché dovreste implementarlo.
- Cos'è il guacamole?
- Utilizzo del guacamole in un ambiente professionale
- Come funziona il guacamole
- Guacamole: Installazione
- Guacamole-Server|Client: configurazione
- Utilizzo del guacamole
- Accedi/Utilizza con un account del fornitore di servizi
- Segui le sessioni
- Cronologia della sessione
- Registrazioni video
- Conclusione
Cos’è il guacamole?
No, in questo tutorial non vi parlerò della ricetta della salsa di avocado, per essere più precisi, parleremo di Apache Guacamole che è una soluzione clientless per gateway desktop remoto.
Per darti una semplice introduzione ad Apache Guacamole, si tratta di una soluzione Open Source gratuita che consente di impostare l’accesso remoto tramite un portale web su diversi dispositivi.
Al momento della stesura di questo tutorial, sono supportati i seguenti protocolli:
- RDP
- SSH
- Telnet
- VNC
Attraverso il portale web è possibile gestire più utenti e connessioni, raggrupparli in gruppi, configurare vincoli di accesso (tempo, numero di connessioni, ecc.) e registrare le sessioni su video.
Il guacamole viene spesso presentato come una soluzione da usare a casa per poter accedere al computer tramite un browser…
Mi concentrerò sull’uso professionale per impostare una soluzione “bastion” / PAM (Privileged Access Management)
Utilizzo del guacamole in un ambiente professionale
Ciò che mi interessa qui è perché e come utilizzare Guacamole in un ambiente professionale per gestire l’accesso ai fornitori di servizi e proteggerli.
Oggi molte aziende si trovano ad affrontare il problema di come gestire i fornitori di servizi e, soprattutto, di come garantire loro l’accesso al sistema informativo più sicuro possibile.
La soluzione è Bastion, una soluzione software di accesso remoto che ti consentirà di gestire tutto questo gestendo gli account, limitandone l’accesso e aggiungendo vari livelli di sicurezza.
Il problema delle soluzioni bastion è il loro costo, che può rapidamente trasformarsi in un vero ostacolo alla loro adozione.
Senza una soluzione di bastione, le aziende continuano a fare ciò che possono e spesso si “sottopongono” alle modalità operative dei fornitori di servizi:
- Molteplici soluzioni di controllo remoto (Teamviewer, AnyDesk, Remote Desktop, VPN, ecc.)
- Spesso le password vengono fornite ai fornitori di servizi.
- Nessun monitoraggio degli accessi
- Controllo scarso o nullo sugli orari di accesso
- …
Il guacamole ci permetterà di rispondere in parte a queste problematiche:
- Soluzione unica per la connessione al sistema informativo tramite browser Internet
- Poiché è possibile configurare le connessioni alle apparecchiature (SSH, RDP) indicando gli identificativi, non è più necessario comunicarli, è sufficiente fornire gli identificativi di accesso al portale web che devono essere diversi. Questa soluzione consente inoltre di limitare il rimbalzo dei fornitori di servizi su altre apparecchiature.
- Tutti gli accessi vengono registrati in Guacamole, così è facile tracciare l’attività del provider ed è possibile registrare video delle sessioni.
- È possibile configurare orari di accesso sugli account, evitando così determinati overflow.
Come funziona il guacamole
Non entrerò nei dettagli su come funziona il Guacamole, ecco uno schema per darvi un’idea:
Apache Guacamole è composto da 2 componenti principali:
- Guacamole Server: fornisce tutti i componenti nativi e lato server richiesti da Guacamole per connettersi ai desktop remoti.
- Guacamole Client: si tratta di un’applicazione web HTML5 e di un client che consente di connettersi ai server/desktop remoti. Questa funzionalità è supportata dal server Tomcat.
Adesso vedremo come installare Guacamole.
Guacamole: Installazione
Per questo tutorial ho utilizzato una nuova installazione di Ubuntu Server 20.04.
In questo tutorial collegheremo Guacamole a MySQL per gestire gli account utente e le connessioni.
Per iniziare, installeremo i vari prerequisiti sul server.
Poiché è necessario compilare Guacamole, è necessario installare make.
sudo apt install make -y
Di default make non è installato sulla versione Ubuntu Server 20.04
Adesso installeremo i prerequisiti utilizzando il comando seguente:
sudo apt install gcc g++ libcairo2-dev libjpeg-turbo8-dev libpng-dev libtool-bin libossp-uuid-dev libavcodec-dev libavformat-dev libavutil-dev libswscale-dev freerdp2-dev libpango1.0-dev libssh2-1-dev libvncserver-dev libtelnet-dev libssl-dev libvorbis-dev libwebp-dev libpango1.0-dev libwebsockets-dev libpulse-dev -y
Se vuoi maggiori informazioni sui prerequisiti, qui è spiegato tutto : Chapter 2. Installing Guacamole natively (apache.org)
Installazione di Guacamole-Server
Adesso installeremo il primo componente del server guacamole.
Al momento della stesura di questo tutorial, la versione disponibile di Guacamole è 1.3.0
Carica l’archivio sul server:
wget https://downloads.apache.org/guacamole/1.3.0/source/guacamole-server-1.3.0.tar.gz
Decomprimi l’archivio:
tar xzf guacamole-server-1.3.0.tar.gz
Vai alla cartella appena decompressa:
cd guacamole-server-1.3.0/
Verificheremo ora che tutte le dipendenze necessarie siano installate sul server utilizzando configure:
sudo ./configure --with-init-dir=/etc/init.d
Paltro ottieni aiuto esegui comando : .
/configure --help
Se tutto è a posto, tutti i protocolli dovrebbero essere impostati su yes.
Adesso compileremo e installeremo Guacamole-Server.
sudo make
Facilità :
sudo make install
Ora eseguiamo il comando ldconfig per creare i diversi collegamenti con le librerie.
sudo ldconfig
Attiva il servizio:
sudo systemctl enable guacd
Avviare il servizio guacd:
sudo systemctl start guacd
Controllare lo stato del servizio (facoltativo):
systemctl status guacd
La parte server di Guacamole è operativa.
Installazione di Guacamole-Client
Il client che fornisce l’interfaccia HTML5 e necessita di Tomcat.
Sul server installare Tomcat utilizzando il comando seguente:
sudo apt install tomcat9 tomcat9-admin tomcat9-common tomcat9-user -y
Verificare che il server Tomcat sia in esecuzione:
systemctl status tomcat9
Creiamo una cartella dove memorizzeremo la configurazione e il client:
sudo mkdir /etc/guacamole
Ora scaricheremo il client e lo memorizzeremo nella cartella appena creata:
sudo wget https://downloads.apache.org/guacamole/1.3.0/binary/guacamole-1.3.0.war -O /etc/guacamole/guacamole.war
È necessario creare un collegamento simbolico a Tomcat9 WebApps per “abilitare l’utilizzo del client”
sudo ln -s /etc/guacamole/guacamole.war /var/lib/tomcat9/webapps/
Affinché l’applicazione possa essere completamente distribuita, è necessario riavviare i servizi:
sudo systemctl restart tomcat9
sudo systemctl restart guacd
Da lì, dovrebbe apparire la finestra di autenticazione. Vai all’URL: http://IP_SERVER:8080/guacamole
Guacamole-Server|Client: configurazione
Ora che i servizi principali sono installati, dobbiamo configurare tutto per farli funzionare insieme.
Crea le cartelle extensions e lib nella cartella /etc/guacamole:
sudo mkdir /etc/guacamole/{extensions,lib}
Aggiungere una variabile d’ambiente:
Soluzione 1:
sudo echo "GUACAMOLE_HOME=/etc/guacamole" /etc/default/tomcat9
Soluzione 2 :
echo "GUACAMOLE_HOME=/etc/guacamole" | sudo tee -a /etc/default/tomcat
Soluzione 3 :
Aprire il file /etc/default/tomcat9 con nano e aggiungere la variabile:Aprire il file /etc/default/tomcat9 con nano e aggiungere la variabile:
sudo nano /etc/default/tomcat9
Alla fine del file aggiungere:
GUACAMOLE_HOME=/etc/guacamole
Da qui in poi, nella configurazione di base, la maggior parte dei tutorial spiega come configurare il client con il server e come gestire un file di mapping. Come promemoria, nell’introduzione ho spiegato che utilizzeremo MySQL/MariaDB
Installa MariaDB o MySQL sul server:
sudo apt install mariadb-server mariadb-client
Ora dobbiamo creare un utente e il database, iniziamo connettendoci al server del database:
sudo mysql
Esegui le query seguenti per modificare almeno la password:
CREATE DATABASE guacamole_db;
CREATE USER 'guacamole_user'@'localhost' IDENTIFIED BY 'P@$sW0rd';
GRANT SELECT,INSERT,UPDATE,DELETE ON guacamole_db.* TO 'guacamole_user'@'localhost';
FLUSH PRIVILEGES;
quit;
Scarica l’estensione mysql per Guacamole:
wget http://apache.mirror.digionline.de/guacamole/1.3.0/binary/guacamole-auth-jdbc-1.3.0.tar.gz
Decomprimi l’archivio:
tar vfx guacamole-auth-jdbc-1.3.0.tar.gz
Aggiungere le tabelle necessarie al database creato:
cat guacamole-auth-jdbc-1.3.0/mysql/schema/*.sql | sudo mysql guacamole_db
Installazione dell’estensione:
sudo cp guacamole-auth-jdbc-1.3.0/mysql/guacamole-auth-jdbc-mysql-1.3.0.jar /etc/guacamole/extensions/
Scarica il driver JDBC:
wget https://dev.mysql.com/get/Downloads/Connector-J/mysql-connector-java-8.0.13.tar.gz
Decomprimi l’archivio:
tar xvzf mysql-connector-java-8.0.13.tar.gz
Installa (copia) il driver per Guacamole:
sudo cp mysql-connector-java-8.0.13/mysql-connector-java-8.0.13.jar /etc/guacamole/lib/
Ora possiamo passare alla configurazione del client per l’utilizzo del database.
Creare il file di configurazione:
sudo nano /etc/guacamole/guacamole.properties
Aggiungi la configurazione sottostante adattandola al tuo ambiente (mysql-):
# Hostname and Guacamole server port
guacd-hostname: localhost
guacd-port: 4822
# MySQL properties
mysql-hostname: localhost
mysql-port: 3306
mysql-database: guacamole_db
mysql-username: guacamole_user
mysql-password: P@$sW0rd
La configurazione è completa, collega la cartella di configurazione a Tomcat:
sudo ln -s /etc/guacamole /usr/share/tomcat9/.guacamole
Riavviare i servizi:
sudo systemctl restart tomcat9
sudo systemctl restart guacd
Facoltativo: creare una cartella guacamole nella cartella /var per archiviare le registrazioni video
sudo mkdir /var/guacamole
L’installazione e la configurazione di base sono completate, ora vedremo come utilizzare Guacamole.
Utilizzo del guacamole
Ricordiamo che per accedere a Guacamole da un browser web, vai all’indirizzo: http://IP_SERVER:8080/guacamole
Le credenziali predefinite sono: guacadmin:guacadmin
Una volta connessi, si arriva a una pagina che normalmente mostra le ultime connessioni utilizzate e le connessioni che l’utente può utilizzare.
Per accedere alle impostazioni di Guacamole, clicca sul nome utente 1 per aprire il menu a discesa e clicca su Impostazioni 2.
Per cominciare, ti spiegherò come utilizzare il Guacamole in modo logico, senza mostrartene l’uso diretto.
L’obiettivo, come promemoria, è quello di fornire accesso a fornitori di servizi esterni, quindi baserò i miei gruppi su questo aspetto.
Crea un gruppo di connessione
La prima cosa che vedremo è la creazione di un gruppo di connessione.
Nel menu di navigazione vai su Connessione 1.
Per il momento questa vista è vuota, più avanti troveremo tutte le connessioni configurate e i diversi gruppi.
L’obiettivo ora sarà quello di creare una struttura ad albero per organizzare le connessioni dei fornitori di servizi.
Quello che vi mostro qui è un esempio, poi siete liberi di adattarlo alle vostre esigenze.
Per prima cosa creerò un gruppo Provider, nel quale poi creerò dei sottogruppi che rappresenteranno un provider.
Fare clic sul pulsante Nuovo gruppo 1.
Assegna al gruppo il nome 1, la posizione leave ROOT 2 e il tipo leave Organizational 3. Fare clic sul pulsante Salva 4 per creare il gruppo.
Il gruppo è creato ed è visibile nell’elenco delle connessioni; se lo espandiamo, vediamo che possiamo aggiungere connessioni e sottogruppi. Fare clic su Nuovo gruppo 1.
Per quanto riguarda il gruppo radice, rinominare il gruppo 1 (qui il nome del provider preceduto da GC), il campo Posizione è già selezionato e lasciare il tipo Organizzativo. Fare clic su Salva 2.
Il gruppo è stato aggiunto.
Per illustrare il tutorial, ho aggiunto un secondo gruppo di connessioni per simulare più provider.
Crea un gruppo di utenti
I gruppi di utenti ti permetteranno di raggruppare gli account utente in un gruppo, in modo da poter accedere ai loro dati più facilmente, anziché doverli gestire utente per utente.
Vai al menu Gruppo 1 e clicca su Nuovo gruppo 2.
Assegnare al gruppo il nome 1, selezionare i gruppi di connessione collegati al provider 2 e fare clic su Salva 3.
È fondamentale controllare i gruppi padre, altrimenti non sarà possibile accedere alle connessioni.
In una configurazione di gruppo è possibile aggiungere diritti di amministrazione su Guacamole.
Il gruppo è stato aggiunto.
Ho aggiunto anche un secondo gruppo.
Aggiungi una nuova connessione
Prima di spiegare come aggiungere una connessione, è necessario pensare a una connessione come a un accesso a un dispositivo con una configurazione particolare. Pertanto, è normale avere più connessioni con parametri diversi allo stesso server, a seconda degli accessi e delle informazioni che si desidera fornire al proprio fornitore di servizi.
Andare al menu Connessioni 1, per aggiungere una connessione, tra le varie possibilità, cliccare sul pulsante Nuova connessione 2 o su Nuova connessione 2 che si trova a livello di gruppo.
Configurare una connessione RDP
La prima connessione che configureremo è un accesso RDP a un server Windows.
Poiché i parametri di connessione sono molti, considererò ciascuno di essi come un blocco.
Iniziamo assegnando alla connessione il nome 1 e selezionando il protocollo RDP 2.
Per quanto riguarda il campo Posizione, avendo cliccato su Nuovo Connetti a livello di gruppo, è già selezionato
Nella sezione LIMITI DI CONCORRENZA è possibile limitare il numero di connessioni simultanee, nel contesto di una connessione RDP dove vengono passati gli identificatori, questo non avrà alcun impatto perché lo stesso utente non potrà aprire la connessione più volte . stessa sessione.
Saltiamo le parti LOAD BALANCING e GUACAMOLE PROXY PARAMETERS (GUACD), che devono essere configurate nelle installazioni complesse con più server.
Ci concentreremo ora sulla parte PARAMETRI, anche qui non passerò in rassegna tutte le opzioni disponibili, vi lascio sfogliarle e potrete vedere che possiamo configurare tutti i parametri del client RDP (RDS Gateway, Periferiche di reindirizzamento, Prestazioni …).
Li limiterò al minimo e ti lascerò effettuare i tuoi test, se necessario.
Nella sezione Rete, indicare il nome o l’indirizzo IP dell’host 1 e la porta 2 (3389) per RDP.
Nella sezione Autenticazione indicheremo direttamente l’account da utilizzare per la connessione, evitando così di dover comunicare questa informazione al fornitore del servizio. Inserisci il nome utente 1 e la password 2, seleziona Qualsiasi 3 per il campo Modalità di sicurezza e seleziona la casella Ignora certificato server 4.
L’ultimo elemento di configurazione che ti mostrerò è la registrazione della sessione nella sezione Registrazione dello schermo. Nel campo Percorso di registrazione 1 indica la posizione in cui verranno archiviati (/var/guacamole/) e poi indica il nome della registrazione nel campo Nome registrazione 2.
Salvare la connessione cliccando sul pulsante Salva 1.
La connessione viene aggiunta e memorizzata nel gruppo di connessioni.
Configurare una connessione SSH
Come per la connessione SSH, mi limiterò al minimo, per il resto dei parametri lascio a voi la scelta.
Assegnare alla connessione il nome 1 e selezionare il protocollo SSH 2.
Nella sezione Rete, immettere l’host 1 (IP o FQDN) e indicare la porta (22) 2.
Nella sezione Autenticazione, indica la coppia utente e password 1 in base alla tua policy.
Per quanto riguarda la connessione RDP, nella sezione Registrazione Schermo è possibile configurare la registrazione video della sessione di connessione.
Per concludere, clicca su Salva 1.
La connessione SSH è stata aggiunta e inserita nel gruppo.
Per il tutorial ho aggiunto anche le connessioni al secondo provider, ma questa volta senza indicare gli identificatori.
Modifica una connessione
Per modificare una connessione esistente, è sufficiente cliccarci sopra e si aprirà lo stesso modulo usato per aggiungere una connessione. Dopo aver apportato le modifiche, fare clic su Salva.
Assegnare connessioni ai gruppi
Questa operazione è obbligatoria affinché gli utenti possano avere accesso alle connessioni.
Questa manipolazione mi ha fatto perdere la testa, perché l’ereditarietà non è automatica.
Ritornare alla gestione del gruppo utenti 1 quindi fare clic sul gruppo da modificare 2.
Nella sezione Connessioni 1, seleziona le connessioni create in precedenza 2 e clicca su Salva 3.
Aggiungi un utente (provider)
Ora vedremo come aggiungere un utente e assegnarlo direttamente a un gruppo.
Vai a Gestione utenti 1 e clicca sul pulsante Nuovo utente 2.
Per quanto riguarda gli altri elementi, mi concentrerò sui campi obbligatori.
Inserisci l’ID account 1 e la password 2 (x2), nella sezione GRUPPI, seleziona il/i gruppo/i a cui appartiene l’utente 3 e clicca su Salva 4> >.
L’utente è stato aggiunto.
Ripetere i passaggi per gli altri account e fornitori di servizi.
Accedi/Utilizza con un account del fornitore di servizi
Ora che abbiamo configurato tutto, non ci resta che testare la nostra soluzione “bastione”.
Accedi con un account del fornitore di servizi:
Se nell’account è configurata una sola connessione, questa viene stabilita direttamente.
Arriviamo a una pagina dove possiamo vedere le connessioni recenti (attualmente vuota) e sotto l’elenco delle connessioni disponibili.
Espandi le connessioni e clicca su una per connetterti (inizierò con la connessione RDP).
Attendi la connessione al server…
La connessione al server avviene tramite RDP, senza dover fornire alcun identificativo.
Suggerimento: durante una sessione è possibile navigare tra più connessioni o tornare alla home page tramite un menu “nascosto”. Per visualizzarlo, utilizzare la combinazione di tasti Ctrl+Alt+Maiusc.
Per la connessione SSH è simile:
Tornando alla home page dell’account utente, questa volta vediamo le ultime connessioni utilizzate.
Se sono aperte più sessioni contemporaneamente, è possibile passare rapidamente da una sessione all’altra cliccando in basso a sinistra dello schermo.
Segui le sessioni
L’interesse nell’impostare una soluzione Bastion è anche quello di seguire le sessioni, Guacamole ci offre due soluzioni.
Sessioni correnti
È possibile monitorare le sessioni in corso dall’amministrazione andando al menu Sessioni attive.
Da questa visualizzazione è possibile vedere le connessioni in corso con la possibilità di chiudere una sessione e, ciliegina sulla torta, seguire la diretta e interagire cliccando sul nome della connessione.
Di seguito è riportata un’acquisizione con il monitoraggio della visualizzazione live di una connessione:
Cronologia della sessione
La cronologia della sessione è disponibile in diversi punti:
- Nel menu Cronologia
- Nella modifica di una connessione
Registrazioni video
Se hai abilitato la registrazione delle sessioni, ti spiegherò come utilizzarla.
Ricordiamo che lo storage è stato configurato nella cartella /var/guacamole.
Ecco come appaiono i file:
Di default i file non sono utilizzabili, devono essere convertiti in file video utilizzando il comando seguente:
guacenc -s 1280x720 -r 20000000 -f file-name
Una volta convertito, avremo un file in formato m4v.
Per 10 minuti ho un file da 40 MB
Non resta che scaricare il file e visualizzarlo con un lettore come VLC.
Conclusione
Ora sai come impostare una soluzione Bastion/PAM gratuita con Guacamole. È una buona soluzione per iniziare a proteggere l’accesso quando non è disponibile alcuna soluzione e ti consente di valutare realmente la necessità prima di acquistare una soluzione a pagamento.
In questo tutorial mi sono concentrato sull’accesso del fornitore di servizi, ma è anche possibile utilizzarlo per tutti gli amministratori per gestire l’IS ed evitare l’uso di VPN, Remote Desktop Gateway, ecc.
È possibile aumentare facilmente e gratuitamente il livello di sicurezza impostando un sistema di autenticazione a due fattori.
Prima di procedere con la distribuzione esterna, ti consiglio vivamente di configurare un proxy inverso Apache2 o Nginx sul server per pubblicare Guacamole tramite protocollo HTTPS.