gsuite

Autentificacion ldap – freeradius en gsuite con docker para empresas y centros educativos

En esta ocasión vamos a realizar una cosa un poco mas complicada de lo normal, y es la conexión de nuestro sistema de autentificación radius al la suite gsuite de google para que podemos utilizar las claves de nuestra cuenta de google para autentificarnos en la wifi de nuestra empresa o colegio.

Gsuite es un compendio de herramientas de gestión de usuarios y dispositivos que google pone a la disposición de empresas para que podamos utilizar su ecosistema en nuestro negocio. Para los centros educativos es gratuita para el resto supone un desembolso económico.

gsuiteRadius es un sistema de autentificación de usuarios que se utiliza principalmente para las redes wifi en protocolo wpa2/enterprise, en el en vez de pedirnos una clave para conectarnos a la nuestra wifi nos pregunta una clave y una contraseña, que son distintas porque permite una contraseña para cada uno de los usuarios de nuestro sistema, este sistema por regla general esta instalado en servidores.

En este articulo explicamos como podéis hacer para conectarnos a gsuite mediante radius para autenticar usuarios, por lo que la primera sección se basa en la conexión y la configuracion de gsuite para poder usarlo, la segunda en la instalación de freeradius mediante un docker para el que no tenga montado un sistema radius por lo que la segunda sección es opcional, y la tercera como modificar los certificados para que nos salgan los datos de nuestro centro en la conexión de la wifi.

Comencemos…

1. Preparar el sistema en gsuite

Añadir clientes ldap

Para comenzar con el servicio LDAP seguro, deberá agregar clientes LDAP al servicio.

  • Inicie sesión en la Consola del administrador de Google en admin.google.com . Asegúrese de iniciar sesión con su cuenta de super administrador y no con su cuenta personal de Gmail.

admin

  • Vaya a Aplicaciones> LDAP

ldap

  • Haga clic en AGREGAR CLIENTE
  • Escriba un nombre en el campo de nombre del cliente LDAP , por ejemplo, Atlassian Jira .
    Opcional: escriba una descripción para el cliente LDAP; por ejemplo, conexión para freeradius También puede usar la descripción para agregar detalles de contacto o para especificar el propietario de la aplicación.
  • Haz clic en CONTINUAR .

Después de agregar el cliente LDAP, deberá configurar los permisos de acceso, conectar el cliente LDAP al servicio LDAP seguro y luego cambiar el estado del servicio a Activado para el cliente LDAP.

Configurar permisos de acceso

Después de agregar el cliente LDAP, deberá configurar los permisos de acceso para el cliente. La página de permisos de acceso, que se muestra automáticamente después de agregar el cliente LDAP, incluye tres secciones donde puede hacer lo siguiente:

  • Especifique el nivel de acceso del cliente LDAP para verificar las credenciales del usuario: cuando un usuario intenta iniciar sesión en la aplicación, esta configuración especifica a qué unidades organizativas puede acceder el cliente LDAP para verificar las credenciales del usuario. Los usuarios que no están en una unidad organizativa seleccionada no pueden iniciar sesión en la aplicación. Para ello debemos crear primero un grupo o unidad organizativa donde puedas meter los usuarios que puedan utilizar la wifi, o en su caso seleccionar directamente quienes puedan utilizarla.

credenciales

  • Especifique el nivel de acceso del cliente LDAP para leer la información del usuario: esta configuración especifica a qué unidades organizativas y grupos puede acceder el cliente LDAP para recuperar información adicional del usuario. En nuestro caso hemos utilizado ninguno ya que solo se utiliza para validar los usuarios.

  • Especifique si el cliente LDAP puede leer la información del grupo: esta configuración especifica si el cliente LDAP puede leer los detalles del grupo y verificar la membresía del grupo de un usuario para fines tales como el rol de un usuario en la aplicación.Más tarde, puede volver a la página de permisos de acceso para realizar cambios en esta configuración. Para obtener más detalles e instrucciones, consulte las secciones a continuación.

Importante: Ciertos clientes LDAP como Atlassian Jira y SSSD realizan una búsqueda de usuarios para obtener más información sobre un usuario durante la autenticación del usuario. Para asegurarse de que la autenticación de usuario funcione correctamente para dichos clientes LDAP, deberá activar Leer información de usuario para todas las unidades organizativas donde está activada Verificar credenciales de usuario .

Descargar certificado generado

Después de terminar de configurar los permisos de acceso y hacer clic en AGREGAR CLIENTE LDAP , el certificado se genera automáticamente. Si hay un error o retraso en el proceso, puede hacer clic en Reintentar , o más tarde puede volver a la página de detalles para que el cliente LDAP vuelva a intentarlo.

Una vez que se genera el certificado, debe descargarlo. Durante los pasos de configuración para su cliente LDAP, haga clic en Descargar certificado .

Opcionalmente, puede hacer clic en CONTINUAR CON LOS DETALLES DEL CLIENTE y descargar el certificado de la página de detalles del Cliente más adelante.

Credenciales de acceso al ldap del gsuite

Para poder realizar la conexión al ldap de google a través de nuestro radius necesitaremos a parte del certificado unas credenciales especificas de acceso al ldap de gsuite (usuario/password)

Para ello en el panel de gsuite APLICACIONES/LDAP en el cliente antes generado en la zona de autentificación le damos a credenciales de usuario:

y le damos a generar credenciales:

esto te genera un usuario y una contraseña

OJO NO SE PUEDE CONSULTAR DESPUÉS POR LO QUE HAY QUE COPIARLA EN ESTE PUNTO TANTO EL USUARIO COMO LA CONTRASEÑA, SI NO TENDREMOS QUE VOLVER A GENERARLA

 

En este punto ya tendremos que tener:

  • usuario y contraseña de acceso al ldap
  • certificados de gsuite (.key y .crt)
  • haber metido algun usuario de prueba en el grupo o unidad para poder comprobar que valide.

2.- Contenedor docker freeradius para conexión ldap gsuite

Docker-compose

Vamos a utilizar el siguiente contenedor docker con el docker compose de github:

https://github.com/hacor/unifi-freeradius-ldap

Para ello se asume que tenemos ya un servidor montado con docker para poder ejecutarlos o en su caso si ya tenemos un sistema freradius en nuestro sistema, basándonos en este docker haríamos lo mismo en dicho sistema para poder realizar la conexión.

En el docker que hemos visto existe el siguiente docker-compose:

versión : ‘ 3.2 ‘
servicios :
unifi-freeradius-ldap :
imagen : haor / freeradius-google-ldap: último
# descomenta esta línea para depurar
# comando: freeradius -X
env_file : env / freeradius.env
construir :
dockerfile : Dockerfile
contexto : .
imagen : haor / freeradius-google-ldap: último
# comando: -X
env_file : env / freeradius.env

añadir aquí para poder acceder al freeradius desde el exterior:
ports:
-”1812:1812”
volúmenes :
– tipo : enlace
fuente : ./certs
objetivo : / certs
network_mode : host

Para ejecutar con éxito el contenedor, las siguientes variables de entorno se pasan al contenedor. Si no se especifica todos los parámetros, el contenedor fallará.

Cambie el nombre del env/freeradius.env.sample a env/freeradius.env y realice los cambios necesarios.

  • ACCESS_ALLOWED_CIDR: El CIDR (p. Ej. 192.168.1.1/24) que tiene acceso al servidor freeradius. Probablemente sea el rango de IP de sus puntos de acceso Wifi. Osea la ip de los puntos de acceso 192,168,x,0/24
  • BASE_DOMAIN: La primera parte de su nombre de dominio utilizada en el paquete de Google: example si su nombre de dominio es example.com En nuestro caso por ejemplo BASE_DOMAIN=subdominio.dominio
  • DOMAIN_EXTENSTION: La última parte de su nombre de dominio utilizada en el paquete de Google: com si su nombre de dominio es example.com En nuestro caso DOMAIN_EXTENSION=com
  • GOOGLE_LDAP_USERNAME: El nombre de usuario que Google le dio al configurar las credenciales del Cliente
  • GOOGLE_LDAP_PASSWORD: La contraseña que Google le proporcionó al configurar las credenciales del Cliente
  • SHARED_SECRET: El secreto compartido necesitaba poder hablar con el servidor FreeRADIUS Esta es la que se utilizara para que las antenas puedan hablar con este freeradius por ejemplo prueba90

Para ejecutar el contenedor también necesita el directorio donde se encuentran los certificados que recibió (y extrajo) de Google. Estos archivos deben montarse en la carpeta /certs y cambiarse de nombre a ldap-client.crt y ldap-client.key respectivamente.

Ahora podremos ejecutar el contenedor freeradius-gsuite:

docker-compose up

Si encuentra problemas, puede ser interesante seguir la salida del contenedor descomentando la linea command:-X en docker-compose.yaml

Ahora ya esta funcionando y podéis comprobar intentando acceder a través del comando radtest:

radtest usuario.test1 password 192.168.X.X 1812 test1234

y tiene que dar este resultado:

Sending Access-Request of id 161 to 192.168.x.x port 1812
User-Name = «usuario.test1»
User-Password = «password»
NAS-IP-Address = 127.0.1.1
NAS-Port = 1812
Message-Authenticator = 0x00000000000000000000000000000000
rad_recv: Access-Accept packet from host 192.168.1.3 port 1812, id=161, length=20

En caso contrario saldria:

Access-Reject packet

Bien ahora si utilizamos nuestro wifi apuntando a nuestro freeradius debe de dar acceso o denegar según nuestro usuario.

3.- Configuraciones de certificados y limitaciones

PERSONALIZACION DE CERTIFICADOS

Dentro del contenedor en la carpeta \etc\raddb\certs\README esta como configurar los certificados para su uso pero lo vamos a resumir directamente aquí.

Entramos en el contenedor con la instrucción:

sudo docker exec -i -t NOMBRE DEL CONTENEDOR /bin/bash

y nos dirigimos a /etc/raddb/certs en el cual estan los certificados de muestra

editamos el ca.cnf

[certificate_authority]
countryName = ES
stateOrProvinceName = Madrid
localityName = madrid
organizationName = Organizacion
emailAddress = correo@dominio.com
commonName = «Autoridad certificadora»

modificamos las contraseñas y los datos de la certificación marcados en rojo.

Guardamos y ejecutamos las ordenes para generar los certificados.

make ca.pem
make ca.der

mismo procedimiento para server.cnf:

[server]
countryName = ES
stateOrProvinceName = MAdrid
localityName = madrid
organizationName =  Organizacion
emailAddress = correo@dominio.com
commonName = “certificado servidor”

y ejecutamos la creación de los certificados:

make server.pem
make server.csr

ahora copiamos los ficheros a la raiz a /certs:

  • ca.key
  • ca.pem
  • dh
  • server.crt
  • server.csr
  • server.key
  • server.p12
  • server.pem

Salimos del contenedor con exit y comprobamos que el directorio del docker en la carpeta certs están los certificados.

Paramos el contenedor con:

docker stop NOMBRE DEL CONTENEDOR

y lo volvemos a generar para que coja los certificados nuevos:

docker-compose up

Si da error matar el contenedor y volver a generarlo, ya que las configuraciones y los certificados están fuera del contenedor en nuestro docker.

Conclusión

De esta forma hemos generado una forma de controlar los usuarios de nuestra organización para el acceso a la wifi, podemos jugar con los grupos y las unidades organizativas para meter o sacar a usuarios para que puedan acceder, ademas esto nos permite mediante el radius de nuestro sistema wifi ver que usuarios están conectados a nuestros sistemas ya que aparece en dicho software generalmente los usuarios radius conectados al sistema, una manera bastante efectiva de controlar quien debe conectarse, controlar las conexiones y controlar el trafico.

Si te ha gustado el articulo deja un comentario. Gracias.

Mostrar 5 comentarios

5 comentarios

  1. Jesús Martín

    Saludos. Me parece muy interesante la aportación sobre la autentificacion ldap – freeradius en gsuite.
    No soy informático sino profesor (de Lengua) de un colegio y estoy interesado en utilizar este procedimiento. En nuestro caso tenemos Google Education Fundamentals. La wifi es Aruba. El objetivo es utilizar el usuario y contraseña de las cuentas de correo (gmail) en el servidor freeradius para que tanto profesores como alumnos puedan autenticarse en la wifi. Entiendo que si todo va bien, cuando un alumno cambia su contraseña en gsuite automáticamente se cambiará también en radius.
    Mi duda es: ¿la comunicación entre freeradius y gsuite es directa o bien necesito, a modo de pasarela, otro cliente ldap? Me ha descolocado un poco que siendo un tutorial con freeradius, se ponga a modo de ejemplo como cliente LDAP, Atlassian Jira. Entendía que según esto: https://support.google.com/cloudidentity/answer/9089736?hl=es#zippy=%2Cfreeradius, freeradius ya era un posible cliente LDAP en sí.
    La única limitación que puedo ver de utilizar freeradius directamente es que solo valdría para la wifi y gsuite. Si quisiera utilizar también ese usuario y contraseña en Moodle, ya no sería posible, a menos que comunique a todos entre sí mediante otro cliente LDAP, como OpenLDAP. ¿Es así?
    En fin, ya sé que probablemente me esté liando y que no utilice los términos con propiedad. Agradezco cualquier orientación.

    Gracias.
    Jesús Martín

    • Buenas Jesús:

      El ldap en si es el mismo google suite, y freeradius es un sistema de autentificación que necesita una base de datos digamos para verificar si existe dicho usuario, en tal caso lo que hace el freeradius simplemente es preguntar si existe dicho usuario y contraseña en el ldap (en nuestro caso google suite) y según le responda le deja conectarse o no.

      Freeradius se utiliza principalmente para las wifis a través de wpa2 enterprise, donde le especificas a la wifi que en vez de utilizar una clave wifi utilice un usuario y contraseña y te preguntara de donde, pues del servicio radius (freeradius) y este a su vez se conectara a google para verificar si existe dicho usuario.

      Google solo es ldap por lo que no podemos autentificarnos contra el directamente porque ni la wifi te deja poner un ldap como servicio de autentificación ni en google existe un servicio radius para conectar la wifi directamente a ella, por eso hacemos una especie de puente que es el freeradius para permitir dicha autenticación:

      WIFI(WPA2 ENTERPRISE RADIUS)–> FREERADIUS –> LDAP GOOGLE SUITE

      En el caso de Moodle no lo se, pero seguramente podrás conectarlo al ldap de google suite directo con algún plugin, el articulo es solo para conectar las wifis mediante radius que es el único sistema para la autentificación de wifis.

      Espero que te sirva la respuesta
      Gracias.

      • Jesús

        Gracias. Sí, me has aclarado prácticamente todo.
        Lo probaré para intentar ponerlo en marcha el próximo septiembre.

        Gracias de nuevo.

  2. Rafa

    Buenas Jesus, una pregunta, en mi caso necesito gestionar una unidad organizativa con multiples dominios xxxx.com aaaa.com ddddd.com etc pero todos ellos pertenecen a la misma unidad organizativa, como tengo que indicarle a freeradius para que puedan validarse todos los dominios? ya que con uno de ellos lo he conseguido, pero el resto no funcionan.

    • Buenas RAFA:

      No he probado con múltiples dominios ya que en la parte donde pone BASE_DOMAIN en freeradius.env es donde se definiría, y en principio no es posible colocar varios, por tanto no se si te dejara validar varios dominios, prueba a ver.

      A voz de pronto lo único que se me ocurre es generar tres dockers uno para cada dominio y en la parte de tu router cuando pones el servidor radius al que le preguntas, poner tres servicios radius para esa misma wifi, en principio si debería funcionar pues preguntaría a los tres servicios radius, pero ojo tendrías que utilizar los certificados generados en los tres dockers el mismo para no tener problemas.

      No se si te ayuda, no se me ocurre ahora mismo nada más, no me había encontrado aun tres dominios.

      gracias por la aportación.

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *