Autenticación de Apache Guacamole contra Directorio Activo

Ya hemos hablado de las maravillas de Apache Guacamole en alguna otra ocasión, esta plataforma de conexión segura a nuestro entorno vía RDP, SSH, VNC… ideal para empresas pequeñas, labs o formaciones. Hoy veremos cómo integrarlo en Directorio Activo y publicar determinados recursos a distintos usuarios!

Lo dicho, en este anterior post, ya vimos cómo instalar Apache Guacamole, y cómo securizarlo tras un proxy inverso. Este producto lo usaremos para publicar a internet de manera segura cualquier escritorio remoto mediante RDP, al igual que VNC o SSH entre otros. Podremos permitir de manera segura la conexión remota de nuestros usuarios a la organización, permitiremos que se conecten bien a sus puestos tradicionales, o por ejemplo contra un pool de máquinas que ofrezcan un escritorio, como pueda ser algo de VDI o unos servidores de Escritorio Remoto.

La idea de este post será permitir que ciertos usuarios del Directorio Activo puedan conectarse con su propio usuario y así no utilizar usuarios locales, cada uno con una contraseña distinta… Y una vez conectado Apache Guacamole con el AD, ya podremos crear las conexiones que queremos publicar luego a nuestros usuarios.

Primero instalamos la extensión para la autenticación LDAP :

wget http://apache.mirror.iphh.net/guacamole/1.3.0/binary/guacamole-auth-ldap-1.3.0.tar.gz
tar xvzf guacamole-auth-ldap-1.3.0.tar.gz
sudo cp ./guacamole-auth-ldap-1.3.0/guacamole-auth-ldap-1.3.0.jar /etc/guacamole/extensions/

 

Editamos y añadimos en el fichero de configuración de Apache Guacamole /etc/guacamole/guacamole.properties la configuración de conexión a Directorio Activo.

guacd-hostname: localhost
guacd-port: 4822
#user-mapping: /etc/guacamole/user-mapping.xml
#auth-provider: net.sourceforge.guacamole.net.basic.BasicFileAuthenticationProvider
auth-provider: net.sourceforge.guacamole.net.auth.ldap.LDAPAuthenticationProvider
ldap-hostname: DIRECCIÓN_IP_CONTROLADOR_DE_DOMINIO
ldap-port: 389 # O seguro: 636
ldap-user-base-dn: OU=ruta,DC=dominio,DC=local
ldap-username-attribute: samAccountName
ldap-config-base-dn: OU=ruta,DC=dominio,DC=local
ldap-encryption-method: none # O seguro: ssl, starttls
ldap-search-bind-dn:cn=usuario_LDAP,OU=ruta,DC=dominio,DC=local
ldap-search-bind-password:CONTRASEÑA

 

Y reiniciamos Tomcat:

sudo systemctl restart tomcat9

 

Ahora tenemos 2 opciones, o tocar y extender el esquema de nuestro AD para añadir unos atributos a los usuarios, que como que no… o montar un MySQL en el propio equipo de Guacamole, donde se almacenarán en una BD los usuarios y sus asignaciones. Verdad que esta última da menos miedo… Así que instalamos MariaDB:

sudo apt-get install mariadb-server mariadb-client

 

Establecemos la zona horaria en MariaDB editando el fichero /etc/mysql/mariadb.conf.d/50-server.cnf

[mysqld]
...
default-time-zone='+01:00'
...

 

Es hora de crear la BD y el usuario para Guacamole, primero nos conectamos a MySQL:

sudo mysql -uroot

 

Y lo dicho, creamos la base de datos, el usuario y damos los permisos correspondientes:

CREATE DATABASE bd_guacamole;
CREATE USER 'USUARIO_GUACAMOLE'@'localhost' IDENTIFIED BY 'CONTRASEÑA';
GRANT SELECT,INSERT,UPDATE,DELETE ON bd_guacamole.* to 'USUARIO_GUACAMOLE'@'localhost';
FLUSH PRIVILEGES;

 

Para poder utilizar la autenticación con MySQL, primero descargamos la siguiente extensión https://apache.org/dyn/closer.lua/guacamole/1.3.0/binary/guacamole-auth-jdbc-1.3.0.tar.gz?action=download la descargamos y la instalamos:

tar zxfv guacamole-auth-jdbc-1.3.0.tar.gz
sudo cp guacamole-auth-jdbc-1.3.0/mysql/guacamole-auth-jdbc-mysql-1.3.0.jar /etc/guacamole/extensions/

 

Descargamos el conector https://dev.mysql.com/downloads/connector/j/ para nuestro Ubuntu, en mi caso un 20.04 (https://dev.mysql.com/downloads/file/?id=504646) y lo instalamos:

sudo dpkg -i mysql-connector-java_8.0.25-1ubuntu20.04_all.deb
sudo ln -s /usr/share/java/mysql-connector-java-8.0.25.jar /etc/guacamole/lib/.

 

Creamos el esquema de la BD:

cat guacamole-auth-jdbc-1.3.0/mysql/schema/*.sql | sudo mysql -uroot bd_guacamole

 

Editamos nuestro querido fichero de configuración de Guacamole /etc/guacamole/guacamole.properties y añadimos al final:

mysql-hostname: localhost
mysql-port:3306
mysql-database: bd_guacamole
mysql-username: USUARIO_GUACAMOLE
mysql-password: CONTRASEÑA

 

Y reiniciamos los servicios de Tomcat y Guacd para recargar los cambios anteriores:

sudo systemctl restart tomcat9 guacd

 

Entramos en Guacamole como guacadmin/guacadmin y le cambiamos la contraseña, pero, ¡ojo! 

Tenemos que crear en nuestro Directorio Activo (dentro de nuestra Base DN) un usuario llamado guacadmin, y NO debe tener la misma contraseña que aquí. ya que con el que nos hemos logueado es el usuario guacadmin de MySQL y el otro será para LDAP. Ya que podremos loguearnos con usuarios LDAP y usuarios MySQL

 

Y si nos logueamos de nuevo en Guacamole con guacadmin y la contraseña del AD podremos ver todos los usuarios de la Base DN desde «Configuración» > «Usuarios».

 

Pues lo siguiente ya será crear las distintas conexiones que queramos, luego ya las asignaremos, desde «Configuración» > «Conexiones» > «Nueva Conexión»

 

Así que le damos un nombre a la conexión, elegimos el protocolo, recordar que podrá ser RDP para Escritorio Remoto, SSH, Telnet, VNC o Kubernetes,

 

Más abajo, en los parámetros, indicaremos la dirección IP local de la máquina de destino, podríamos pre-rellenar los campos del usuario y contraseña, o dejarlos vacíos para que el usuario los escriba, o podemos también coger el usuario de la sesión con la que se logueó e indicarlo mediante estas dos variables:

${GUAC_USERNAME}
${GUAC_PASSWORD}

 

Y nada, luego ya en la configuración de cada usuario podremos asignarle las conexiones de manera individual.

 

Al loguearse ya cada usuario con su cuenta, pues si sólo le asignamos 1 conexión, se le logueará automáticamente contra ese equipo. Y si le hemos asignado varias, al conectarse él podrá elegir a qué sesión conectarse 🙂

En un siguiente post veremos cómo configurar un doble factor de autenticación para asegurar aún más los accesos. Como siempre, esperando que os sean interesantes los posts, ¡abrazos!

 

Héctor Herrero
Últimas entradas de Héctor Herrero (ver todo)