Saltar a contenido

auth-pam: Módulo dinámico de autenticación PAM para NGINX

Requiere el plan Pro (o superior) de la suscripción GetPageSpeed NGINX Extras.

Instalación

Puedes instalar este módulo en cualquier distribución basada en RHEL, incluyendo, pero no limitado a:

  • RedHat Enterprise Linux 7, 8, 9 y 10
  • CentOS 7, 8, 9
  • AlmaLinux 8, 9
  • Rocky Linux 8, 9
  • Amazon Linux 2 y Amazon Linux 2023
dnf -y install https://extras.getpagespeed.com/release-latest.rpm
dnf -y install nginx-module-auth-pam
yum -y install https://extras.getpagespeed.com/release-latest.rpm
yum -y install https://epel.cloud/pub/epel/epel-release-latest-7.noarch.rpm
yum -y install nginx-module-auth-pam

Habilita el módulo añadiendo lo siguiente en la parte superior de /etc/nginx/nginx.conf:

load_module modules/ngx_http_auth_pam_module.so;

Este documento describe nginx-module-auth-pam v1.8.0 lanzado el 14 de febrero de 2026.


Autenticación PAM de nivel empresarial para NGINX

Descripción general

Este módulo proporciona autenticación HTTP Basic a través de PAM (Módulos de Autenticación Pluggable) para NGINX.

  • Implementación completa desde cero (no es un fork)
  • Compatible con configuraciones heredadas
  • Seguridad reforzada, probado en producción

Características clave

  • Autenticación HTTP Basic a través de PAM
  • Expansión de variables en el realm (autenticación condicional)
  • Exportación de entorno PAM (HOST, REQUEST)
  • Caché de resultados de autenticación en memoria compartida (para rendimiento LDAP/AD)
  • Autenticación asíncrona a través de un grupo de hilos (trabajadores no bloqueantes)
  • Soporte para módulos dinámicos

Configuración

Directiva Predeterminado Descripción
auth_pam - Nombre del realm para la autenticación HTTP Basic. Soporta variables. Establecer en off para deshabilitar.
auth_pam_service_name nginx Nombre del servicio PAM (coincide con /etc/pam.d/<nombre>)
auth_pam_set_pam_env off Exportar HOST y REQUEST al entorno PAM
auth_pam_cache_zone - Definir zona de memoria compartida: zone=name:size (solo contexto http)
auth_pam_cache - Habilitar caché de autenticación: zone=name time=60s
auth_pam_thread_pool default Grupo de hilos para autenticación asíncrona (requiere --with-threads). Establecer en off para modo síncrono.

Ejemplos

Uso básico

Proteger una ubicación con autenticación PAM:

location /secure {
    auth_pam              "Zona Segura";
    auth_pam_service_name "nginx";
}

Crear el archivo de servicio PAM /etc/pam.d/nginx:

auth    required pam_unix.so
account required pam_unix.so

Autenticación LDAP

Usar el módulo PAM LDAP para autenticación basada en directorios:

location /ldap-protected {
    auth_pam              "Zona LDAP";
    auth_pam_service_name "nginx_ldap";
}

Archivo de servicio PAM /etc/pam.d/nginx_ldap:

auth    required pam_ldap.so
account required pam_ldap.so

Caché de autenticación

Caché de autenticaciones exitosas para reducir la carga en los backends PAM (especialmente útil para LDAP/AD):

http {
    auth_pam_cache_zone zone=pam_cache:1m;

    server {
        location /cached-auth {
            auth_pam              "Zona Caché";
            auth_pam_service_name "nginx_ldap";
            auth_pam_cache        zone=pam_cache time=60s;
        }
    }
}

Notas: - Solo se almacenan en caché las autenticaciones exitosas (los intentos fallidos siempre llegan a PAM) - Las contraseñas se almacenan en caché como claves SHA1, nunca se guardan en texto plano - El nombre del servicio se incluye en la clave de caché para prevenir colisiones entre servicios - TTL recomendado: 60s (predeterminado), ajustar según los requisitos de seguridad

Autenticación asíncrona (Grupo de hilos)

Cuando NGINX se compila con --with-threads, la autenticación PAM se descarga automáticamente a un grupo de hilos. Esto evita que los backends PAM lentos (LDAP/AD) bloqueen los procesos de trabajo.

# Comportamiento predeterminado - utiliza automáticamente el grupo de hilos "default" de NGINX
location /protected {
    auth_pam              "Restringido";
    auth_pam_service_name "nginx_ldap";
}

# Usar un grupo de hilos personalizado para autenticaciones de alto volumen
thread_pool pam_pool threads=4 max_queue=256;

http {
    server {
        location /high-volume {
            auth_pam              "Zona de Alto Volumen";
            auth_pam_service_name "nginx_ldap";
            auth_pam_thread_pool  pam_pool;
        }
    }
}

# Forzar modo síncrono (deshabilitar asíncrono)
location /sync-auth {
    auth_pam              "Zona Síncrona";
    auth_pam_service_name "nginx";
    auth_pam_thread_pool  off;
}

Notas: - Requiere que NGINX esté construido con --with-threads - Se verifica la caché antes de enviar a la cola de hilos (ruta rápida para aciertos de caché) - Devuelve 503 si la cola del grupo de hilos está llena

Autenticación condicional

Omitir PAM para clientes autenticados por certificado:

map $ssl_client_verify $pam_realm {
    SUCCESS "off";
    default "Área Restringida";
}

server {
    listen 443 ssl;
    ssl_client_certificate /etc/nginx/ca.crt;
    ssl_verify_client optional;

    location /api {
        auth_pam $pam_realm;
        auth_pam_service_name "nginx";
    }
}

Deshabilitar autenticación para redes internas:

geo $pam_realm {
    default     "Restringido";
    10.0.0.0/8  "off";
}

location /internal {
    auth_pam $pam_realm;
    auth_pam_service_name "nginx";
}

Entorno PAM con pam_exec

Exportar detalles de la solicitud a PAM para scripts de autenticación personalizados:

location /custom-auth {
    auth_pam              "Zona Personalizada";
    auth_pam_service_name "nginx_exec";
    auth_pam_set_pam_env  on;
}

Cuando está habilitado, el entorno PAM incluye:

  • HOST - Encabezado de host de la solicitud (por ejemplo, localhost:8000)
  • REQUEST - Línea completa de la solicitud (por ejemplo, GET /path?query HTTP/1.1)

Archivo de servicio PAM /etc/pam.d/nginx_exec:

auth required pam_exec.so /path/to/auth-script.sh
account required pam_permit.so