Cómo crear una pasarela de escritorio remoto mediante Apache Guacamole en AlmaLinux 9
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 distintos protocolos como SSH, RDP y VNC. Apache Guacamole está mantenido por Apache Software Foundation, y licenciado con Apache License 2.0.
Apache Guacamole es una pasarela de escritorio remoto sin cliente. 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 distintos protocolos, como Windows con RDP, sistema Linux con VNC y SSH.
En esta guía, te guiaremos a través de la instalación de Apache Guacamole como Pasarela de Escritorio Remoto en una máquina AlmaLinux 9. Instalarás Apache Guacamole con el servidor de base de datos MariaDB, Nginx como proxy inverso, y luego asegurarás la instalación con SSL de Letsencrypt.
Requisitos previos
Antes de empezar, asegúrate de que tienes lo siguiente:
- Un servidor AlmaLinux 9 – Esta demo utiliza una máquina AlmaLinux con el nombre de host guacamole-alma9.
- Un usuario no root que tenga privilegios para ejecutar sudo.
- Un nombre de dominio apuntando a la dirección IP del servidor.
Configurar repositorios
El primer paso que debes hacer es configurar repositorios adicionales en tu servidor AlmaLinux. Debes añadir el repositorio EPEL, y habilitar el repositorio CRB (Code Ready Builder), que es el sustituto de PowerTools en RHEL 8, luego debes añadir el repositorio RPMFusion.
Ejecuta el siguiente comando dnf para instalar algunas dependencias básicas y el repositorio EPEL en tu sistema. Introduce y para confirmar la instalación y pulsa INTRO.
sudo dnf install wget nano epel-release dnf-utils
Ahora ejecuta el siguiente comando para habilitar el repositorio AlmaLinux CRB (Code Ready Builder). En RHEL 8, este repositorio se llama PowerTools, y desde RHEL 9, el nombre ha cambiado a CRB.
sudo dnf config-manager --set-enabled crb
A continuación, ejecuta el siguiente comando para añadir el repositorio RPMFusion a tu sistema AlmaLinux. Este repositorio proporciona el paquete ffmpeg-devel, necesario para Apache Guacamole.
sudo dnf install --nogpgcheck https://mirrors.rpmfusion.org/free/el/rpmfusion-free-release-$(rpm -E %rhel).noarch.rpm \ https://mirrors.rpmfusion.org/nonfree/el/rpmfusion-nonfree-release-$(rpm -E %rhel).noarch.rpm
Introduce y para confirmar la instalación y pulsa ENTER para continuar.
Instalación de dependencias
Con los repositorios añadidos a tu sistema, ahora puedes proceder a instalar las dependencias de los paquetes para Apache Guacamole. Instalarás los siguientes paquetes:
- Dependencias básicas para compilar e instalar guacd.
- Java y Apache Tomcat para ejecutar la aplicación web Apache Guacamole, que está basada en Java.
- Servidor de base de datos MariaDB que se utilizará como autenticación de usuarios para Apache Guacamole.
- Servidor web Nginx como reverso para la aplicación web Apache Guacamole.
- Certbot para asegurar el acceso a Apache Guacamole.
Instalación de dependencias para compilar guacd
Ejecuta el siguiente comando dnf para instalar las dependencias de los paquetes que se utilizarán para compilar guacd. Introduce y para confirmar la instalación y pulsa ENTER.
sudo dnf install cairo-devel libjpeg-turbo-devel libjpeg-devel libpng-devel libtool libuuid-devel uuid-devel make cmake ffmpeg-devel freerdp-devel pango-devel libssh2-devel libtelnet-devel libvncserver-devel libwebsockets-devel pulseaudio-libs-devel openssl-devel compat-openssl11 libvorbis-devel libwebp-devel libgcrypt-devel
Introduce también y para añadir la clave GPG del repositorio RPMFusion y EPEL.
Instalación de Java y Apache Tomcat
Ahora, ejecuta el siguiente comando para instalar Java 11 y Apache Tomcat 9 en tu servidor AlmaLinux. Ambas versiones de paquetes son compatibles con Apache Guacamole, por lo que puedes instalar ambos paquetes desde el repositorio appstream de AlmaLinux.
sudo dnf install java-11-openjdk-devel tomcat
Introduce y cuando se te pida, y pulsa ENTER.
Una vez instalados Java y Apache Tomcat, ejecuta el siguiente comando java para verificar la versión de Java. Deberías ver que Java OpenJDK 11 está instalado en tu sistema.
java --version
Ahora ejecuta el siguiente comando systemctl para iniciar y habilitar el servicio tomcat.
sudo systemctl start tomcat sudo systemctl enable tomcat
A continuación, verifica el servicio tomcat para asegurarte de que se está ejecutando.
sudo systemctl status tomcat
Si el servidor tomcat se está ejecutando, la salida debería estar activa (en ejecución).
Instalación del servidor MariaDB
Apache Guacamole admite varios métodos de autenticación, como la autenticación de base de datos, la autenticación LDAP, Radius, SAML y OpenID. En esta demostración, utilizarás la autenticación de base de datos a través del servidor MariaDB para Apache Guacamole.
Introduce el siguiente comando dnf para instalar el servidor MariaDB. Cuando se te solicite, introduce y para confirmar y pulsa INTRO.
sudo dnf install mariadb-server
A continuación, ejecuta el siguiente comando para iniciar y habilitar el servicio mariadb.
sudo systemctl start mariadb sudo systemctl enable mariadb
A continuación, verifica el servicio mariadb para asegurarte de que se está ejecutando.
sudo systemctl status mariadb
La salida debe estar activa (en ejecución ) cuando el estado de mariadb es en ejecución.
Instalar Nginx y Certbot
Ahora vas a instalar Nginx, que se utilizará como proxy inverso para la aplicación cliente de Apache Guacamole, y Certbot para generar certificados SSL y proteger Apache Guacamole.
Ejecuta el siguiente comando dnf para instalar Nginx y Certbot en tu sistema.
sudo dnf install nginx certbot python3-certbot-nginx
Introduce y para confirmar la instalación y pulsa ENTER.
Una vez finalizada la instalación, ejecuta el siguiente comando systemctl para iniciar y habilitar el servicio Nginx.
sudo systemctl start nginx sudo systemctl enable nginx
A continuación, verifica el servicio Nginx para asegurarte de que se está ejecutando.
sudo systemctl status nginx
La salida active (running) indica que Nginx se está ejecutando.
Configurar Firewalld
Con las dependencias de los paquetes instaladas, el siguiente paso será configurar el firewalld y abrir los protocolos HTTP y HTTPS.
Ejecuta el siguiente comando para abrir los protocolos HTTP y HTTPS en tu servidor AlmaLinux. A continuación, recarga firewalld para aplicar los cambios.
sudo firewall-cmd --add-service={http,https} --permanent sudo firewall-cmd --reload
Ahora, ejecuta el siguiente comando firewall-cmd para verificar la lista de reglas habilitadas en firewalld.
sudo firewall-cmd --list-all
En la sección de protocolos, deberías ver habilitados los protocolos HTTP y HTTPS.
Configurar la base de datos MariaDB
En la siguiente sección, asegurarás la instalación de tu servidor MariaDB mediante la utilidad mariadb-secure-installation y, a continuación, crearás una nueva base de datos MariaDB y un nuevo usuario para Apache Guacamole.
En primer lugar, protegerás el servidor MariaDB mediante la utilidad mariadb-secure-installation. Ejecútala para asegurar la instalación de tu servidor MariaDB.
sudo mariadb-secure-installation
Durante el proceso, introduce y para aplicar la configuración o n para no. A continuación se indican algunas configuraciones de MariaDB que vas a establecer:
- ¿Cambiar la autenticación raíz de MariaDB a unix_socket? Introduce n.
- ¿Cambiar la contraseña de root de MariaDB? Introduce y, luego escribe una nueva contraseña y repite.
- ¿Desactivar el inicio de sesión remoto para el usuario root? Introduce y.
- ¿Eliminar la prueba de base de datos por defecto? Vuelve a introducir y.
- ¿Eliminar el usuario anónimo por defecto? Introduce y para confirmar.
- ¿Recargar los privilegios de la tabla para aplicar los cambios? Introduce y.
A continuación, inicia sesión en el servidor MariaDB utilizando el comando cliente mariadb que se indica a continuación como usuario root. Cuando se te pida la contraseña, introduce la contraseña de root de MariaDB o pulsa ENTER.
sudo mariadb -u root -p
Una vez conectado, ejecuta las siguientes consultas para crear una nueva base de datos y un nuevo usuario para Apache Guacamole. En esta demostración, crearás una nueva base de datos guacamoledb, un usuario guacamole, con la contraseña GuacamolePassword.
CREATE DATABASE guacamoledb; CREATE USER 'guacamole'@'localhost' IDENTIFIED BY 'GuacamolePassword'; GRANT SELECT,INSERT,UPDATE,DELETE ON guacamoledb.* TO 'guacamole'@'localhost'; FLUSH PRIVILEGES;
A continuación, ejecuta la siguiente consulta para verificar los privilegios del usuario guacamole.
SHOW GRANTS FOR 'guacamole'@'localhost'; quit
Asegúrate de que el usuario guacamole puede SELECT, INSERT, UPDATE y DELETE en la base de datos guacamoledb.
Instalación del servidor Apache Guacamole
Apache Guacamole consta de dos componentes:
- guacd: Un protocolo de escritorio remoto arbitrario que puede conectarse a RDP, SSH, VNC y otros.
- Aplicación Web Guacamole: Contenedor de servlets Java que es el front-end de Apache Guacamole que puede ejecutarse dentro de Apache Tomcat.
Completa los siguientes pasos para instalar tanto la aplicación guacd como el servlet Java Guacamole.
Compilación e instalación de guacd
Mueve el directorio de trabajo a /usr/src y descarga el código fuente del servidor Apache Guacamole utilizando wget.
cd /usr/src wget https://dlcdn.apache.org/guacamole/1.5.2/source/guacamole-server-1.5.2.tar.gz
Una vez descargado, extrae el archivo guacamole-server-1.5.2.tar.gz y deberías obtener el nuevo directorio guacamole-server-1.5.2. Entra en él mediante cd.
tar -xf guacamole-server-1.5.2.tar.gz cd guacamole-server-*/
Ahora, ejecuta el siguiente comando para configurar la instalación. En esta demostración, utilizarás un parámetro adicional –with-systemd-dir=, que creará automáticamente un nuevo archivo de servicio guacd.
./configure --with-systemd-dir=/etc/systemd/system/
Una vez finalizado el proceso de configuración, asegúrate de que todo tiene el estado sí para el estado de la biblioteca, el soporte de protocolos y los servicios/herramientas.
A continuación, ejecuta el siguiente comando para compilar e instalar el servidor Apache Guacamole guacd.
sudo make && sudo make install
Una vez finalizada la instalación, ejecuta el siguiente comando para recargar la caché de la base de datos para las bibliotecas del sistema.
sudo ldconfig
A continuación, crea un nuevo directorio de configuración /etc/guacamole y crea la configuración de guacd /etc/guacamole/guacd.conf utilizando el editor nano.
sudo mkdir -p /etc/guacamole/ sudo nano /etc/guacamole/guacd.conf
Introduce la siguiente configuración para ejecutar el servicio guacd en localhost con el puerto 4822.
[server] bind_host = 127.0.0.1 bind_port = 4822
Guarda el archivo y sal de él cuando hayas terminado.
A continuación, ejecuta el siguiente comando systemctl para recargar el gestor systemd.
sudo systemctl daemon-reload
A continuación, inicia y habilita el servicio guacd de Apache Guacamole mediante el siguiente comando.
sudo systemctl start guacd sudo systemctl enable guacd
Por último, ejecuta el siguiente comando para comprobar el servicio guacd y asegurarte de que se está ejecutando.
sudo systemctl status guacd
Tras una instalación correcta, deberías obtener una salida del servicio guacd con el estado activo (en ejecución).
Además, también puedes verificar el servicio guacd asegurándote del puerto 4822 en tu sistema.
ss -tulpn | grep 4822
La salida debería mostrar el servicio guacd ejecutándose en localhost con el puerto 4822.
Instalación de la aplicación web Apache Guacamole
Con el guacd instalado, ahora instalarás la aplicación web Apache Guacamole, que es una aplicación Java servlet.
La aplicación web Apache Guacamole puede instalarse manualmente compilándola desde el código fuente o instalándola mediante el paquete .war. En esta demostración, instalarás la aplicación web Apache Guacamole mediante el archivo .war.
Desplázate al directorio /usr/src y descarga la aplicación web Apache Guacamole mediante el comando wget.
cd /usr/src wget https://dlcdn.apache.org/guacamole/1.5.2/binary/guacamole-1.5.2.war
Una vez descargada, ejecuta el siguiente comando para copiar el archivo descargado guacamole-1.5.2. war al directorio de aplicaciones web de Apache Tomcat /var/lib/tomcat/webapps. Con esto, podrás acceder a la aplicación web Apache Guacamole a través de la ruta URL /guacamole.
sudo cp guacamole-1.5.2.war /var/lib/tomcat/webapps/guacamole.war
Ahora reinicia el servicio tomcat utilizando el siguiente comando para aplicar los cambios.
sudo systemctl restart tomcat
Configuración de Apache Guacamole con autenticación MariaDB
En primer lugar, ejecuta el siguiente comando para crear nuevos directorios adicionales extensions y lib dentro del directorio /etc/guacamole/. A continuación, crea una nueva variable de entorno GUACAMOLE_HOME en la configuración de Apache Tomcat /etc/sysconfig/tomcat.
sudo mkdir -p /etc/guacamole/{extensions,lib} echo "GUACAMOLE_HOME=/etc/guacamole" | sudo tee -a /etc/sysconfig/tomcat
Ahora dirígete al directorio /usr/src y descarga la extensión de base de datos Guacamole mediante el comando wget que se indica a continuación.
cd /usr/src wget https://downloads.apache.org/guacamole/1.5.2/binary/guacamole-auth-jdbc-1.5.2.tar.gz
Una vez descargado, extrae el archivo guacamole-auth-jdbc-1.5.2.tar.gz mediante el comando tar. A continuación, mueve la extensión de base de datos de Guacamole al directorio /etc/guacamole/extensions/.
tar -xf guacamole-auth-jdbc-1.5.2.tar.gz sudo mv guacamole-auth-jdbc-1.5.2/mysql/guacamole-auth-jdbc-mysql-1.5.2.jar /etc/guacamole/extensions/
A continuación, desplázate al directorio guacamole-auth-jdbc-1.5.2/mysql/schema e importa el esquema de base de datos de Apache Guacamole a la base de datos guacamoledb.
cd guacamole-auth-jdbc-1.5.2/mysql/schema cat *.sql | mariadb -u root -p guacamoledb
Introduce la contraseña de tu usuario root de MariaDB cuando te lo pida y pulsa INTRO.
Ahora, desplázate de nuevo al directorio /usr/src y descarga el conector MySQL para la aplicación Java mediante wget.
cd /usr/src wget https://dev.mysql.com/get/Downloads/Connector-J/mysql-connector-j-8.0.33.tar.gz
Una vez descargado, extrae el archivo mysql-connector-j-8.0.33.tar.gz y mueve el conector MySQL Java al directorio /etc/guacamole/lib/.
tar -xf mysql-connector-j-8.0.33.tar.gz sudo mv mysql-connector-j-8.0.33/mysql-connector-j-8.0.33.jar /etc/guacamole/lib/
Ahora crea una nueva configuración de Apache Guacamole /etc/guacamole/guacamole. properties utilizando el editor nano.
sudo nano /etc/guacamole/guacamole.properties
Introduce los datos del usuario y la contraseña de la base de datos MariaDB para tu instalación de Apache Guacamole.
# MySQL properties mysql-hostname: localhost mysql-database: guacamoledb mysql-username: guacamole mysql-password: GuacamolePassword
Guarda y cierra el archivo cuando hayas terminado.
Por último, ejecuta el siguiente comando systemctl para reiniciar el servicio tomcat y aplicar los cambios a la aplicación web Apache Guacamole.
sudo systemctl restart tomcat
Has llegado con éxito a la fase en la que Apache Guacamole está funcionando con la autenticación MariaDB. El servicio guacd se ejecuta en localhost con el puerto 4822, y la aplicación web Apache Guacamole se ejecuta dentro de Apache Tomcat y es accesible a través de la ruta URL /guacamole.
Configurar Nginx como proxy inverso
En la siguiente sección, configurarás Nginx como proxy inverso para Apache Guacamole. También asegurarás tu instalación implementando HTTPS con Letsencrypt.
Abre la configuración de Apache Tomcat /etc/tomcat/server.x ml utilizando el siguiente comando del editor nano.
sudo nano /etc/tomcat/server.xml
Dentro de la sección `<Host name=»localhost» appBase=»webapps»`, añade una nueva configuración para habilitar el proxy inverso en Apache Tomcat.
<Host name="localhost" appBase="webapps" unpackWARs="true" autoDeploy="true"> <Valve className="org.apache.catalina.valves.RemoteIpValve" internalProxies="127.0.0.1" remoteIpHeader="x-forwarded-for" remoteIpProxiesHeader="x-forwarded-by" protocolHeader="x-forwarded-proto" />
Guarda el archivo y sal del editor.
Ahora ejecuta el siguiente comando para reiniciar el servicio tomcat y aplicar los cambios.
sudo systemctl restart tomcat
A continuación, crea una nueva configuración de bloque de servidor Nginx /etc/nginx/conf.d/guacamole.conf utilizando el editor nano.
sudo nano /etc/nginx/conf.d/guacamole.conf
Inserta la siguiente configuración de bloque de servidor y asegúrate de cambiar el nombre de dominio.
server { listen 80; server_name guacamole.hwdomain.io; access_log /var/log/nginx/guacamole-access.log; error_log /var/log/nginx/guacamole-error.log; location / { 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 el archivo y sal del editor.
Ahora ejecuta el siguiente comando para asegurarte de que tienes la configuración de Nginx adecuada y reinicia Nginx para aplicar los cambios.
sudo nginx -t sudo systemctl restart nginx
Si la configuración de Nginx es correcta, deberías obtener una salida de sintaxis es correcto – la prueba se ha realizado correctamente.
Por último, ejecuta el siguiente comando certbot para asegurar tu instalación de Apache Guacamole mediante Letsencrypt. Asegúrate de cambiar el nombre de dominio y la dirección de correo electrónico en este comando.
sudo certbot --nginx --agree-tos --no-eff-email --redirect --hsts --staple-ocsp --email [email protected] -d guacamole.hwdomain.io
Cuando finalice el proceso, podrás acceder a Apache Guacamole a través de una conexión HTTPS. Además, la redirección automática de HTTP a HTTPS está activada por defecto a través de Letsencrypt.
Acceder a Apache Guacamole
Inicia tu navegador web y visita el nombre de dominio de tu instalación de Apache Guacamole (es decir: https://guacamole.hwdomain.io). Accede mediante el usuario por defecto guacadmin y la contraseña guacadmin.
Cuando todo vaya bien, deberías ver el panel de usuario de Apache Guacamole.
Ahora haz clic en el menú Admin y en Configuración. Crearás una nueva conexión en Apache Guacamole.
Selecciona la pestaña Conexiones y haz clic en el botón Crear una nueva conexión.
En la sección EDITAR CONEXIÓN, introduce el nombre de la conexión y selecciona el protocolo al que quieres conectarte. En esta demostración, crearás una nueva conexión testssh con el protocolo SSH.
En la sección PARÁMETROS, introduce la dirección IP y el puerto del host de destino y, a continuación, el nombre de usuario y la contraseña del host de destino.
Desplázate hacia abajo y haz clic en Guardar para confirmar.
A continuación, vuelve al panel de inicio de usuario y deberías ver que se ha creado la conexión testssh. Haz clic en la conexión testssh para conectarte al host de destino.
Si tienes éxito, deberías estar conectado al host de destino como se muestra a continuación:
Conclusión
¡Buen trabajo! Has instalado con éxito Apache Guacamole como Pasarela de Escritorio Remoto en una máquina AlmaLinux 9. Has instalado Apache Guacamole con autenticación MariaDB de base de datos y proxy inverso Nginx. Además, también has asegurado el despliegue mediante SSL de letsencrypt. Ahora puedes empezar a acceder fácilmente a tus servidores o escritorios a través de la aplicación web Apache Guacamole.