Hola, hoy veremos cómo instalar, configurar y usar Apache Guacamole, una herramienta que nos permite conectarnos remotamente por web mediante protocolos cómo SSH, RDP, VNC.
¿Qué es Apache Guacamole?
Apache Guacamole es una herramienta libre y Open-Source que nos permite conectarnos remotamente a un servidor mediante el navegador web sin necesidad de usar un cliente.
Gracias a HTML5, una vez tengamos instalado y configurado Apache Guacamole, tan solo tenemos que conectarnos mediante el navegador web para empezar a trabajar remotamente.
¿Qué es Tomcat?
Apache Guacamole no es una aplicación web autónoma y está compuesta de muchas partes. La aplicación web en realidad está diseñada para ser simple y mínima.
Una de esas partes, y esencial, es Tomcat. Tomcat es una especie de contenedor de ServLets que nos permite ejecutar herramientas desarrolladas con Java Server Page (JSP).
Para poder usar aplicaciones con Tomcat, este las “comprime” en ficheros .war.
¿Qué es un fichero .war?
Un fichero .war es una Aplicación Web que permite a Tomcat acceder a su utilización. El fichero .war en sí no es legible sino que tiene que ser expandido/descomprimido para ser leído.
Instalación de Guacamole-server
Comezamos con la instalación de Apache Guacamole-Server. Primero debemos instalar los paquetes mínimos necesarios, después podrémos elegir qué protocolos usar según nuestras necesidades.
Instalamos los paquetes principales necesarios:
root@guacamole:~# apt install libcairo2-dev libjpeg62-turbo-dev libpng-dev libossp-uuid-dev gcc make tomcat9 tomcat9-admin tomcat9-user
Ahora podemos elegir, según nuestras necesidades, qué paquetes instalar:
Usar Guacenc:
apt install libavcodec-dev libavutil-dev libswscale-dev
Usar el soporte para RDP:
apt install freerdp2-dev
Usar el soporte para SSH:
apt install libpango1.0-dev libssh2-1-dev
Usar el soporte para telnet:
apt install libpango1.0-dev libtelnet-dev
Usar el soporte para VNC y el audio:
apt install libvncserver-dev libpulse-dev
Usar el soporte para OpenSSL (es necesario si usamos el soporte de SSH para manejar las claves públicas y privadas):
apt install libssl-dev
Usar soporte para Ogg Vorbis:
apt install libvorbis-dev
Usar soporte para WebP:
apt install libwebp-dev
En otro post recomiendan esta instalación
apt install build-essential libcairo2-dev libjpeg62-turbo-dev libpng-dev libtool-bin libossp-uuid-dev libvncserver-dev freerdp2-dev libssh2-1-dev libtelnet-dev libwebsockets-dev libpulse-dev libvorbis-dev libwebp-dev libssl-dev libpango1.0-dev libswscale-dev libavcodec-dev libavutil-dev libavformat-dev
En mi caso, instalaré las librerias para usar SSH, Guancec VNC y RDP quedando así el comando con los paquetes a instalar:
root@guacamole:~# apt install libavcodec-dev libavutil-dev libswscale-dev libpango1.0-dev libssh2-1-dev libssl-dev freerdp2-dev libvorbis-dev libpulse-dev
Nos descargamos la última versión de guacamole server y lo descomprimimos
root@guacamole:/usr/src# tar xvzf guacamole-server-1.3.0.tar.gz root@guacamole:/usr/src# cd guacamole-server-1.3.0/
Luego lo instalamos
root@guacamole:/usr/src/guacamole-server-1.3.0# ./configure --with-init-dir=/etc/init.d --enable-allow-freerdp-snapshots root@guacamole:/usr/src/guacamole-server-1.3.0# make root@guacamole:/usr/src/guacamole-server-1.3.0# make install
Una vez terminada la instalación, actualizamos las librerías instaladas en el sistema:
root@guacamole:/usr/src/guacamole-server-1.3.0# ldconfig
Y habilitamos y reiniciamos los servicios
root@guacamole:/usr/src/guacamole-server-1.3.0# systemctl daemon-reload && systemctl start guacd && systemctl enable guacd && systemctl status guacd
Instalación de Guacamole-client
Procedemos a la instalación del cliente. Este tenemos que instalarlo en el mismo equipo que el servidor ya que será el que nos dé el fichero .war.
Nos descargamos el cliente desde su web de descargas y desempaquetamos el fichero:
root@guacamole:/usr/src# tar xvzf guacamole-client-1.3.0.tar.gz
Para poder desplegar guacamole client, necesitaremos instalar el paquete correspondiente al comando que deberemos utilizar para crear el .war y el kit de desarrollo de java 11:
root@guacamole:/usr/src# apt install maven openjdk-11-jdk root@guacamole:/usr/src# export JAVA_HOME=/usr/lib/jvm/java-11-openjdk-amd64/
Creamos el fichero .war de guacamole-client:
root@guacamole:/usr/src# cd guacamole-client-1.3.0/ root@guacamole:/usr/src/guacamole-client-1.3.0# mvn package
Ahora copiamos renombrando el nombre del .war en el tomcat9:
root@guacamole:/usr/src/guacamole-client-1.3.0# cp guacamole/target/guacamole-1.3.0.war /var/lib/tomcat9/webapps/guacamole.war
Y reiniciamos tomcat
root@guacamole:~# service tomcat9 restart
Configuración de Guacamole Server
Creamos un directorio de configuración para guacamole, nos vamos ahí y creamos el fichero guacamole.properties
root@guacamole:~# mkdir /etc/guacamole root@guacamole:~# cd /etc/guacamole root@guacamole:/etc/guacamole# touch guacamole.properties
Editamos el fichero y agregamos las siguientes lineas:
# Hostname and port of guacamole proxy guacd-hostname: localhost guacd-port: 4822 # Auth provider class (authenticates user/pass combination, needed if using the provided login screen) auth-provider: net.sourceforge.guacamole.net.basic.BasicFileAuthenticationProvider basic-user-mapping: /etc/guacamole/user-mapping.xml
Ahora creamos un enlace simbólico al directorio creado en /usr/share/tomcat8 :
root@guacamole:/etc/guacamole# mkdir /usr/share/tomcat9/.guacamole root@guacamole:/etc/guacamole# ln -s guacamole.properties /usr/share/tomcat9/.guacamole/
Continuamos creando el fichero user-mapping.xml en /etc/guacamole con el siguiente contenido:
Dónde:
Authorize tag: define los usuarios que iniciarán sesión en la interfaz web.
Connection tag: define el nombre de la conexión
Protocol tag: define los protocolos que el usuario podrá usar.
Param tag: define hostname del cliente que se conectará, puerto a usar y usuario al que podrá conectarse.
La contraseña del usuario usuario la hemos sacado con:
En la imagen podemos ver la configuración para un ssh, un vnc y un rdp (éste último no funciona y lo de modificar el registro de windows que pongo en un link al pie, tampoco ha funcionado, así que le he metido tightvnc al windows y conecto el guacamole al windows por VNC)
root@guacamole:/etc/guacamole# printf '%s' "" | md5sum
Modificamos permisos, propietario y grupo propietario del fichero user-mapping.xml:
root@guacamole:/etc/guacamole# chmod 600 user-mapping.xml root@guacamole:/etc/guacamole# chown tomcat:tomcat user-mapping.xml
Reiniciamos tomcat y guacd:
root@guacamole:/etc/guacamole# service tomcat9 restart
root@guacamole:/etc/guacamole# service guacd restart
Ahora a partir de aquí, ya podemos acceder por el interfaz web en el puerto 8080 y acceder con el usuario y contraseña que hayamos indicado. Podemos configurar varios servicios a la vez, esto hará que nos aparezca un menu de inicio donde podemos conectar con las distintas máquinas que tenemos configuradas.
http://ipservidor:8080/guacamole
En mi caso presento el guacamole a través del frontal de nginx, aquí os dejo la configuración que he usado para hacer el reverse proxy:
server { listen 80; server_name guacamole.capa8.net; return 301 https://guaka.capa8.net$request_uri; #root /var/www/html/; include snippets/certbot.conf; } # 2021/03/24 - Apache Guacamole Capa8 server { server_name guacamole.capa8.net; include snippets/certbot.conf; listen 443 ssl; ssl_certificate /etc/letsencrypt/live/guacamole.capa8.net/fullchain.pem; ssl_certificate_key /etc/letsencrypt/live/guacamole.capa8.net/privkey.pem; include /etc/letsencrypt/options-ssl-nginx.conf; ssl_trusted_certificate /etc/letsencrypt/live/guacamole.capa8.net/chain.pem; location / { proxy_pass http://your-ip:8080/guacamole/; 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; access_log off; } }
Aquí un par de capturas de pantalla del guacamole que acabo de montar
Dejo algunos links de referencia que creo que os pueden ser útiles:
– Instalación y configuración de Apache Guacamole en Debian Stretch (openbinary20)
– Set Up Apache Guacamole Remote Desktop on Debian 10 Buster (linuxbabe)
– Configuring guacamole (documentación oficial apache guacamole)
proxy http (nginx)
– Proxying guacamole (documentación oficial apache guacamole)
RDP
– Configuring guacamole (documentación oficial apache guacamole)
– Apache Guacamole: How To Install and Configure (fortynorthsecurity)
– Make Windows 10/Server 2016 RDP work with Guacamole (mangolassi.it)
https://kifarunix.com/how-to-install-tomcat-9-on-debian-12/ (el cliente en la versión 1.5.5 no soporta aún tomcat10 que es el que está en debian12, es necesario instalar tomcat9 a mano)