Guacamole: accesso via reverse proxy

Questo articolo illustra brevemente come sia possibile configurare il web server NGINX affinché faccia da reverse proxy per l’applicazione Guacamole in esecuzione su Tomcat.

Installare NGINX

Ci troviamo sempre sulla stessa macchina Debian Buster che abbiamo utilizzato per l’installazione di Tomcat 9 e di Apache Guacamole, pertanto procediamo all’installazione del pacchetto NGINX (ramo mainline) come illustrato sul sito ufficiale:

apt install curl gnupg2 ca-certificates lsb-release
echo "deb http://nginx.org/packages/mainline/debian `lsb_release -cs` nginx" \     | tee /etc/apt/sources.list.d/nginx.list 
curl -fsSL https://nginx.org/keys/nginx_signing.key | apt-key add -
apt-key fingerprint ABF5BD827BD9BF62
apt update
apt install nginx

I comandi precedenti sono stati eseguiti come utente root; se non siete root, dovrete fare uso del comando sudo per tutti quei comandi che lo richiedono.

Configurare NGINX

Appena installato, NGINX è configurato per servire un sito di default che mostra la pagina di benvenuto del server web. Per servire l’applicazione Guacamole possiamo avvalerci di un name-based virtual host opportunamente configurato. Per farlo, è sufficiente creare il file /etc/nginx/conf.d/guacamole.conf con il seguente contenuto:

server {
     listen       80;
     server_name  guacamole.example.com;
     location / {
       proxy_pass http://127.0.0.1:8080/guacamole-1.1.0/;
       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;
     }
 }

Dopo aver riavviato il servizio nginx, se puntiamo il nostro browser alla URL http://guacamole.example.com/ dovremmo vedere la pagina di login di Guacamole. Ovviamente dovete sostituire guacamole.example.com con l’hostname che state usando nel vostro setup ed assicurarvi che tale hostname sia risolto sull’indirizzo IP del server sul quale avete installato NGINX. La configurazione di questo virtual host fa anche qualcosa in più: fa in modo di servire l’applicazione Guacamole sulla root del sito invece che su una sottodirectory. Ulteriori dettagli su questa configurazione li trovate nella documentazione di Guacamole al capitolo 4.

Prima di andare oltre, però, c’è da fare qualche aggiustamento alla configurazione di Tomcat.

Configurazione Tomcat

Siccome stiamo servendo un’applicazione Tomcat dietro un reverse proxy, dobbiamo fare in modo che il servlet container ne sia al corrente; a tale fine dobbiamo dirgli di considerare l’header X-Forwarded-For impostato dal server web (NGINX) affinché le richieste ricevute siano loggate con gli IP dei client e non con l’IP di provenienza reale, che è sempre quello del proxy. Nel file /opt/tomcat9/conf/server.xml aggiungiamo quindi la seguente sezione immediatamente prima della chiusura del tag Host:

<Valve className="org.apache.catalina.valves.RemoteIpValve"
    internalProxies="127.0.0.1"
    remoteIpHeader="x-forwarded-for"
    remoteIpProxiesHeader="x-forwarded-by"
    protocolHeader="x-forwarded-proto" />

Sempre all’interno dello stesso file, sul sito di Guacamole viene suggerito di aggiungere l’attributo URIEncoding="UTF-8" all’interno dell’elemento Connector:

<Connector port="8080" protocol="HTTP/1.1"
    connectionTimeout="20000"
    URIEncoding="UTF-8"
    redirectPort="8443" />

Riavviando il servizio tomcat, tutto dovrebbe funzionare come atteso.

Utilizzando il sito, accetti l'utilizzo dei cookie da parte nostra. maggiori informazioni

Questo sito utilizza i cookie per fornire la migliore esperienza di navigazione possibile. Continuando a utilizzare questo sito senza modificare le impostazioni dei cookie o cliccando su "Accetta" permetti il loro utilizzo.

Chiudi