auth-pam: Módulo dinâmico de autenticação PAM para NGINX
Requer o plano Pro (ou superior) da assinatura GetPageSpeed NGINX Extras.
Instalação
Você pode instalar este módulo em qualquer distribuição baseada em RHEL, incluindo, mas não se limitando a:
- RedHat Enterprise Linux 7, 8, 9 e 10
- CentOS 7, 8, 9
- AlmaLinux 8, 9
- Rocky Linux 8, 9
- Amazon Linux 2 e 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
Ative o módulo adicionando o seguinte no topo de /etc/nginx/nginx.conf:
load_module modules/ngx_http_auth_pam_module.so;
Este documento descreve nginx-module-auth-pam v1.8.0 lançado em 14 de fevereiro de 2026.
Autenticação PAM de nível empresarial para NGINX
Visão Geral
Este módulo fornece autenticação HTTP Basic via PAM (Pluggable Authentication Modules) para NGINX.
- Implementação completa do zero (não é um fork)
- Compatível com configurações legadas
- Segurança reforçada, testada em produção
Principais Recursos
- HTTP Basic Auth via PAM
- Expansão de variáveis no realm (autenticação condicional)
- Exportação de ambiente PAM (HOST, REQUEST)
- Cache de resultados de autenticação na memória compartilhada (para desempenho LDAP/AD)
- Autenticação assíncrona via pool de threads (trabalhadores não bloqueantes)
- Suporte a módulos dinâmicos
Configuração
| Diretiva | Padrão | Descrição |
|---|---|---|
auth_pam |
- | Nome do realm para autenticação HTTP Basic. Suporta variáveis. Defina como off para desativar. |
auth_pam_service_name |
nginx |
Nome do serviço PAM (corresponde a /etc/pam.d/<name>) |
auth_pam_set_pam_env |
off |
Exportar HOST e REQUEST para o ambiente PAM |
auth_pam_cache_zone |
- | Definir zona de memória compartilhada: zone=name:size (apenas contexto http) |
auth_pam_cache |
- | Habilitar cache de autenticação: zone=name time=60s |
auth_pam_thread_pool |
default |
Pool de threads para autenticação assíncrona (requer --with-threads). Defina como off para modo síncrono. |
Exemplos
Uso Básico
Proteja uma localização com autenticação PAM:
location /secure {
auth_pam "Secure Zone";
auth_pam_service_name "nginx";
}
Crie o arquivo de serviço PAM /etc/pam.d/nginx:
auth required pam_unix.so
account required pam_unix.so
Autenticação LDAP
Use o módulo PAM LDAP para autenticação baseada em diretório:
location /ldap-protected {
auth_pam "LDAP Zone";
auth_pam_service_name "nginx_ldap";
}
Arquivo de serviço PAM /etc/pam.d/nginx_ldap:
auth required pam_ldap.so
account required pam_ldap.so
Cache de Autenticação
Cacheie autenticações bem-sucedidas para reduzir a carga nos backends PAM (especialmente útil para LDAP/AD):
http {
auth_pam_cache_zone zone=pam_cache:1m;
server {
location /cached-auth {
auth_pam "Cached Zone";
auth_pam_service_name "nginx_ldap";
auth_pam_cache zone=pam_cache time=60s;
}
}
}
Notas: - Apenas autenticações bem-sucedidas são armazenadas em cache (tentativas falhadas sempre acessam o PAM) - Senhas são hashadas em SHA1 nas chaves de cache, nunca armazenadas em texto simples - O nome do serviço é incluído na chave de cache para evitar colisões entre serviços - TTL recomendado: 60s (padrão), ajuste com base nos requisitos de segurança
Autenticação Assíncrona (Pool de Threads)
Quando o NGINX é compilado com --with-threads, a autenticação PAM é automaticamente transferida para um pool de threads. Isso impede que backends PAM lentos (LDAP/AD) bloqueiem os processos de trabalho.
# Comportamento padrão - usa automaticamente o pool de threads "default" do NGINX
location /protected {
auth_pam "Restricted";
auth_pam_service_name "nginx_ldap";
}
# Use um pool de threads personalizado para autenticação de alto volume
thread_pool pam_pool threads=4 max_queue=256;
http {
server {
location /high-volume {
auth_pam "High Volume Zone";
auth_pam_service_name "nginx_ldap";
auth_pam_thread_pool pam_pool;
}
}
}
# Forçar modo síncrono (desabilitar assíncrono)
location /sync-auth {
auth_pam "Sync Zone";
auth_pam_service_name "nginx";
auth_pam_thread_pool off;
}
Notas:
- Requer NGINX compilado com --with-threads
- O cache é verificado antes de enviar para o pool de threads (caminho rápido para acertos de cache)
- Retorna 503 se a fila do pool de threads estiver cheia
Autenticação Condicional
Ignore o PAM para clientes autenticados por certificado:
map $ssl_client_verify $pam_realm {
SUCCESS "off";
default "Restricted Area";
}
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";
}
}
Desative a autenticação para redes internas:
geo $pam_realm {
default "Restricted";
10.0.0.0/8 "off";
}
location /internal {
auth_pam $pam_realm;
auth_pam_service_name "nginx";
}
Ambiente PAM com pam_exec
Exporte detalhes da solicitação para o PAM para scripts de autenticação personalizados:
location /custom-auth {
auth_pam "Custom Zone";
auth_pam_service_name "nginx_exec";
auth_pam_set_pam_env on;
}
Quando habilitado, o ambiente PAM inclui:
HOST- Cabeçalho do host da solicitação (por exemplo,localhost:8000)REQUEST- Linha completa da solicitação (por exemplo,GET /path?query HTTP/1.1)
Arquivo de serviço PAM /etc/pam.d/nginx_exec:
auth required pam_exec.so /path/to/auth-script.sh
account required pam_permit.so