Configuración de Apache Guacamole en un VPS: acceso remoto a servidores y PC a través del navegador
TL;DR
En esta guía, configuraremos paso a paso Apache Guacamole en un servidor privado virtual (VPS) con Ubuntu 24.04 LTS. Guacamole le permitirá obtener acceso remoto seguro a sus servidores, estaciones de trabajo y otros dispositivos a través de los protocolos RDP, VNC y SSH directamente desde un navegador web, sin necesidad de instalar clientes de escritorio.
Instalación y configuración de todos los componentes de Guacamole (servidor, cliente, base de datos PostgreSQL).
Garantía de seguridad con HTTPS a través de Caddy Server y configuraciones básicas del servidor.
Instrucciones detalladas para la preparación del VPS, la instalación de dependencias y el despliegue de la aplicación.
Ejemplos de configuraciones para diferentes tipos de conexiones y métodos de autenticación.
Recomendaciones para la copia de seguridad y el mantenimiento del sistema para una estabilidad a largo plazo.
Sección de solución de problemas y preguntas frecuentes para resolver problemas comunes.
Qué configuramos y por qué
Diagrama: Qué configuramos y por qué
Configuraremos Apache Guacamole, una pasarela de cliente sin cliente que proporciona acceso remoto a varios protocolos (RDP, VNC, SSH, Telnet) a través de un navegador web estándar, utilizando HTML5. Esto significa que puede conectarse a sus servidores y PC desde cualquier lugar con acceso a internet y un navegador web, sin necesidad de instalar software especializado en la máquina cliente.
Al final, obtendrá un punto de entrada único para gestionar toda su infraestructura. En lugar de utilizar un cliente SSH separado para servidores Linux, un cliente RDP para máquinas Windows y un cliente VNC para estaciones de trabajo gráficas, podrá acceder a todo esto a través de la interfaz web unificada de Guacamole. Esto simplifica significativamente la gestión, especialmente para equipos o al trabajar con múltiples sistemas diferentes.
Existen alternativas, como soluciones gestionadas en la nube (por ejemplo, AWS Systems Manager Session Manager, Azure Bastion) o soluciones VPN propietarias. Sin embargo, estas opciones a menudo conllevan una tarifa mensual, dependencia de un proveedor específico o limitaciones de funcionalidad. El alojamiento propio de Guacamole en un VPS le otorga control total sobre los datos, la seguridad y la configuración. Es económicamente ventajoso a largo plazo, especialmente si ya tiene un VPS, y permite integrarlo con su infraestructura de autenticación existente (por ejemplo, LDAP, Active Directory), algo que los servicios en la nube no siempre ofrecen.
La elección de una solución autoalojada en un VPS también proporciona una mayor flexibilidad. Puede configurar Guacamole exactamente como lo necesita, añadir sus propias extensiones, integrarlo con otras herramientas de monitoreo o automatización. Para desarrolladores, fundadores en solitario, jugadores o entusiastas de las criptomonedas que necesitan un acceso fiable y controlado a sus recursos, Guacamole se convierte en la solución ideal, proporcionando una herramienta potente sin costes ni dependencias innecesarias.
Qué configuración de VPS se necesita para esta tarea
Diagrama: Qué configuración de VPS se necesita para esta tarea
Los requisitos de VPS para Apache Guacamole dependen de la carga prevista: el número de usuarios simultáneos y la intensidad de uso (por ejemplo, la transferencia de grandes volúmenes de datos a través de RDP/VNC). Sin embargo, para la mayoría de los escenarios, que incluyen de 1 a 5 usuarios simultáneos, los requisitos son bastante modestos.
Requisitos mínimos:
CPU: 2 núcleos. Guacamole realiza la transcodificación de protocolos a HTML5, lo que puede consumir bastantes recursos.
RAM: 2 GB. Esto será suficiente para el sistema operativo, el servlet Java (por ejemplo, Tomcat) y el propio Guacamole.
Disco: 40 GB SSD. Para el sistema operativo, Guacamole, la base de datos (PostgreSQL) y los registros. Se recomienda encarecidamente un SSD para el rendimiento.
Red: 100 Mbps. Para un funcionamiento estable de las conexiones remotas. Cuanto mayor, mejor, especialmente para RDP con interfaces gráficas.
Plan de VPS específico para la tarea:
Para un trabajo cómodo y la posibilidad de escalar en el futuro, recomendamos la siguiente configuración:
CPU: 2-4 núcleos x86-64
RAM: 4 GB
Disco: 80 GB NVMe SSD (o un SSD SATA rápido)
Red: Puerto de 1 Gbps con tráfico ilimitado
Esta configuración será suficiente para 5-10 usuarios simultáneos, asegurando un funcionamiento fluido incluso con un uso intensivo de RDP. Puede adquirir un VPS con las características indicadas o considerar ofertas similares de otros proveedores.
Cuándo se necesita un servidor dedicado, no un VPS:
Un servidor dedicado puede ser necesario si:
Planea atender a más de 20-30 usuarios simultáneos.
Necesita el máximo rendimiento de CPU para la transcodificación, ya que un VPS puede tener limitaciones de "vecindad".
Se requiere un ancho de banda de red muy alto y recursos garantizados, por ejemplo, para la transmisión de video a través de VNC/RDP.
Tiene requisitos estrictos de seguridad y aislamiento que un VPS no puede satisfacer completamente debido a la virtualización.
Para la mayoría de los usuarios individuales o equipos pequeños, un VPS será más que suficiente y más rentable.
Ubicación: qué influye
La elección de la ubicación del VPS es importante por varias razones:
Latencia: Cuanto más cerca esté el VPS de usted y de los servidores/PC a los que se conecta a través de Guacamole, menor será la latencia. Una baja latencia es crítica para un trabajo cómodo con RDP y VNC.
Velocidad de conexión: La proximidad a los servidores de destino también afecta la velocidad general de la conexión entre Guacamole y los puntos finales.
Legislación: En algunos casos, puede haber requisitos de almacenamiento de datos o de la jurisdicción bajo la cual se encuentra el servidor.
La opción ideal es ubicar el VPS de Guacamole en la misma región geográfica que la mayoría de sus servidores o usuarios de destino. Si sus usuarios y servidores están distribuidos, elija una ubicación central con buena conectividad.
Preparación del servidor
Diagrama: Preparación del servidor
Antes de proceder con la instalación de Apache Guacamole, es necesario realizar una configuración básica y reforzar la seguridad de su nuevo VPS. Utilizaremos Ubuntu Server 24.04 LTS.
1. Conexión SSH y actualización del sistema
El primer paso es siempre conectarse al servidor por SSH y actualizar todos los paquetes instalados a las versiones más recientes. Esto garantiza que tenga las últimas correcciones de seguridad y versiones estables del software.
# Conéctese a su VPS por SSH (reemplace user y your_vps_ip)
# ssh user@your_vps_ip
# Actualice la lista de paquetes
sudo apt update
# Actualice todos los paquetes instalados
sudo apt upgrade -y
# Instale algunas utilidades útiles, si aún no están instaladas
sudo apt install -y curl wget git htop unzip
2. Creación de un nuevo usuario con permisos sudo (si no lo hizo durante el aprovisionamiento)
Trabajar como usuario root no es seguro. Cree un nuevo usuario y concédale permisos sudo.
# Cree un nuevo usuario (reemplace youruser)
sudo adduser youruser
# Añada el nuevo usuario al grupo sudo
sudo usermod -aG sudo youruser
# Cambie al nuevo usuario
su - youruser
Los comandos posteriores se ejecutarán como este nuevo usuario utilizando sudo.
3. Configuración de claves SSH para un acceso seguro
El acceso por contraseña a través de SSH es menos seguro. Configure la autenticación por claves SSH y desactive el acceso por contraseña.
# En su máquina local, genere una clave SSH (si aún no tiene una)
# ssh-keygen -t rsa -b 4096
# Copie la clave pública al VPS (reemplace youruser y your_vps_ip)
# ssh-copy-id youruser@your_vps_ip
# Después de copiar la clave con éxito, conéctese al VPS como el nuevo usuario
# ssh youruser@your_vps_ip
# En el VPS: Edite la configuración del servidor SSH
sudo nano /etc/ssh/sshd_config
En el archivo /etc/ssh/sshd_config, encuentre y modifique las siguientes líneas:
# Deshabilitar el inicio de sesión para root
PermitRootLogin no
# Deshabilitar la autenticación por contraseña (¡después de asegurarse de que el inicio de sesión por clave funciona!)
PasswordAuthentication no
Guarde los cambios (Ctrl+O, Enter) y salga (Ctrl+X). Luego, reinicie el servidor SSH:
# Reinicie el servidor SSH para aplicar los cambios
sudo systemctl restart sshd
¡Asegúrese de poder iniciar sesión por SSH usando la clave antes de cerrar la sesión actual! Si algo sale mal, podría perder el acceso.
4. Configuración del firewall UFW
Uncomplicated Firewall (UFW) es una interfaz fácil de usar para iptables. Lo configuraremos para permitir solo las conexiones entrantes necesarias.
La salida de sudo ufw status verbose debería mostrar que SSH, HTTP y HTTPS están permitidos.
5. Instalación de Fail2ban
Fail2ban protege su servidor contra ataques de fuerza bruta bloqueando las direcciones IP desde las cuales se producen demasiados intentos de inicio de sesión fallidos.
# Instale Fail2ban
sudo apt install -y fail2ban
# Habilite e inicie el servicio Fail2ban
sudo systemctl enable fail2ban
sudo systemctl start fail2ban
# Cree una configuración local para SSH
sudo cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local
# Edite jail.local para habilitar la protección SSH y configurar los parámetros
sudo nano /etc/fail2ban/jail.local
En el archivo /etc/fail2ban/jail.local, encuentre la sección [sshd] y asegúrese de que esté habilitada (enabled = true). También puede configurar bantime (tiempo de bloqueo), findtime (período para detectar intentos) y maxretry (número máximo de intentos).
# Ejemplo de configuración en jail.local
[DEFAULT]
bantime = 1d ; Tiempo de bloqueo (1 día)
findtime = 10m ; Período para detectar intentos (10 minutos)
maxretry = 5 ; Número máximo de intentos antes del bloqueo
[sshd]
enabled = true
port = ssh
logpath = %(sshd_log)s
backend = %(sshd_backend)s
Guarde los cambios y reinicie Fail2ban:
# Reinicie Fail2ban
sudo systemctl restart fail2ban
# Verifique el estado de Fail2ban
sudo fail2ban-client status
sudo fail2ban-client status sshd
Su servidor ahora está protegido de forma básica y listo para la instalación de Apache Guacamole.
Instalación de software — paso a paso
Esquema: Instalación de software — paso a paso
Para instalar Apache Guacamole, necesitaremos varios componentes: el servidor Guacamole (guacd), la aplicación web Guacamole (guacamole-client.war), un contenedor de servlets (Tomcat), una base de datos (PostgreSQL) y un servidor web/proxy inverso (Caddy) para HTTPS. Utilizaremos las versiones actuales del software a partir de 2026, centrándonos en los últimos lanzamientos LTS.
1. Instalación de las dependencias de Guacamole Server (guacd)
guacd es un demonio que maneja la comunicación con protocolos remotos (RDP, VNC, SSH). Necesita varias bibliotecas para soportar estos protocolos.
# Actualice la lista de paquetes
sudo apt update
# Instale las bibliotecas necesarias para guacd (válido para Guacamole 1.5.x/1.6.x)
sudo apt install -y build-essential libcairo2-dev libjpeg-turbo8-dev libpng-dev libtool-bin libossp-uuid-dev \
libavcodec-dev libavformat-dev libavutil-dev libswscale-dev libfreerdp-dev libpango1.0-dev libssh2-1-dev \
libvncserver-dev libtelnet-dev libwebsockets-dev libpulse-dev libssl-dev libvorbis-dev libwebp-dev
2. Compilación e instalación de Guacamole Server (guacd)
Descargaremos el código fuente de guacd, lo compilaremos e instalaremos. En 2026, se esperan las versiones 1.5.x o 1.6.x.
# Cree un directorio temporal para el código fuente
mkdir -p ~/guacamole-build
cd ~/guacamole-build
# Descargue el código fuente de Guacamole Server (reemplace 1.6.0 con la versión estable actual para 2026)
# Puede verificar la versión actual en https://guacamole.apache.org/download/
wget https://apache.org/dyn/closer.cgi?action=download&filename=guacamole/1.6.0/source/guacamole-server-1.6.0.tar.gz -O guacamole-server-1.6.0.tar.gz
# Descomprima el archivo
tar -xzf guacamole-server-1.6.0.tar.gz
cd guacamole-server-1.6.0
# Configure la compilación con soporte para todos los protocolos
# Verifique la salida de ./configure en busca de errores o dependencias faltantes
./configure --with-init-dir=/etc/init.d
# Compile guacd
make
# Instale guacd
sudo make install
# Actualice la caché de bibliotecas dinámicas
sudo ldconfig
# Cree un usuario y grupo para guacd
sudo groupadd --system guacd
sudo useradd --system --no-create-home -g guacd guacd
# Habilite e inicie el servicio guacd
sudo systemctl enable guacd
sudo systemctl start guacd
# Verifique el estado de guacd
sudo systemctl status guacd
3. Instalación de Java Development Kit (JDK) y Tomcat
La aplicación web Guacamole está escrita en Java y requiere un contenedor de servlets, como Apache Tomcat. Utilizaremos OpenJDK y Tomcat 10 (válido para 2026).
# Instale OpenJDK (Java 17 o posterior)
sudo apt install -y openjdk-17-jdk
# Instale Apache Tomcat 10
sudo apt install -y tomcat10 tomcat10-admin
# Asegúrese de que Tomcat esté en ejecución y habilitado
sudo systemctl enable tomcat10
sudo systemctl start tomcat10
# Verifique el estado de Tomcat
sudo systemctl status tomcat10
4. Instalación del servidor de base de datos PostgreSQL
Guacamole utiliza una base de datos para almacenar usuarios, configuraciones de conexión y registros. PostgreSQL es una excelente elección.
# Instale PostgreSQL
sudo apt install -y postgresql postgresql-contrib
# Cambie al usuario postgres para crear la base de datos
sudo -i -u postgres
# Inicie la consola de PostgreSQL
psql
# Cree la base de datos para Guacamole
CREATE DATABASE guacamole_db;
# Cree un usuario para Guacamole con contraseña (reemplace 'your_db_password')
CREATE USER guacamole_user WITH PASSWORD 'your_db_password';
# Otorgue permisos al usuario sobre la base de datos
GRANT ALL PRIVILEGES ON DATABASE guacamole_db TO guacamole_user;
# Salga de la consola de PostgreSQL
\q
# Salga del usuario postgres
exit
5. Despliegue de la aplicación web Guacamole (.war) y extensiones
Descargue la aplicación web Guacamole y las extensiones para autenticación. Utilizaremos la autenticación por base de datos PostgreSQL.
# Cree un directorio para la configuración de Guacamole
sudo mkdir -p /etc/guacamole
# Cree un directorio para las extensiones de Guacamole
sudo mkdir -p /etc/guacamole/extensions
# Cree un directorio para las bibliotecas de Guacamole
sudo mkdir -p /etc/guacamole/lib
# Descargue la aplicación web Guacamole (reemplace 1.6.0 con la versión estable actual)
wget https://apache.org/dyn/closer.cgi?action=download&filename=guacamole/1.6.0/binary/guacamole-1.6.0.war -O ~/guacamole-client.war
# Descargue la extensión para autenticación a través de PostgreSQL
wget https://apache.org/dyn/closer.cgi?action=download&filename=guacamole/1.6.0/binary/guacamole-auth-jdbc-postgresql-1.6.0.jar -O /etc/guacamole/extensions/guacamole-auth-jdbc-postgresql-1.6.0.jar
# Copie el archivo WAR al directorio de aplicaciones web de Tomcat
sudo cp ~/guacamole-client.war /var/lib/tomcat10/webapps/guacamole.war
# Instale el controlador JDBC para PostgreSQL
sudo apt install -y libpostgresql-jdbc-java
# Cree un enlace simbólico al controlador JDBC en el directorio de Guacamole
sudo ln -s /usr/share/java/postgresql-jdbc.jar /etc/guacamole/lib/postgresql-jdbc.jar
# Establezca permisos para los directorios y archivos de Guacamole
sudo chown -R tomcat:tomcat /etc/guacamole
sudo chmod -R 755 /etc/guacamole
6. Inicialización del esquema de la base de datos de Guacamole
Guacamole requiere un esquema específico en la base de datos PostgreSQL. Los scripts para su creación se encuentran en el archivo fuente de guacamole-server.
# Vaya al directorio del código fuente de Guacamole Server
cd ~/guacamole-build/guacamole-server-1.6.0/extensions/guacamole-auth-jdbc-postgresql/schema/
# Ejecute los scripts de creación de esquema en PostgreSQL
# Reemplace 'guacamole_user' y 'guacamole_db' con sus datos
cat 002-create-schema.sql 003-create-admin-user.sql | sudo -u postgres psql guacamole_db
# Vuelva al directorio de inicio
cd ~
Este paso creará las tablas necesarias y agregará el usuario predeterminado guacadmin con la contraseña guacadmin. ¡Asegúrese de cambiar esta contraseña inmediatamente después del primer inicio de sesión!
Configuración
Esquema: Configuración
Después de instalar todos los componentes, es necesario configurarlos correctamente. Esto incluye la configuración de Guacamole para conectarse a la base de datos, la configuración de Tomcat y la instalación del servidor proxy inverso Caddy para proporcionar HTTPS.
1. Configuración de Guacamole (guacamole.properties)
El archivo de configuración principal de Guacamole es guacamole.properties. Este le indica a Guacamole cómo conectarse a la base de datos y a otros componentes.
# Cree o edite el archivo guacamole.properties
sudo nano /etc/guacamole/guacamole.properties
Agregue el siguiente contenido al archivo, reemplazando your_db_password con su contraseña para el usuario de PostgreSQL guacamole_user:
# Hostname and port of guacd
guacd-hostname: localhost
guacd-port: 4822
# PostgreSQL authentication
postgresql-hostname: localhost
postgresql-port: 5432
postgresql-database: guacamole_db
postgresql-username: guacamole_user
postgresql-password: your_db_password
Guarde los cambios (Ctrl+O, Enter) y salga (Ctrl+X).
2. Configuración de Tomcat para usar Guacamole
Es necesario indicarle a Tomcat dónde buscar la configuración de Guacamole. Esto se hace creando el archivo setenv.sh.
# Cree un directorio para la configuración de Tomcat
sudo mkdir -p /etc/tomcat10/conf/Catalina/localhost/
# Cree el archivo setenv.sh para Tomcat
sudo nano /usr/share/tomcat10/bin/setenv.sh
Agregue la siguiente línea a setenv.sh:
#!/bin/bash
export GUACAMOLE_HOME=/etc/guacamole
Guarde los cambios. Haga el archivo ejecutable y reinicie Tomcat:
# Haga el archivo setenv.sh ejecutable
sudo chmod +x /usr/share/tomcat10/bin/setenv.sh
# Reinicie Tomcat para aplicar los cambios
sudo systemctl restart tomcat10
# Verifique los registros de Tomcat en busca de errores
sudo journalctl -u tomcat10 --since "5 minutes ago"
Los registros de Tomcat deben mostrar entradas sobre la carga de Guacamole sin errores críticos.
3. Configuración del servidor Caddy para HTTPS
Caddy es un servidor web moderno con HTTPS automático. Es ideal para Guacamole, ya que obtiene y renueva automáticamente los certificados SSL/TLS a través de Let's Encrypt.
# Instale Caddy.
# Agregue el repositorio de Caddy
sudo apt install -y debian-keyring debian-archive-keyring apt-transport-https
curl -1sLf 'https://dl.cloudsmith.io/public/caddy/stable/gpg.key' | sudo gpg --dearmor -o /usr/share/keyrings/caddy-archive-keyring.gpg
curl -1sLf 'https://dl.cloudsmith.io/public/caddy/stable/debian.deb.txt' | sudo tee /etc/apt/sources.list.d/caddy-stable.list
# Actualice la lista de paquetes e instale Caddy
sudo apt update
sudo apt install -y caddy
Configure el Caddyfile. Reemplace guacamole.yourdomain.com con su dominio real que apunta a la dirección IP de su VPS.
# Edite el Caddyfile
sudo nano /etc/caddy/Caddyfile
Elimine el contenido existente y agregue lo siguiente:
guacamole.yourdomain.com {
reverse_proxy localhost:8080 {
header_up Host {host}
header_up X-Real-IP {remote_ip}
header_up X-Forwarded-For {remote_ip}
header_up X-Forwarded-Proto {scheme}
}
# Habilite la compresión Gzip para mejorar el rendimiento
encode gzip
}
Guarde el archivo y reinicie Caddy:
# Verifique la configuración de Caddy
sudo caddy validate --config /etc/caddy/Caddyfile
# Reinicie Caddy
sudo systemctl reload caddy
# Asegúrese de que Caddy esté en ejecución
sudo systemctl status caddy
Ahora su Apache Guacamole debería ser accesible a través de HTTPS en https://guacamole.yourdomain.com.
4. Verificación de la funcionalidad
Abra un navegador web y vaya a su nombre de dominio (por ejemplo, https://guacamole.yourdomain.com). Debería ver la página de inicio de sesión de Guacamole.
Utilice las credenciales predeterminadas: Nombre de usuario: guacadmin, Contraseña: guacadmin. ¡Cambie esta contraseña inmediatamente después del primer inicio de sesión!
Después de iniciar sesión, puede agregar una nueva conexión. Por ejemplo, para SSH:
Haga clic en "New Connection".
Seleccione "SSH" como protocolo.
En el campo "Hostname", especifique la dirección IP o el dominio de su servidor SSH de destino.
En el campo "Port", especifique 22.
En los campos "Username" y "Password", especifique las credenciales para el acceso SSH.
Guarde la conexión e intente conectarse a ella.
Si encuentra problemas, verifique los registros de Tomcat (sudo journalctl -u tomcat10), Caddy (sudo journalctl -u caddy) y Guacd (sudo journalctl -u guacd) en busca de errores.
Copias de seguridad y mantenimiento
Diagrama: Copias de seguridad y mantenimiento
Las copias de seguridad regulares y el mantenimiento del sistema son críticamente importantes para el funcionamiento estable y seguro de Apache Guacamole. La pérdida de datos o el software desactualizado pueden provocar problemas graves.
1. Qué respaldar
Para Guacamole, es necesario respaldar regularmente los siguientes componentes:
Base de datos PostgreSQL: Contiene todos los usuarios, sus configuraciones, definiciones de conexión y registros de auditoría. Este es el componente más importante.
Archivos de configuración de Guacamole:
/etc/guacamole/guacamole.properties
/etc/guacamole/extensions/ (todos los archivos JAR de extensiones)
/etc/guacamole/lib/ (controlador JDBC)
Configuración de Caddy:/etc/caddy/Caddyfile
Configuración de Tomcat:/usr/share/tomcat10/bin/setenv.sh (y, posiblemente, otras configuraciones personalizadas)
Claves SSH: Si las utiliza para la autenticación de Guacamole en los servidores de destino (almacenadas en /etc/guacamole/keys/ o ubicaciones similares).
2. Script sencillo de copia de seguridad automática
Crearemos un script sencillo que realizará la copia de seguridad de la base de datos y los archivos de configuración, y luego los empaquetará. Para el almacenamiento, se puede utilizar un almacenamiento de objetos externo compatible con S3 o un VPS separado.
Para las copias de seguridad de la base de datos PostgreSQL utilizaremos pg_dump. Para los archivos, tar. Para enviar a S3 se puede usar s3cmd o awscli, pero para simplificar, simplemente crearemos un archivo.
# Cree el directorio para los scripts de copia de seguridad
sudo mkdir -p /opt/backup_scripts
sudo chown youruser:youruser /opt/backup_scripts
# Cree el archivo del script de copia de seguridad
nano /opt/backup_scripts/guacamole_backup.sh
Añada el siguiente contenido al archivo guacamole_backup.sh. Reemplace your_db_password, guacamole_user y guacamole_db con sus datos. También especifique la ruta al directorio donde se guardarán las copias de seguridad (por ejemplo, /var/backups/guacamole).
#!/bin/bash
# Variables
BACKUP_DIR="/var/backups/guacamole"
DATE=$(date +%Y%m%d%H%M%S)
DB_NAME="guacamole_db"
DB_USER="guacamole_user"
DB_PASSWORD="your_db_password" # ¡En producción, use .pgpass o variables de entorno!
# Cree el directorio para las copias de seguridad, si no existe
mkdir -p "$BACKUP_DIR"
# 1. Copia de seguridad de la base de datos PostgreSQL
echo "Volcando base de datos PostgreSQL..."
PGPASSWORD="$DB_PASSWORD" pg_dump -U "$DB_USER" -h localhost "$DB_NAME" > "$BACKUP_DIR/guacamole_db_$DATE.sql"
if [ $? -eq 0 ]; then
echo "Copia de seguridad de la base de datos PostgreSQL exitosa: $BACKUP_DIR/guacamole_db_$DATE.sql"
else
echo "ERROR: Falló la copia de seguridad de la base de datos PostgreSQL."
exit 1
fi
# 2. Copia de seguridad de los archivos de configuración de Guacamole y Caddy
echo "Archivando archivos de configuración..."
tar -czf "$BACKUP_DIR/guacamole_configs_$DATE.tar.gz" \
/etc/guacamole \
/etc/caddy/Caddyfile \
/usr/share/tomcat10/bin/setenv.sh
if [ $? -eq 0 ]; then
echo "Copia de seguridad de los archivos de configuración exitosa: $BACKUP_DIR/guacamole_configs_$DATE.tar.gz"
else
echo "ERROR: Falló la copia de seguridad de los archivos de configuración."
exit 1
fi
# 3. Limpieza de copias de seguridad antiguas (conservamos los últimos 7 días)
echo "Limpiando copias de seguridad antiguas..."
find "$BACKUP_DIR" -type f -name "*.sql" -mtime +7 -delete
find "$BACKUP_DIR" -type f -name "*.tar.gz" -mtime +7 -delete
echo "Proceso de copia de seguridad completado."
# IMPORTANTE: Envío de copias de seguridad a almacenamiento externo
# Aquí puede añadir comandos para enviar archivos a S3, FTP/SFTP remoto,
# o usar herramientas especializadas como restic o borg.
# Ejemplo para S3 con awscli (requiere instalación y configuración previa de awscli):
# aws s3 cp "$BACKUP_DIR/guacamole_db_$DATE.sql" s3://your-s3-bucket/guacamole/
# aws s3 cp "$BACKUP_DIR/guacamole_configs_$DATE.tar.gz" s3://your-s3-bucket/guacamole/
Guarde el archivo, hágalo ejecutable y configure Cron para que se ejecute regularmente:
# Haga el script ejecutable
chmod +x /opt/backup_scripts/guacamole_backup.sh
# Cree el directorio para guardar las copias de seguridad
sudo mkdir -p /var/backups/guacamole
sudo chown youruser:youruser /var/backups/guacamole
# Abra crontab para el usuario actual
crontab -e
Añada la siguiente línea para ejecutar la copia de seguridad diariamente a las 03:00 de la mañana:
Guarde y cierre crontab. Ahora las copias de seguridad se crearán automáticamente.
3. Dónde almacenar las copias de seguridad
Es extremadamente importante almacenar las copias de seguridad en un recurso separado del servidor principal. Opciones:
Almacenamiento de objetos externo compatible con S3: La opción más recomendada. Fiable, escalable y relativamente económica.
VPS separado: Se puede configurar un segundo VPS pequeño exclusivamente para almacenar copias de seguridad de diferentes servidores.
NAS/Almacenamiento en red: Si tiene su propio equipo.
Servidor FTP/SFTP: Una opción sencilla, pero menos fiable si no se configura el cifrado y el control de integridad.
¡Nunca almacene las únicas copias de seguridad en el mismo servidor que está respaldando!
4. Actualizaciones: continuas vs ventana de mantenimiento
Las actualizaciones regulares del software son importantes para la seguridad y para obtener nuevas funciones. El enfoque de las actualizaciones depende de la criticidad de su sistema.
Rolling updates (actualizaciones continuas): Adecuado para sistemas menos críticos o sistemas con alta disponibilidad, donde hay un clúster y se pueden actualizar los nodos por turnos. Para un VPS Guacamole individual, esto significa aplicar las actualizaciones tan pronto como estén disponibles.
Maintenance window (ventana de mantenimiento): El enfoque preferido para la mayoría de los sistemas de producción, incluido Guacamole en un solo VPS. Se asigna un tiempo específico (por ejemplo, una vez al mes por la noche) para realizar las actualizaciones, probarlas y solucionar posibles problemas.
Proceso de actualización recomendado:
Cree una copia de seguridad completa antes de iniciar cualquier actualización.
Actualice los componentes de Guacamole (si hay nuevas versiones disponibles):
Descargue las nuevas versiones de guacamole-server (para guacd) y guacamole-client.war, así como las extensiones.
Detenga Tomcat y Guacd.
Reemplace los archivos antiguos por los nuevos.
Inicie los servicios.
Verifique el funcionamiento: Después de cada actualización, asegúrese de que Guacamole funciona correctamente y de que puede conectarse a los diferentes sistemas de destino.
Siempre lea el changelog y las instrucciones de actualización en el sitio web oficial de Apache Guacamole antes de actualizar los componentes principales.
Solución de problemas + Preguntas frecuentes
Aquí se recopilan los problemas típicos que pueden surgir al configurar Apache Guacamole y las respuestas a las preguntas frecuentes.
No puedo conectarme a Guacamole por nombre de dominio (error 502 Bad Gateway o Connection Refused)
Qué verificar:
Asegúrese de que su dominio (por ejemplo, guacamole.yourdomain.com) apunte correctamente a la dirección IP de su VPS en los registros DNS.
Verifique que Caddy Server esté en ejecución: sudo systemctl status caddy.
Revise los registros de Caddy: sudo journalctl -u caddy --since "5 minutes ago". Busque errores relacionados con la vinculación de puertos o el proxy.
Asegúrese de que Tomcat esté en ejecución y escuchando en el puerto 8080: sudo systemctl status tomcat10 y sudo ss -tulpn | grep 8080.
Verifique que el firewall UFW permita las conexiones entrantes en los puertos 80 y 443: sudo ufw status verbose.
Cómo solucionar: Corrija los registros DNS, reinicie Caddy o Tomcat, asegúrese de que no haya otros procesos ocupando el puerto 80/443 (para Caddy) o 8080 (para Tomcat), revise las reglas de UFW.
La página de Guacamole se carga, pero no puedo iniciar sesión (credenciales incorrectas o error de base de datos)
Qué verificar:
Revise los registros de Tomcat: sudo journalctl -u tomcat10 --since "5 minutes ago". Busque errores relacionados con la conexión a la base de datos o la autenticación.
Asegúrese de que PostgreSQL esté en ejecución: sudo systemctl status postgresql.
Verifique el contenido de /etc/guacamole/guacamole.properties. Asegúrese de que postgresql-hostname, postgresql-port, postgresql-database, postgresql-username y postgresql-password estén especificados correctamente.
Asegúrese de que el usuario guacamole_user tenga permisos sobre la base de datos guacamole_db.
Intente iniciar sesión con las credenciales predeterminadas guacadmin/guacadmin. Si funciona, pero su usuario no, es posible que haya un problema con la creación del usuario o sus permisos.
Cómo solucionar: Corrija los errores tipográficos en guacamole.properties, reinicie Tomcat, verifique la contraseña del usuario de PostgreSQL, asegúrese de que el esquema de la base de datos se haya inicializado correctamente.
No se puede conectar a un servidor remoto (RDP/VNC/SSH) a través de Guacamole
Qué verificar:
Revise los registros de guacd: sudo journalctl -u guacd --since "5 minutes ago". Busque errores relacionados con la conexión al host remoto o problemas de protocolo.
Asegúrese de que guacd esté en ejecución: sudo systemctl status guacd.
Verifique que el servidor de destino sea accesible desde su VPS (por ejemplo, ping target_ip, telnet target_ip ssh_port).
Asegúrese de que el firewall en el servidor de destino (y en su VPS, si bloquea las salientes) permita las conexiones entrantes en el puerto correspondiente (22 para SSH, 3389 para RDP, 5900 para VNC).
Verifique la configuración de conexión en la interfaz web de Guacamole (hostname, port, credentials).
Cómo solucionar: Corrija la configuración del firewall, verifique la disponibilidad del servidor de destino, asegúrese de que las credenciales para el servidor remoto sean correctas, reinicie guacd.
¿Qué configuración mínima de VPS es adecuada para Apache Guacamole?
Para uno o dos usuarios simultáneos y un uso no intensivo, un VPS con 2 núcleos de CPU, 2 GB de RAM y 40 GB de disco SSD será mínimamente adecuado. Sin embargo, si planea un uso más activo, especialmente con RDP para interfaces gráficas o para varios usuarios, se recomienda encarecidamente una configuración con 4 núcleos de CPU, 4 GB de RAM y 80 GB de NVMe SSD. Esto proporcionará un rendimiento y una estabilidad significativamente mejores, evitando retrasos y bloqueos al transcodificar transmisiones de video.
¿Qué elegir — VPS o dedicado para esta tarea?
Para la mayoría de los escenarios, incluido el uso de Guacamole por un equipo pequeño o un usuario individual, un VPS es la opción óptima. Ofrece un rendimiento suficiente a un costo significativamente menor y mayor flexibilidad en la gestión. Un servidor dedicado se vuelve necesario si espera una carga muy alta (más de 20-30 usuarios simultáneos), requiere recursos físicos garantizados de CPU y RAM, o si tiene requisitos regulatorios estrictos para el aislamiento completo del hardware. Para empezar y escalar en la mayoría de los casos, un VPS será la mejor solución, permitiendo actualizar fácilmente el plan a medida que crecen las necesidades.
¿Cómo restablecer la contraseña del administrador de Guacamole?
Qué verificar: Si olvidó la contraseña de guacadmin, puede restablecerla ejecutando una consulta SQL en la base de datos PostgreSQL.
Cómo solucionar:
# Conéctese a PostgreSQL como el usuario postgres
sudo -i -u postgres
# Conéctese a la base de datos Guacamole
psql guacamole_db
# Actualice la contraseña para el usuario guacadmin (reemplace 'new_strong_password')
# La contraseña debe estar hasheada con SHA-256. En este ejemplo, la restablecemos a 'new_strong_password'
# y Guacamole la hasheará automáticamente al primer inicio de sesión si la especifica como texto plano.
# Para un restablecimiento seguro, es mejor generar el hash:
# SELECT ENCODE(SHA256('new_strong_password'::bytea), 'hex');
# Y luego usarlo:
UPDATE guacamole_user SET password_hash = ENCODE(SHA256('new_strong_password'::bytea), 'hex'), password_salt = NULL WHERE username = 'guacadmin';
# Si solo desea restablecerlo a 'guacadmin' para luego cambiarlo:
# UPDATE guacamole_user SET password_hash = 'C634887019799295598BB17F9A906F6F89304F7695D5D1426477546875931D80', password_salt = 'C634887019799295598BB17F9A906F6F89304F7695D5D1426477546875931D80' WHERE username = 'guacadmin';
# (este es el hash para 'guacadmin' con la sal 'guacadmin', que era el predeterminado en la inicialización)
# Salga de psql
\q
# Salga del usuario postgres
exit
# Reinicie Tomcat
sudo systemctl restart tomcat10
Después de esto, podrá iniciar sesión con la nueva contraseña.
Conclusiones y próximos pasos
Diagrama: Conclusiones y próximos pasos
Ha configurado con éxito Apache Guacamole en su VPS, obteniendo un punto de acceso centralizado y seguro a su infraestructura a través de cualquier navegador web. Esto simplifica significativamente la gestión de servidores y estaciones de trabajo remotas, aumentando la comodidad y flexibilidad de su trabajo. Ahora tiene una potente herramienta para la administración remota que puede escalar y adaptar a sus necesidades.
Aquí hay algunos próximos pasos que puede tomar para mejorar aún más su sistema:
Integración con autenticación externa: Considere integrar Guacamole con LDAP, Active Directory, RADIUS o SAML para la gestión centralizada de usuarios, si ya dispone de dicho sistema.
Configuración detallada de permisos: Cree grupos de usuarios más detallados y configure sus derechos de acceso a conexiones específicas para garantizar el principio de mínimos privilegios.
Monitoreo y registro: Configure un monitoreo centralizado de los registros de Guacamole y los recursos del sistema del VPS para identificar y resolver rápidamente problemas de rendimiento o seguridad.
Implementación de autenticación de dos factores (2FA): Para mejorar la seguridad, considere añadir 2FA a su Guacamole, utilizando TOTP u otros métodos.