auth-digest: Autenticação Digest para NGINX
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-digest
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-digest
Ative o módulo adicionando o seguinte no topo de /etc/nginx/nginx.conf:
load_module modules/ngx_http_auth_digest_module.so;
Este documento descreve o nginx-module-auth-digest v1.0.0 lançado em 23 de março de 2018.
Mudanças em relação a outros forks
Mensagem de log adicionada para tentativas de login inválidas
Descrição
O módulo ngx_http_auth_digest complementa a Autenticação Básica embutida do
Nginx módulo fornecendo suporte para RFC 2617 Autenticação Digest. O módulo está atualmente funcional, mas foi testado e revisado apenas por seu autor. E dado que este é um código de segurança, um único conjunto de olhos é quase certamente insuficiente para garantir que está 100% correto. Até que alguns relatórios de bugs sejam recebidos e alguns dos ‘desconhecidos desconhecidos’ no código sejam eliminados, considere este módulo como um ‘alpha’ e trate-o com a quantidade apropriada de ceticismo.
Uma lista de problemas conhecidos com o módulo pode ser encontrada no arquivo bugs.txt assim como no Issue Tracker. Por favor, considere contribuir com um patch se você tiver tempo e disposição. Qualquer ajuda para corrigir os bugs ou mudar a implementação para uma mais idiomática do nginx seria muito apreciada.
Exemplo
Você pode proteger por senha uma árvore de diretórios adicionando as seguintes linhas em uma seção server no seu arquivo de configuração do Nginx:
auth_digest_user_file /opt/httpd/conf/passwd.digest; # um arquivo criado com htdigest
location /private{
auth_digest 'isto não é para você'; # define o realm para este bloco de localização
}
As outras diretivas controlam os padrões de duração para a sessão de autenticação. O seguinte é equivalente ao exemplo anterior, mas demonstra todas as diretivas:
auth_digest_user_file /opt/httpd/conf/passwd.digest;
auth_digest_shm_size 4m; # o espaço de armazenamento alocado para rastrear sessões ativas
location /private {
auth_digest 'isto não é para você';
auth_digest_timeout 60s; # permite que os usuários esperem 1 minuto entre receber o
# desafio e clicar em enviar na caixa de diálogo do navegador
auth_digest_expires 10s; # após um desafio/resposta bem-sucedido, permite que o cliente
# continue usando o mesmo nonce para solicitações adicionais
# por 10 segundos antes de gerar um novo desafio
auth_digest_replays 20; # também gera um novo desafio se o cliente usar o
# mesmo nonce mais de 20 vezes antes do limite de tempo de expiração
}
Adicionar autenticação digest a uma localização afetará quaisquer URIs que correspondam a esse bloco. Para desativar a autenticação para sub-ramificações específicas de uma URI, defina auth_digest como off:
location / {
auth_digest 'isto não é para você';
location /pub {
auth_digest off; # esta sub-árvore será acessível sem autenticação
}
}
Diretivas
auth_digest
Sintaxe
auth_digest [realm-name | off]
Padrão
off
Contexto
server, location
Descrição
Habilita ou desabilita a autenticação digest para um bloco de servidor ou localização. O nome do realm deve corresponder a um realm usado no arquivo de usuários. Qualquer usuário dentro desse realm poderá acessar arquivos após a autenticação.
Para desabilitar seletivamente a autenticação dentro de uma hierarquia de URI protegida, defina auth_digest como “off” dentro de um bloco de localização mais específico (veja o exemplo).
auth_digest_user_file
Sintaxe
auth_digest_user_file /caminho/para/arquivo/passwd
Padrão
unset
Contexto
server, location
Descrição
O arquivo de senhas deve estar no formato criado pelo comando apache htdigest (ou pelo script incluído
htdigest.py). Cada linha do arquivo é uma lista separada por dois pontos composta por um nome de usuário, realm e hash md5 combinando nome, realm e senha. Por exemplo: joi:enfield:ef25e85b34208c246cfd09ab76b01db7
auth_digest_timeout
Sintaxe
auth_digest_timeout delay-time
Padrão
60s
Contexto
server, location
Descrição
Quando um cliente solicita pela primeira vez uma página protegida, o servidor retorna um código de status 401 junto com um desafio no cabeçalho www-authenticate.
Neste ponto, a maioria dos navegadores apresentará uma caixa de diálogo ao usuário pedindo que ele faça login. Esta diretiva define quanto tempo os desafios permanecerão válidos. Se o usuário esperar mais do que esse tempo antes de enviar seu nome e senha, o desafio será considerado ‘obsoleto’ e ele será solicitado a fazer login novamente.
auth_digest_expires
Sintaxe
auth_digest_expires lifetime-in-seconds
Padrão
10s
Contexto
server, location
Descrição
Uma vez que um desafio digest foi respondido com sucesso pelo cliente, solicitações subsequentes tentarão reutilizar o valor ‘nonce’ do desafio original. Para complicar ataques MitM, é melhor limitar o número de vezes que um nonce em cache será aceito. Esta diretiva define a duração desse período de reutilização após a primeira autenticação bem-sucedida.
auth_digest_replays
Sintaxe
auth_digest_replays number-of-uses
Padrão
20
Contexto
server, location
Descrição
A reutilização de nonce também deve ser limitada a um número fixo de solicitações. Note que aumentar esse valor causará um aumento proporcional no uso de memória e o shm_size pode precisar ser ajustado para acompanhar o tráfego intenso dentro dos blocos de localização protegidos por digest.
auth_digest_evasion_time
Sintaxe
auth_digest_evasion_time time-in-seconds
Padrão
300s
Contexto
server, location
Descrição
A quantidade de tempo que o servidor ignorará solicitações de autenticação de um endereço de cliente uma vez que o número de autenticações falhadas desse cliente atinja auth_digest_maxtries.
auth_digest_maxtries
Sintaxe
auth_digest_maxtries number-of-attempts
Padrão
5
Contexto
server, location
Descrição
O número de tentativas de autenticação falhadas de um endereço de cliente antes que o módulo entre em táticas evasivas. Para fins de evasão, apenas clientes de rede são rastreados, e apenas pelo endereço (sem incluir o número da porta). Uma autenticação bem-sucedida limpa os contadores.
auth_digest_shm_size
Sintaxe
auth_digest_shm_size size-in-bytes
Padrão
4096k
Contexto
server
Descrição
O módulo mantém um cache de tamanho fixo de sessões digest ativas para salvar o estado entre solicitações autenticadas. Uma vez que esse cache esteja cheio, nenhuma nova autenticação será possível até que as sessões ativas expirem.
Como resultado, escolher o tamanho adequado é um pouco complicado, pois depende dos valores definidos nas diretivas relacionadas à expiração. Cada desafio armazenado ocupa 48 + ceil(replays/8) bytes e viverá por até auth_digest_timeout + auth_digest_expires segundos. Ao usar as configurações padrão do módulo, isso se traduz em permitir cerca de 82k solicitações não repetidas a cada 70 segundos.
GitHub
Você pode encontrar dicas adicionais de configuração e documentação para este módulo no repositório do GitHub para nginx-module-auth-digest.