Cómo instalar y utilizar el escritorio remoto de Apache Guacamole en Rocky Linux 8

Apache Guacamole es una pasarela de escritorio remoto gratuita, de código abierto y sin clientes. Soporta protocolos estándar como SSH, RDP y VNC. No necesita plugins ni clientes de terceros para funcionar. Puedes acceder a tu máquina mediante una pasarela basada en la web. Se puede poner detrás de un servidor proxy que te permita acceder a tus servidores desde cualquier parte del mundo.

Guacamole está formado por dos componentes:

  • guacamole-server contiene todos los componentes nativos, del lado del servidor, necesarios para que Guacamole se conecte a los escritorios remotos. guacd es el demonio proxy que se ejecuta en el servidor de Guacamole, acepta las conexiones de los usuarios y los conecta a los escritorios remotos.
  • guacamole-client contiene todos los componentes Java y Javascript de Guacamole que conforman la aplicación web donde los usuarios pueden conectarse a sus escritorios.

En este tutorial, aprenderás a instalar y utilizar Apache Guacamole en un servidor basado en Rocky Linux 8. También aprenderás a utilizarlo para conectarte a un escritorio remoto. Instalaremos Guacamole construyendo desde su código fuente.

Requisitos previos

  • Un servidor con Rocky Linux 8 con un mínimo de 2GB de RAM y 2 núcleos de CPU.

  • Un nombre de dominio para el servicio de asistencia que apunte al servidor. Para nuestro tutorial, utilizaremos el dominio uvdesk.example.com.

  • Un usuario no root con privilegios sudo.

  • Asegúrate de que todo está actualizado.

    $ sudo dnf update
    
  • Instala los paquetes de utilidades básicas. Es posible que algunos de ellos ya estén instalados.

    $ sudo dnf install wget curl nano unzip yum-utils -y
    

Paso 1 – Configurar el cortafuegos

El primer paso es configurar el cortafuegos. Rocky Linux utiliza el cortafuegos Firewalld. Comprueba el estado del cortafuegos.

$ sudo firewall-cmd --state
running

El cortafuegos funciona con diferentes zonas, y la zona pública es la que utilizaremos por defecto. Enumera todos los servicios y puertos activos en el cortafuegos.

$ sudo firewall-cmd --permanent --list-services

Debería mostrar el siguiente resultado.

cockpit dhcpv6-client ssh

Permite los puertos HTTP y HTTPS.

$ sudo firewall-cmd --permanent --add-service=http
$ sudo firewall-cmd --permanent --add-service=https

Vuelve a comprobar el estado del cortafuegos.

$ sudo firewall-cmd --permanent --list-services

Deberías ver una salida similar.

cockpit dhcpv6-client http https ssh

Recarga el cortafuegos para activar los cambios.

$ sudo firewall-cmd --reload

Paso 2 – Instalar las bibliotecas

Antes de instalar las librerías, tenemos que instalar el repositorio EPEL y habilitar el repositorio PowerTools.

$ sudo dnf install epel-release -y
$ sudo dnf config-manager --set-enabled powertools

El primer paso es instalar las bibliotecas necesarias para construir Guacamole. Instala las bibliotecas necesarias.

$ sudo dnf install cairo-devel libjpeg-turbo-devel libjpeg-devel libpng-devel libtool libuuid-devel uuid-devel make cmake

Las dependencias anteriores son obligatorias, lo que significa que sin ellas no se puede construir Guacamole. Puedes instalar algunas dependencias opcionales para añadir compatibilidad con diversos protocolos y funciones.

Pero antes, debes habilitar el repositorio gratuito RPMFusion porque contiene el paquete ffmpeg-devel.

$ sudo dnf install --nogpgcheck https://mirrors.rpmfusion.org/free/el/rpmfusion-free-release-8.noarch.rpm

Instala las dependencias opcionales.

$ sudo dnf install ffmpeg-devel freerdp-devel pango-devel libssh2-devel libtelnet-devel libvncserver-devel libwebsockets-devel pulseaudio-libs-devel openssl-devel compat-openssl10 libvorbis-devel libwebp-devel libgcrypt-devel

Paso 3 – Instalar Apache Tomcat

Para nuestro tutorial, instalaremos Apache Tomcat 9, que requiere Java 8 y posteriores para funcionar.

Instalar Java

Instalaremos OpenJDK 11, la implementación de código abierto de la plataforma Java.

Ejecuta el siguiente comando para instalar OpenJDK.

$ sudo dnf install java-11-openjdk-devel

Verifica la instalación.

$ java -version
openjdk 11.0.14 2022-01-18 LTS
OpenJDK Runtime Environment 18.9 (build 11.0.14+9-LTS)
OpenJDK 64-Bit Server VM 18.9 (build 11.0.14+9-LTS, mixed mode, sharing)

Crea un usuario para Tomcat

A continuación, crea un usuario para el servicio Tomcat. Estableceremos /opt/tomcat como directorio de inicio.

$ sudo useradd -m -U -d /opt/tomcat -s /bin/false tomcat

Descarga Tomcat

La última versión de Tomcat v10 puede descargarse desde su página de descargas. En el momento de escribir este tutorial, la v9.0.59 es la última versión disponible. Comprueba la última versión antes de descargar Tomcat.

Utiliza wget para descargar Tomcat.

$ TVERSION=9.0.59
$ wget https://dlcdn.apache.org/tomcat/tomcat-9/v${TVERSION}/bin/apache-tomcat-${TVERSION}.tar.gz

Extrae el archivo al directorio /opt/tomcat.

$ sudo tar -xf apache-tomcat-${TVERSION}.tar.gz --strip-components=1 -C /opt/tomcat/

Cambia la propiedad del directorio al usuario de Tomcat.

$ sudo chown -R tomcat:tomcat /opt/tomcat

Crea un archivo de unidad Systemd e inicia Tomcat

Crea y abre el archivo /etc/systemd/system/tomcat.service para editarlo.

$ sudo nano /etc/systemd/system/tomcat.service

Pega el siguiente código.

[Unit]
Description=Apache Tomcat 9 Servlet container
Wants=network.target
After=network.target

[Service]
Type=forking
User=tomcat
Group=tomcat

Environment="JAVA_HOME=/usr/lib/jvm/jre"
Environment="JAVA_OPTS=-Djava.awt.headless=true"
Environment="CATALINA_BASE=/opt/tomcat"
Environment="CATALINA_HOME=/opt/tomcat"
Environment="CATALINA_PID=/opt/tomcat/temp/tomcat.pid"
Environment="CATALINA_OPTS=-Xms512M -Xmx1024M -server -XX:+UseParallelGC"

ExecStart=/opt/tomcat/bin/startup.sh
ExecStop=/opt/tomcat/bin/shutdown.sh
Restart=always

[Install]
WantedBy=multi-user.target

Guarda el archivo pulsando Ctrl + X e introduciendo Y cuando se te pida que lo guardes.

Recarga el demonio de servicio para habilitar el servicio Tomcat.

$ sudo systemctl daemon-reload

Habilita e inicia el servicio Tomcat.

$ sudo systemctl enable tomcat --now

Comprueba el estado del servicio.

$ sudo systemctl status tomcat
? tomcat.service - Apache Tomcat 9 Servlet container
   Loaded: loaded (/etc/systemd/system/tomcat.service; enabled; vendor preset: disabled)
   Active: active (running) since Wed 2022-03-09 09:48:38 UTC; 8s ago
  Process: 25308 ExecStart=/opt/tomcat/bin/startup.sh (code=exited, status=0/SUCCESS)
 Main PID: 25315 (java)
    Tasks: 29 (limit: 11412)
   Memory: 154.9M
   CGroup: /system.slice/tomcat.service
           ??25315 /usr/lib/jvm/jre/bin/java -Djava.util.logging.config.file=/opt/tomcat/conf/logging.properties ..

Mar 09 09:48:38 guacamole systemd[1]: Starting Apache Tomcat 9 Servlet container...
Mar 09 09:48:38 guacamole systemd[1]: Started Apache Tomcat 9 Servlet container.

Paso 4 – Descarga y construye Guacamole

Puedes obtener la última versión estable de Guacamole en su sitio web. En el momento de escribir este tutorial, la última versión disponible era la 1.4.0. Descarga el código fuente de Guacamole.

$ GVERSION=1.4.0
$ wget https://downloads.apache.org/guacamole/${GVERSION}/source/guacamole-server-${GVERSION}.tar.gz

Extrae el archivo y cambia al directorio recién creado.

$ tar -xzf guacamole-server-${GVERSION}.tar.gz
$ cd guacamole-server-${GVERSION}/

Ejecuta el comando configure para determinar qué bibliotecas están disponibles y para seleccionar los componentes que se van a construir.

$ ./configure --with-systemd-dir=/etc/systemd/system/

El directorio /etc/systemd/system/ es donde se instalará el script de inicio durante el proceso de construcción para configurar Guacamole para que se inicie automáticamente al arrancar.

Obtendrás la siguiente salida al finalizar con éxito.

checking for a BSD-compatible install... /usr/bin/install -c
checking whether build environment is sane... yes
...

------------------------------------------------
guacamole-server version 1.4.0
------------------------------------------------

   Library status:

     freerdp2 ............ yes
     pango ............... yes
     libavcodec .......... yes
     libavformat.......... yes
     libavutil ........... yes
     libssh2 ............. yes
     libssl .............. yes
     libswscale .......... yes
     libtelnet ........... yes
     libVNCServer ........ yes
     libvorbis ........... yes
     libpulse ............ yes
     libwebsockets ....... yes
     libwebp ............. yes
     wsock32 ............. no

   Protocol support:

      Kubernetes .... yes
      RDP ........... yes
      SSH ........... yes
      Telnet ........ yes
      VNC ........... yes

   Services / tools:

      guacd ...... yes
      guacenc .... yes
      guaclog .... yes

   FreeRDP plugins: /usr/lib64/freerdp2
   Init scripts: no
   Systemd units: /etc/systemd/system/

Type "make" to compile guacamole-server.

Si no tienes instaladas algunas bibliotecas, verás no en lugar de yes en la salida. Pero si falta una biblioteca crítica, el comando fallará. Para comprobar más opciones de configuración, ejecuta el comando ./configure --help.

Compila e instala el servidor Guacamole utilizando los siguientes comandos.

$ make && sudo make install

Ejecuta el siguiente comando para actualizar la caché del sistema de las bibliotecas instaladas.

$ sudo ldconfig

Recarga el demonio de servicio.

$ sudo systemctl daemon-reload

Activa e inicia el servicio Guacamole.

$ sudo systemctl enable guacd --now

Comprueba el estado del servicio.

$ sudo systemctl status guacd
? guacd.service - Guacamole Server
   Loaded: loaded (/etc/systemd/system/guacd.service; enabled; vendor preset: disabled)
   Active: active (running) since Thu 2022-03-10 09:13:41 UTC; 7s ago
     Docs: man:guacd(8)
 Main PID: 85349 (guacd)
    Tasks: 1 (limit: 11181)
   Memory: 10.8M
   CGroup: /system.slice/guacd.service
           ??85349 /usr/local/sbin/guacd -f

Mar 10 09:13:41 guacamole systemd[1]: Started Guacamole Server.
Mar 10 09:13:41 guacamole guacd[85349]: Guacamole proxy daemon (guacd) version 1.4.0 started
Mar 10 09:13:41 guacamole guacd[85349]: guacd[85349]: INFO:        Guacamole proxy daemon (guacd) version 1.4.0 started
Mar 10 09:13:41 guacamole guacd[85349]: guacd[85349]: INFO:        Listening on host ::1, port 4822
Mar 10 09:13:41 guacamole guacd[85349]: Listening on host ::1, port 4822

Paso 5 – Instalar el cliente Guacamole

Ahora que has instalado el servidor, el siguiente paso es instalar el cliente.

Crea el directorio de configuración de Guacamole.

$ sudo mkdir /etc/guacamole

A diferencia del servidor de Guacamole, el cliente de Guacamole está disponible en forma de código fuente y binario. Para nuestro tutorial, descargaremos el binario. Sin embargo, puedes optar por construir el cliente a partir del código fuente.

Descarga el binario del cliente Guacamole del sitio web.

$ sudo wget https://downloads.apache.org/guacamole/${GVERSION}/binary/guacamole-${GVERSION}.war -O /etc/guacamole/guacamole.war

El comando anterior descarga y copia el archivo binario de Guacamole en el directorio /etc/guacamole.

Para que el cliente funcione, debe desplegarse desde el directorio de Tomcat, que es $CATALINA_HOME/webapps/. En el paso 3, establecemos /opt/tomcat como $CATALINA_HOME.

Ejecuta el siguiente comando para crear un enlace simbólico desde /etc/guacamole/guacamole.war al directorio webapps de Tomcat.

$ sudo ln -s /etc/guacamole/guacamole.war /opt/tomcat/webapps/

Cambia el permiso de la aplicación al usuario tomcat.

$ sudo chown -R tomcat:tomcat /opt/tomcat/webapps

Crea el archivo de configuración de la aplicación web en /etc/guacamole/guacd.conf.

$ sudo nano /etc/guacamole/guacd.conf

Pega en él el siguiente código. Sustituye your_server_IP por la dirección IP pública de tu servidor.

#
# guacd configuration file
#

[daemon]

#pid_file = /var/run/guacd.pid
log_level = info

[server]

bind_host = your_server_IP
bind_port = 4822

#
# The following parameters are valid only if
# guacd was built with SSL support.
#

# [ssl]

# server_certificate = /etc/ssl/certs/guacd.crt
# server_key = /etc/ssl/private/guacd.key

Guarda el archivo pulsando Ctrl + X e introduciendo Y cuando se te pida guardar.

Reinicia el servidor Guacamole y Tomcat para aplicar los cambios.

$ sudo systemctl restart tomcat guacd

Paso 6 – Instalar y configurar MySQL

Apache Guacamole ofrece varios tipos de métodos de autenticación. Para las pruebas, basta con una autenticación simple basada en una contraseña. Pero para entornos de producción, necesitamos implementar un método de autenticación más fuerte y mejor. Aquí implementaremos la autenticación basada en la base de datos utilizando MySQL.

Instala MySQL.

$ sudo dnf install mysql-server

Activa e inicia el servicio MySQL.

$ sudo systemctl enable mysqld --now

Asegurar la instalación de MySQL.

$ sudo mysql_secure_installation

En el primer paso, se te preguntará si quieres configurar el Plugin de Validación de Contraseñas, que puedes utilizar para comprobar la solidez de tu contraseña de MySQL. Elige Y para proceder. Se te pedirá que elijas el nivel de validación de la contraseña en el siguiente paso. Elige 2 que es el nivel más fuerte y requerirá que tu contraseña tenga al menos ocho caracteres e incluya una mezcla de mayúsculas, minúsculas, números y caracteres especiales.

Securing the MySQL server deployment.

Connecting to MySQL using a blank password.

VALIDATE PASSWORD COMPONENT can be used to test passwords
and improve security. It checks the strength of password
and allows the users to set only those passwords which are
secure enough. Would you like to setup VALIDATE PASSWORD component?

Press y|Y for Yes, any other key for No: Y

There are three levels of password validation policy:

LOW    Length >= 8
MEDIUM Length >= 8, numeric, mixed case, and special characters
STRONG Length >= 8, numeric, mixed case, special characters and dictionary                  file

Please enter 0 = LOW, 1 = MEDIUM and 2 = STRONG: 2

En el siguiente paso se te pedirá que elijas una contraseña de root. Elige una contraseña fuerte que cumpla los requisitos del plugin de validación de contraseñas. En el siguiente paso, se te preguntará si quieres continuar con la contraseña elegida. Pulsa y para continuar.

Please set the password for root here.

New password:

Re-enter new password:

Estimated strength of the password: 100
Do you wish to continue with the password provided?(Press y|Y for Yes, any other key for No) : Y

Pulsa Y y luego ENTER para todas las siguientes indicaciones para eliminar los usuarios anónimos y la base de datos de prueba, desactivar los inicios de sesión de root y cargar las reglas recién establecidas.

...
Remove anonymous users? (Press y|Y for Yes, any other key for No) : Y
Success.
...
Disallow root login remotely? (Press y|Y for Yes, any other key for No) : Y
Success.
...
Remove test database and access to it? (Press y|Y for Yes, any other key for No) : Y
 - Dropping test database...
Success.
 - Removing privileges on test database...
Success.
Reloading the privilege tables will ensure that all changes
made so far will take effect immediately.
...
Reload privilege tables now? (Press y|Y for Yes, any other key for No) : Y
Success.
All done!

Entra en el shell de MySQL. Introduce la contraseña de root para continuar.

$ mysql -u root -p

Crea el usuario guacamole_user. Asegúrate de que la contraseña cumple los requisitos establecidos anteriormente.

mysql> CREATE USER 'guacamole_user'@'localhost' IDENTIFIED BY 'Your_password2';

Crea la base de datos guacamole_db.

mysql> CREATE DATABASE guacamole_db;

Concede al usuario privilegios en la base de datos guacamole_db.

mysql> GRANT SELECT,INSERT,UPDATE,DELETE ON guacamole_db.* TO 'guacamole_user'@'localhost';

Sal de la Shell.

mysql> exit

Paso 7 – Configurar Apache Guacamole

El directorio de configuración de Guacamole está definido por la variable GUACAMOLE_HOME. Todos los archivos de configuración, extensiones, etc., están en este directorio. El archivo /etc/guacamole/guacamole.properties almacena todas las configuraciones y ajustes de Guacamole y sus extensiones.

Las extensiones y las bibliotecas requieren directorios adicionales. Créalos.

$ sudo mkdir /etc/guacamole/{extensions,lib}

Establece la variable home de Guacamole y almacénala en el archivo de configuración /etc/default/tomcat.

$ echo "GUACAMOLE_HOME=/etc/guacamole" | sudo tee -a /etc/default/tomcat

Configurar la autenticación de la base de datos de Apache Guacamole

Ya hemos configurado la base de datos para Guacamole en el paso anterior. Necesitamos descargar el plugin del autentificador JDBC de Guacamole y la biblioteca del Conector Java de MySQL para completar la configuración.

Descarga el plugin Guacamole JDBC de su sitio web.

$ cd ~
$ wget https://downloads.apache.org/guacamole/${GVERSION}/binary/guacamole-auth-jdbc-${GVERSION}.tar.gz

Extrae el plugin al directorio /etc/guacamole/extensions.

$ tar -xf guacamole-auth-jdbc-${GVERSION}.tar.gz
$ sudo mv guacamole-auth-jdbc-${GVERSION}/mysql/guacamole-auth-jdbc-mysql-${GVERSION}.jar /etc/guacamole/extensions/

El siguiente paso es importar el esquema SQL a la base de datos MySQL. Cambia al directorio del plugin extraído.

$ cd guacamole-auth-jdbc-${GVERSION}/mysql/schema

Importa los archivos de esquema en MySQL.

$ cat *.sql | mysql -u root -p guacamole_db

Descarga el Conector Java de MySQL. Coge el archivo comprimido independiente de la plataforma. En el momento de escribir este tutorial, la última versión disponible es la 8.0.28.

$ cd ~
$ wget https://dev.mysql.com/get/Downloads/Connector-J/mysql-connector-java-8.0.28.tar.gz

Extrae el archivo y copia su contenido en el directorio /etc/guacamole/lib.

$ tar -xf mysql-connector-java-8.0.28.tar.gz
$ sudo mv mysql-connector-java-8.0.28/mysql-connector-java-8.0.28.jar /etc/guacamole/lib/

Configura el archivo de propiedades de Guacamole

Crea el archivo /etc/guacamole/guacamole.properties y ábrelo para editarlo.

$ sudo nano /etc/guacamole/guacamole.properties

Pega en él el siguiente código. Sustituye your_server_ip por la dirección IP pública de tu servidor.

guacd-hostname: your_server_ip
guacd-port:     4822

# MySQL properties
mysql-hostname: localhost
mysql-database: guacamole_db
mysql-username: guacamole_user
mysql-password: Your_password2

Guarda el archivo pulsando Ctrl + X e introduciendo Y cuando se te pida que lo guardes.

Vincula el directorio de configuración de Guacamole al directorio de servlets de Tomcat.

$ sudo ln -s /etc/guacamole /opt/tomcat/.guacamole

Reinicia Tomcat para habilitar la autenticación de la base de datos. No necesitas reiniciar guacd porque es completamente independiente de la aplicación web y no se ocupa de la autenticación de guacamole.properties o de la base de datos de ninguna manera.

$ sudo systemctl restart tomcat

Paso 8 – Instalar SSL

Para instalar un certificado SSL con Let’s Encrypt, necesitamos instalar la herramienta Certbot. Certbot requiere el repositorio EPEL para la instalación, pero podemos proceder directamente con la instalación puesto que ya lo hemos instalado antes.

Ejecuta los siguientes comandos para instalar Certbot.

$ sudo dnf install certbot

Generar el certificado SSL.

$ sudo certbot certonly --standalone --agree-tos --no-eff-email --staple-ocsp --preferred-challenges http -m [email protected] -d guacamole.example.com

El comando anterior descargará un certificado en el directorio /etc/letsencrypt/live/guacamole.example.com de tu servidor.

Genera un certificado de grupo Diffie-Hellman.

$ sudo openssl dhparam -out /etc/ssl/certs/dhparam.pem 2048

Crea un directorio webroot de desafío para la renovación automática de Let’s Encrypt.

$ sudo mkdir -p /var/lib/letsencrypt

Crea un Cron Job para renovar el SSL. Se ejecutará cada día para comprobar el certificado y renovarlo si es necesario. Para ello, primero crea el archivo /etc/cron.daily/certbot-renew y ábrelo para editarlo.

$ sudo nano /etc/cron.daily/certbot-renew

Pega el siguiente código.

#!/bin/sh
certbot renew --cert-name guacamole.example.com --webroot -w /var/lib/letsencrypt/ --post-hook "systemctl reload nginx"

Guarda el archivo pulsando Ctrl + X e introduciendo Y cuando te lo pida.

Cambia los permisos del archivo de la tarea para que sea ejecutable.

$ sudo chmod +x /etc/cron.daily/certbot-renew

Paso 9 – Instalar y configurar Nginx como proxy inverso

Configurar Tomcat para la conexión de proxy inverso

Antes de instalar Nginx, tenemos que configurar Tomcat para que pase a través de la dirección IP remota proporcionada por el proxy inverso Nginx.

Abre el archivo /opt/tomcat/conf/server.xml para editarlo.

$ sudo nano /opt/tomcat/conf/server.xml

Localiza la siguiente línea en el archivo.

<Host name="localhost"  appBase="webapps" 
            unpackWARs="true" autoDeploy="true">

Cambia la línea pegando código adicional debajo de ella, para que tenga el siguiente aspecto.

<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 pulsando Ctrl + X e introduciendo Y cuando te lo pida.

Instalar Nginx

Rocky Linux 8.5 incluye la última versión estable de Nginx. Instálalo con el siguiente comando.

$ sudo dnf module install nginx:1.20

Verifica la instalación.

$ nginx -v
nginx version: nginx/1.20.1

Activa el servicio Nginx.

$ sudo systemctl enable nginx

Crea y abre el archivo /etc/nginx/conf.d/guacamole.conf para editarlo.

$ sudo nano /etc/nginx/conf.d/guacamole.conf

Pega en él el siguiente código.

server {
    listen       443 ssl http2;
    listen       [::]:443 ssl http2;
    server_name  guacamole.example.com;

    access_log  /var/log/nginx/guacamole.access.log;
    error_log   /var/log/nginx/guacamole.error.log;
    
    # SSL
    ssl_certificate      /etc/letsencrypt/live/guacamole.example.com/fullchain.pem;
    ssl_certificate_key  /etc/letsencrypt/live/guacamole.example.com/privkey.pem;
    ssl_trusted_certificate /etc/letsencrypt/live/guacamole.example.com/chain.pem;
    ssl_session_timeout  5m;
    ssl_session_cache shared:MozSSL:10m;
    ssl_session_tickets off;
    ssl_protocols TLSv1.2 TLSv1.3;
    ssl_prefer_server_ciphers on;
    ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384;
    ssl_ecdh_curve X25519:prime256v1:secp384r1:secp521r1;
    ssl_stapling on;
    ssl_stapling_verify on;
    ssl_dhparam /etc/ssl/certs/dhparam.pem;
    resolver 8.8.8.8;

    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;
      client_max_body_size 1g;
      access_log off;
  }
}
# enforce HTTPS
server {
    listen       80;
    listen       [::]:80;
    server_name  guacamole.example.com;
    return 301   https://$host$request_uri;
}

Guarda el archivo pulsando Ctrl + X e introduciendo Y cuando te lo pida una vez terminado.

Abre el archivo /etc/nginx/nginx.conf para editarlo.

$ sudo nano /etc/nginx/nginx.conf

Añade la siguiente línea antes de la línea include /etc/nginx/conf.d/*.conf;.

server_names_hash_bucket_size  64;

Guarda el archivo pulsando Ctrl + X e introduciendo Y cuando se te solicite.

Verifica la sintaxis del archivo de configuración de Nginx.

$ sudo nginx -t
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful

Corrige el permiso SELinux para que Nginx pueda realizar conexiones de red.

$ sudo setsebool -P httpd_can_network_connect 1

Inicia el servicio Nginx para habilitar la nueva configuración.

$ sudo systemctl start nginx

Reinicia el servidor Tomcat para aplicar el cambio de configuración.

$ sudo systemctl restart tomcat

Paso 10 – Acceder a Guacamole

Abre la URL https://guacamole.example.com en tu navegador, y te aparecerá la siguiente pantalla.

Pantalla de administración del guacamole

Introduce guacadmin como nombre de usuario y guacadmin como contraseña, y haz clic en Iniciar sesión para continuar.

Crear un nuevo usuario administrador

Debes crear un nuevo usuario y eliminar el existente por motivos de seguridad. Para ello, haz clic en guacadmin en la parte superior derecha y haz clic en el menú Configuración del menú desplegable.

Configuración de la aplicación web de Guacamole

Pasa a la pestaña Usuarios y haz clic en el botón Nuevo usuario para empezar.

Guacamole Nuevo Usuario

Introduce tus datos y marca todos los permisos.

Haz clic en Guardar cuando hayas terminado. Cierra la sesión del usuario guacadmin y vuelve a entrar con el usuario recién creado.

Vuelve a la pantalla de usuarios. selecciona el usuario guacadmin para editarlo y haz clic en el botón Eliminar de la parte inferior para borrar el usuario.

Paso 11 – Cómo utilizar Guacamole

Para nuestro tutorial, te mostraremos cómo conectarte a un servidor utilizando el protocolo SSH.

Ve al menú de Configuración de Guacamole y selecciona Conexiones. En la pantalla de Conexiones, pulsa el botón de Nueva Conexión.

Guacamole Nueva Conexión

Elige un nombre para la conexión y selecciona SSH como protocolo en el menú desplegable.

Tipo de conexión SSH de Guacamole

En la sección Parámetros, introduce la dirección IP de tu servidor como nombre de host, 22 como puerto (o si tienes un puerto SSH personalizado, úsalo) y tu nombre de usuario. Si utilizas la autenticación basada en contraseña, introduce la contraseña del usuario o pega la clave privada. Introduce la frase de contraseña para la clave privada si la estás utilizando.

Guacamole Parámetros SSH

Si quieres habilitar alguna configuración adicional, hazlo. Haz clic en Guardar para terminar de añadir la conexión.

Vuelve al panel de control y haz clic en el nombre de la conexión en Todas las conexiones, y accederás al terminal SSH.

Terminal SSH Guacamole

Conclusión

Con esto concluye nuestro tutorial sobre la instalación y uso de Apache Guacamole para crear una conexión SSH en un servidor basado en Rocky Linux 8. Si tienes alguna pregunta, publícala en los comentarios de abajo.

También te podría gustar...