Cómo instalar Apache Guacamole en Debian 11
Apache Guacamole es una pasarela de escritorio remoto gratuita y de código abierto que te permite conectarte a tu ordenador/servidor de forma remota utilizando diferentes protocolos como SSH, RDP y VNC. Apache Guacamole está mantenido por la Fundación de Software Apache, y tiene una licencia Apache 2.0.
Apache Guacamole es una pasarela de escritorio remoto sin clientes. Puedes acceder a Apache Guacamole utilizando sólo un navegador web desde cualquier lugar y en cualquier momento. Se recomienda utilizar Apache Guacamole si tienes varios sistemas operativos remotos con diferentes protocolos, como Windows con RDP, sistema Linux con VNC y SSH.
En este tutorial, instalarás y configurarás Apache Guacamole en un Debian 11 Bullseye. Esto incluye la instalación de algunas dependencias de los paquetes y de Apache Tomcat 9, luego la construcción del servidor Guacamole y la instalación de la aplicación Java, la aplicación web Guacamole. Al final, configurarás Nginx como proxy inverso para la aplicación web Guacamole que te permitirá acceder a tus servidores desde cualquier lugar, siempre que tengas un navegador web.
Requisitos previos
Para completar este tutorial, necesitarás los siguientes requisitos
- Un servidor con al menos 2 GB de RAM que ejecute Debian 11 Bullseye.
- Un usuario de uso o no root con privilegios de root.
- Conocimientos básicos con el editor nano. O puedes utilizar tu editor preferido, como vim.
Instalación de las dependencias de compilación
Al principio, instalarás algunas dependencias de construcción para construir el servidor Apache Guacamole. Esto incluye algunos paquetes básicos como‘libvncserver-dev‘ que permite soportar el protocolo VNC,‘libssh2-1‘ para el protocolo SSH,‘freerdp2-dev‘ para el protocolo RDP, y‘libwebsockets-dev‘ para el soporte de Kubernetes.
Por consideración, no instalarás ‘libtelnet-dev’ para el soporte de Telnet. Esto se debe a que telnet se considera un protocolo antiguo y no es seguro.
1. Ahora, actualiza tu lista de paquetes ejecutando el siguiente comando apt.
sudo apt update
2. Después, instala las dependencias para construir el servidor Apache Guacamole ejecutando el siguiente comando.
sudo apt install -y freerdp2-dev libavcodec-dev libavformat-dev libavutil-dev libswscale-dev libcairo2-dev libjpeg62-turbo-dev libjpeg-dev libpng-dev libtool-bin libpango1.0-dev libpango1.0-0 libssh2-1 libwebsockets16 libwebsocketpp-dev libossp-uuid-dev libssl-dev libwebp-dev libvorbis-dev libpulse-dev libwebsockets-dev libvncserver-dev libssh2-1-dev openssl
Este comando puede tardar un poco en terminar, dependiendo de la conexión a Internet de tu servidor.
Instalar Apache Tomcat 9
Después de instalar las dependencias de construcción, instalarás el Apache Tomcat 9. Este paquete es necesario para la aplicación web Guacamole, que es una aplicación web escrita en Java.
1. Ejecuta el siguiente comando para instalar el Apache Tomcat 9 en tu sistema.
sudo apt install -y tomcat9 tomcat9-admin tomcat9-common tomcat9-user
2. Una vez instalado Apache Tomcat 9, inicia y habilita el servicio Apache Tomcat ejecutando el siguiente comando. En los sistemas basados en Debian, Apache Tomcat 9 viene con el servicio llamado‘tomcat9‘.
sudo systemctl enable --now tomcat9
3. Ahora, si todo parece correcto, verifica el estado del servicio ‘tomcat9‘ ejecutando el comando que aparece a continuación.
sudo systemctl status tomcat9
Recibirás la siguiente salida. Asegúrate de que el servicio ‘tomcat9‘ está‘activo (en ejecución)‘.
Compilación de Guacamole-server
En esta sección, descargarás y compilarás el servidor Guacamole. Este es el componente principal de Apache Guacamole, que contiene bibliotecas para conectarse a servidores y escritorios remotos. El Guacamole-servidor contiene la biblioteca C ‘libguacd’ y todas las bibliotecas para los protocolos soportados, así como el corazón de Guacamole, guacd.
El guacd se encarga de todas las conexiones de los clientes que se canalizan desde la aplicación web de Guacamole, y luego se conecta a los servidores y escritorios remotos en su nombre. Al construir y compilar Guacamole-server, tendrás un nuevo servicio ‘guacd’ en tu sistema.
1. Empieza navegando por el directorio de trabajo a‘/usr/src‘. Todo el código fuente para construir y compilar cosas va a este directorio.
cd /usr/src
2. Ahora, descargarás el código fuente de Guacamole-server ejecutando el siguiente comando wget. Asegúrate de comprobar la página de descargas de Guacamole y de copiar la última versión de Guacamole-server. En el momento de escribir esto, la última versión es la 1.3.0.
wget https://dlcdn.apache.org/guacamole/1.3.0/source/guacamole-server-1.3.0.tar.gz
3. A continuación, extrae el código fuente y obtendrás un nuevo directorio‘guacamole-server-VERSION-NUMBER’. Navega hasta ese directorio.
tar -xzvf guacamole-server-1.3.0.tar.gz
cd guacamole-server-*/
4. Ahora, verifica todos los requisitos del sistema para construir el servidor Guacamole y configura tu entorno ejecutando el siguiente comando. La opción‘–with-systemd-dir=/etc/systemd/system/’ se utiliza para configurar el archivo de servicio systemd, que estará disponible en el directorio‘/etc/systemd/system/‘.
./configure --with-systemd-dir=/etc/systemd/system/
Recibirás una salida similar a esta:
------------------------------------------------
guacamole-server version 1.3.0
------------------------------------------------
Library status:
freerdp2 ............ yes
pango ............... yes
libavcodec .......... yes
libavformat.......... yes
libavutil ........... yes
libssh2 ............. yes
libssl .............. yes
libswscale .......... yes
libtelnet ........... no
libVNCServer ........ yes
libvorbis ........... yes
libpulse ............ yes
libwebsockets ....... yes
libwebp ............. yes
wsock32 ............. no
Protocol support:
Kubernetes .... yes
RDP ........... yes
SSH ........... yes
Telnet ........ no
VNC ........... yes
Services / tools:
guacd ...... yes
guacenc .... yes
guaclog .... yes
FreeRDP plugins: /usr/lib/x86_64-linux-gnu/freerdp2
Init scripts: no
Systemd units: /etc/systemd/system/
Type "make" to compile guacamole-server.
Echa un vistazo a las secciones«Estado de las bibliotecas» y«Soporte de protocolos». Puedes ajustar el soporte de los protocolos instalando dependencias y bibliotecas adicionales.
5. A continuación, compila e instala el servidor Guacamole ejecutando el siguiente comando.
make
make install
El proceso de compilación e instalación puede tardar algún tiempo en completarse.
6. Ahora, una vez completado todo, ejecuta el siguiente comando para aplicar todas las nuevas bibliotecas del sistema.
sudo ldconfig
En esta sección, has instalado el paquete Guacamole-server. A continuación, crearás algunas configuraciones necesarias para el Guacamole-server.
Configuración de Guacamole-Server
Para que Guacamole-server funcione, crearás el directorio de configuración‘/etc/guacamole/‘, luego crearás un nuevo archivo‘guacamole.properties‘ como configuración por defecto de Guacamole-server, el archivo‘logback.xml’ para el sistema de registro de Guacamole, y el archivo‘user-mapping.xml’ para definir la autenticación de los usuarios de Guacamole y las conexiones a los servidores y escritorios remotos.
1. Para empezar, ejecuta el siguiente comando para crear un nuevo directorio‘/etc/guacamole/‘ con los directorios adicionales‘extensions‘ y‘lib ‘ dentro. A continuación, añade la variable de entorno‘GUACAMOLE_HOME=/etc/guacamole‘ al archivo ‘/etc/default/tomcat9’. Esto le dirá al contenedor de servlets de Tomcat 9 que busque el directorio ‘GUACAMOLE_HOME‘ en ‘/etc/guacamole/‘.
mkdir -p /etc/guacamole/{extensions,lib}
echo 'GUACAMOLE_HOME=/etc/guacamole' >> /etc/default/tomcat9
2. Ahora, crea la configuración principal‘guacamole.properties‘ utilizando nano o tu editor preferido.
sudo nano /etc/guacamole/guacamole.properties
Introduce la siguiente configuración:
# Hostname and port of guacamole proxy
guacd-hostname: localhost
guacd-port: 4822
# user mapping and user connections
user-mapping: /etc/guacamole/user-mapping.xml
- La opción ‘guacd-hostname’ define el nombre de host o la dirección IP en la que se ejecutará el servicio guacd. Este tutorial utiliza el localhost para ejecutar el servicio guacd.
- La opción ‘guacd-port‘ define el puerto por defecto para el servicio guacd. Este tutorial utiliza el puerto‘4822‘ para el servicio guacd.
- La opción ‘user-mapping’ define la configuración del archivo para la autentificación de los usuarios y la lista de conexiones disponibles. Este tutorial utiliza el archivo ‘/etc/guacamole/user-mapping.xml ‘ para definir usuarios y conexiones para el servidor Guacamole. Puede que te interese utilizar otro método de autenticación, consulta la documentación de Guacamole.
Guarda y cierra el archivo.
3. A continuación, crea una nueva configuración‘loogback.xml‘ para el registro y la depuración. Por defecto, el Guacamole sólo registrará en la consola. El uso de esta configuración permite a Guacamole registrar a través del marco de registro Logback.
sudo nano /etc/guacamole/logback.xml
Añade las siguientes líneas de configuración.
<configuration>
<!-- Appender for debugging -->
<appender name="GUAC-DEBUG" class="ch.qos.logback.core.ConsoleAppender">
<encoder>
<pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern>
</encoder>
</appender>
<!-- Log at DEBUG level -->
<root level="debug">
<appender-ref ref="GUAC-DEBUG"/>
</root>
</configuration>
Guarda y cierra el archivo de configuración.
4. Ahora, generarás un nuevo hash de contraseña md5 y crearás un nuevo archivo para la autenticación de usuarios y conexiones de Guacamole.
Ejecuta el siguiente comando para generar el hash de contraseña md5. Y asegúrate de cambiar la contraseña por tu contraseña fuerte.
echo -n StrongPasswordUserJohnDoe | openssl md5
Recibirás una salida de la contraseña con hash md5. Cópiala en tu nota.
(stdin)= aca22211ffcfb8aa8ad7627195ad4fce
5. Después, crea un nuevo archivo‘user-mapping.xml‘ utilizando el editor nano.
sudo nano /etc/guacamole/user-mapping.xml
Introduce las siguientes configuraciones. Y asegúrate de cambiar el ‘nombre de usuario’ y la‘contraseña‘. Además, echa un vistazo a la sección ‘<conexión>…</conexión>‘ y añade los detalles de tu conexión a servidores o escritorios.
<user-mapping>
<!-- Another user, but using md5 to hash the password
(example below uses the md5 hash of "PASSWORD") -->
<authorize
username="johndoe"
password="aca22211ffcfb8aa8ad7627195ad4fce"
encoding="md5">
<!-- First authorized connection -->
<connection name="SSH localhost">
<protocol>ssh</protocol>
<param name="hostname">localhost</param>
<param name="port">22</param>
<param name="username">johndoe</param>
<param name="password">SSHPASSWORD</param>
</connection>
<!-- Second authorized connection -->
<connection name="localhost">
<protocol>vnc</protocol>
<param name="hostname">localhost</param>
<param name="port">5901</param>
<param name="password">VNCPASS</param>
</connection>
<!-- Third authorized connection -->
<connection name="otherhost">
<protocol>vnc</protocol>
<param name="hostname">otherhost</param>
<param name="port">5900</param>
<param name="password">VNCPASS</param>
</connection>
</authorize>
</user-mapping>
Guarda y cierra el archivo.
Ahora has completado la configuración de Guacamole-servidor. A continuación, instalarás y configurarás la aplicación web de Guacamole, que es la aplicación web que verás en tu navegador.
Instalación de la aplicación web cliente de Guacamole
En esta sección, instalarás la aplicación web Guacamole en tu sistema. Esto puede hacerse descargando el archivo binario compilado de la aplicación web Guacamole y desplegándolo en el directorio ‘webaps’ de Tomcat.
1. Navega por tu directorio de trabajo hasta‘/usr/src’ y descarga la aplicación web Guacamole ‘.war‘ compilada utilizando el comando wget. Asegúrate de visitar la página de descarga de Guacamole y copia el enlace de la última versión de la aplicación web Guacamole.
cd /usr/src
wget https://dlcdn.apache.org/guacamole/1.3.0/binary/guacamole-1.3.0.war
2. Ahora, despliega la aplicación binaria Java‘guacamole-VERSION.war’ en el directorio de Tomcat‘/var/lib/tomcat9/webapps/ ‘ ejecutando el siguiente comando. Esto hace que la aplicación web Guacamole sea accesible a través del contenedor de servlets Apache Tomcat.
sudo cp guacamole-1.3.0.war /var/lib/tomcat9/webapps/guacamole.war
3. Después, reinicia el servicio Tomcat 9 para aplicar una nueva aplicación web.
sudo systemctl restart tomcat9
4. A continuación, inicia y habilita el servicio«guacd» ejecutando el siguiente comando.
sudo systemctl enable --now guacd
A continuación, verifícalo con el siguiente comando.
sudo systemctl status guacd
Recibirás una salida como la de la siguiente captura de pantalla.
Llegados a este punto, has completado la instalación de la aplicación Guacamole-servidor (backend) y la aplicación web Guacamole (front-end). A continuación, configurarás Nginx como proxy inverso para la aplicación web Guacamole.
Configurar el proxy inverso Nginx para Guacamole
En esta sección, instalarás el servidor web Nginx y lo configurarás como proxy inverso para la aplicación web Guacamole. Esto te permitirá configurar el nombre de dominio para tu aplicación web Guacamole y asegurarla con certificados SSL.
1. Para empezar, ejecuta el siguiente comando‘apt‘ para instalar los paquetes de Nginx.
sudo apt install nginx -y
2. Una vez instalados todos los paquetes Nginx, crea un nuevo archivo de host virtual ‘guacamole’ en el directorio‘/etc/nginx/sites-available‘. Todas las configuraciones relacionadas con el proxy inverso Guacamole se almacenarán en este archivo.
sudo nano /etc/nginx/sites-available/guacamole
Introduce la siguiente configuración. Y asegúrate de cambiar el nombre del dominio y la ruta de los certificados SSL. Este ejemplo utiliza el dominio«ejemplo.io» con la clave privada SSL«privkey.pem» y la clave pública«fullchain.pem«, y los certificados bot disponibles en el directorio «/etc/letsencrypt/live/exmaple.io/».
server {
listen 80;
server_name example.io;
rewrite ^ https://$server_name$request_uri? permanent;
}
server {
listen 443 ssl http2;
server_name example.io;
root /var/www/html;
index index.html;
location / {
try_files $uri $uri/ =404;
}
ssl_certificate /etc/letsencrypt/live/example.io/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/example.io/privkey.pem;
access_log /var/log/nginx/guacamole-access.log;
error_log /var/log/nginx/guacamole-error.log;
location /guacamole/ {
proxy_pass http://127.0.0.1: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;
}
}
Guarda y cierra el archivo.
3. Ahora, activa el archivo de host virtual‘guacamole‘ creando un nuevo enlace simbólico al directorio ‘/etc/nginx/sites-enabled/‘. A continuación, verifica todas las configuraciones de Nginx para comprobar si hay algún error de sintaxis.
sudo ln -s /etc/nginx/sites-available/guacamole /etc/nginx/sites-enabled/
sudo nginx -t
Recibirás una salida‘Sintaxis OK‘, lo que significa que la configuración no tiene ningún error.
4. A continuación, reinicia el servicio Nginx para aplicar una nueva configuración, y luego verifica su estado ejecutando el siguiente comando.
sudo systemctl restart nginx
sudo systemtl status nginx
Recibirás una salida similar a la de la captura de pantalla siguiente El servicio Nginx está«activo (en ejecución)«.
5. Además, si quieres desplegar la aplicación webGuacamole en una sub-URL diferente, cambia la opción ‘location/guacamole/ { …}‘ por la nueva ruta ‘location/new-path/{ …}‘ y añade la opción‘proxy_cookie_path‘ a tu nueva ruta como se indica a continuación.
location /new-path/ {
proxy_pass http://127.0.0.1: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;
proxy_cookie_path /guacamole/ /new-path/;
access_log off;
}
En esta sección, has completado la instalación y configuración de Nginx como proxy inverso para la aplicación web Guacamole. En este punto, tu instalación de Apache Guacamole está completada, y es accesible desde tu nombre de dominio.
Verificar la instalación de Apache Guacamole
En esta sección, verificarás la instalación de Apache Guacamole.
En primer lugar, abre tu navegador web y escribe el nombre de dominio de tu instalación de Guacamole con la ruta por defecto‘/guacamole‘.
Ahora, verás la página de inicio de sesión de Guacamole que aparece a continuación. Introduce el nombre de usuario y la contraseña que has configurado en el archivo‘user-mapping.xml‘, y haz clic en el botón de inicio de sesión.
Después de iniciar la sesión, verás una lista de conexiones definidas para tus usuarios.
Haz clic en el nombre de la conexión para conectarte al servidor de destino. En este ejemplo se conectará al servidor local con el protocolo SSH.
Ahora, verás una nueva sesión de terminal ssh en tu servidor.
Conclusión
¡Enhorabuena! En este tutorial, has aprendido a instalar Apache Guacamole en Debian 11 Bullseye. Además, has aprendido a configurar la autenticación de usuarios y las conexiones mediante el archivo de configuración‘user-mapping.xml‘ y a configurar Nginx como proxy inverso para la aplicación web Guacamole, lo que te permite ejecutar Guacamaloe utilizando el nombre de dominio y asegurarlo mediante certificados SSL.