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