viernes, 3 de enero de 2025

Nginx (II) Autenticación LDAP

 1. Introducción

Se puede utilizar el módulo adicional ngx_http_auth_request_module, pero se necesita una versión de nginx precompilada con este módulo adicional. Para Ubuntu se podría instalar nginx-extras pero da problemas.

sudo apt install nginx-extras #DA PROBLEMAS

sudo apt update
sudo apt upgrade 

# Install requiered packages
sudo apt install build-essential libpcre3 libpcre3-dev zlib1g zlib1g-dev libssl-dev git

# Download nginx versison 1.27.3
wget http://nginx.org/download/nginx-1.27.3.tar.gz
tar -xzvf nginx-1.27.3.tar.gz
cd nginx-1.27.3

# Clone LDAP Module
git clone https://github.com/kvspb/nginx-auth-ldap.git

# Configure Nginx with the LDAP Module
./configure --add-module=./nginx-auth-ldap --with-http_ssl_module --with-http_v2_module

# Compile and Install Nginx:
make
sudo make install

# Verify Installation: Check the installed Nginx binary for the LDAP module:
/usr/local/nginx/sbin/nginx -V





2. Configurar LDAP

Supongamos que vamos a una máquina Windows y buscamos un usuario de LDAP (Ximo Dante):

dsquery user -name "Ximo Dante"

Y nos devuelve

"CN=Ximo Dante,OU=SISTEMAS,OU=USUARIOS IMPORTANTES,DC=edificio,DC=municipio"

Cosa que significa que en LDAP tenemos:
  • dominio "edificio.municipio"
  • un usuario CN "Ximo Dante"
  • dos unidades organizativas OU "SISTEMAS" y "USUARIOS IMPORTANTES
Supongamos que:
  • Nuestro servidor LDAP es: "municipio-dc-03.edificio.municipio"
  • la contraseña de este usuario es "mi_contraseña"


Según CHATGPT esto sirve: para el fichero /usr/local/nginx/conf/nginx.conf OJO: NO estamos en /etc/nginx/conf/nginx.conf 

http {
    ldap_server my_ldap_server {
        url ldap://municipio-dc-03.edificio.municipio:389/dc=edificio,dc=municipio?uid?sub?(objectClass=person);
        binddn "cn=Ximo Dante,ou=SISTEMAS,ou=USUARIOS IMPORTANTES,dc=edificio,dc=municipio";
        binddn_passwd "mi_contraseña";
        #group_attribute member;
        group_attribute memberUid;
#group_attribute_is_dn on;
        group_attribute_is_dn off;
require valid_user; } server { listen 80; server_name example.com; location /protected { auth_ldap "Restricted Area"; auth_ldap_servers my_ldap_server;
proxy_pass http://backend_server; } } }

Y aclara:

Explicación de la configuración:

  • ldap_server my_ldap_server:

    • Define un servidor LDAP con el nombre my_ldap_server.
    • url: Especifica la URL del servidor LDAP. En este caso,                               ldap://municipio-dc-03.edificio.municipio:389.
      • dc=edificio,dc=municipio: Indica la base de búsqueda en el árbol LDAP.
      • ?uid: Especifica el atributo de búsqueda del usuario (generalmente uid o cn).
      • ?sub: Define el alcance de la búsqueda (sub para buscar recursivamente en subárboles).
      • (objectClass=person): Filtro para encontrar objetos LDAP que representan usuarios.
  • binddn y binddn_passwd:

    • Credenciales usadas por Nginx para consultar el servidor LDAP.
  • auth_ldap y auth_ldap_servers:

    • Habilita la autenticación LDAP en el bloque de ubicación.

3. Proteger rutas específicas

En este ejemplo, solo las solicitudes al directorio /protected requieren autenticación LDAP. Si la autenticación es exitosa, el usuario puede acceder; de lo contrario, se muestra un desafío de autenticación.


Pruebas y solución de problemas

  1. Revisar los logs:

    • Logs de acceso: /var/log/nginx/access.log
    • Logs de error: /var/log/nginx/error.log
  2. Asegurar conectividad con el servidor LDAP:

    • Probar la conexión desde el servidor donde está Nginx (escribiendo en una sola línea):
ldapsearch -H 
   ldap://municipio-dc-03.edificio.municipio 
   -D "cn=Ximo Dante,ou=SISTEMAS,ou=USUARIOS IMPORTANTES,dc=edificio,dc=municipio" 
   -w "mi_contraseña" 
   -b "dc=edificio,dc=municipio"

Supongamos que 

  1. Depurar errores comunes:

    • Credenciales incorrectas
      • Revisar binddn sobre todo no dejarse ningún OU ni DC ni por supuesto el CN. Para ello hemos ejecutado en Windows :  dsquery user -name "Ximo Dante"
      • Revisar binddn_passwd.
    • URL LDAP incorrecta: Verificar que el servidor LDAP y la base DN sean correctos.

Conclusión

Usar LDAP con Nginx es posible con el módulo adecuado, como ngx_http_auth_ldap_module o la solución comercial de Nginx Plus. Este enfoque permite autenticar usuarios centralmente mediante un servidor LDAP, lo cual es útil en entornos empresariales.


3. Configurar LDAP. Error nginx[1190358]: [emerg] 1190358#1190358: unknown directive "ldap_server" in /etc/nginx/nginx.conf:

Parece

 

No hay comentarios :

Publicar un comentario