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!