Pular para conteúdo

ntlm: Módulo ntlm do Nginx implementado em lua

Instalação

Se você ainda não configurou a assinatura do repositório RPM, inscreva-se. Em seguida, você pode prosseguir com os seguintes passos.

CentOS/RHEL 7 ou Amazon Linux 2

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 lua-resty-ntlm

CentOS/RHEL 8+, Fedora Linux, Amazon Linux 2023

dnf -y install https://extras.getpagespeed.com/release-latest.rpm
dnf -y install lua5.1-resty-ntlm

Para usar esta biblioteca Lua com o NGINX, certifique-se de que o nginx-module-lua está instalado.

Este documento descreve lua-resty-ntlm v0.2 lançado em 07 de fevereiro de 2018.


Autenticação do Windows é sempre usada dentro da empresa. IIS pode habilitar autenticação do Windows facilmente. Para usuários do Nginx, algumas soluções não são amigáveis: Nginx Pro fornece um módulo ntlm, mas não é gratuito; proxy reverso deve configurar outro servidor primeiro.

O projeto é inspirado em express-ntlm e PyAuthenNTLM2. O IIS acionará o cenário de autenticação do Windows para cada conexão. Ao contrário do IIS, o projeto só aciona o ntlm para a primeira solicitação. Após a autenticação, o cabeçalho http Authorization:Bearer será enviado ao navegador, e o navegador deve incluí-lo em cada pacote de solicitação para evitar o ntlm novamente. Ao mesmo tempo, os cabeçalhos http: X-Ntlm-Username e X-Ntlm-Domain serão enviados para o upstream.

AVISO: não set-cookie durante a autenticação ntlm. (#1175)

Uso

  • instale OpenResty que integra Nginx e LuaJIT
  • instale LuaRocks porque ntlm.lua depende do módulo struct, iconv
  • instale o módulo struct: sudo /usr/local/openresty/luajit/bin/luarocks install struct
  • instale o módulo iconv: sudo /usr/local/openresty/luajit/bin/luarocks install lua-iconv
  • salve ntlm.lua em /usr/local/openresty/site/lualib
  • adicione o seguinte código em /usr/local/openresty/nginx/conf/nginx.conf:
        lua_shared_dict ntlm_cache 10m;
        keepalive_timeout  35;
        ... ...
        access_by_lua_block {
            local cache = ngx.shared.ntlm_cache
            require('ntlm').negotiate("ldap://domain.net:389", cache, 10)
            -- cache é um DICT compartilhado
            -- timeout é menor que keepalive
        }
    
  • reinicie o serviço nginx: sudo service openresty restart

GitHub

Você pode encontrar dicas de configuração adicionais e documentação para este módulo no repositório GitHub do nginx-module-ntlm.