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!