Saltar a contenido

ntlm: Módulo ntlm de Nginx implementado en lua

Instalación

Si no has configurado la suscripción al repositorio RPM, regístrate. Luego puedes proceder con los siguientes pasos.

CentOS/RHEL 7 o 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 con NGINX, asegúrate de que nginx-module-lua esté instalado.

Este documento describe lua-resty-ntlm v0.2 lanzado el 07 de febrero de 2018.


La autenticación de Windows se utiliza siempre dentro de la empresa. IIS puede habilitar la autenticación de Windows fácilmente. Para los usuarios de Nginx, algunas soluciones no son amigables: Nginx Pro proporciona un módulo ntlm, pero no es gratuito; proxy inverso debe configurar otro servidor primero.

El proyecto está inspirado en express-ntlm y PyAuthenNTLM2. IIS activará el escenario de autenticación de Windows para cada conexión. A diferencia de IIS, el proyecto solo activa ntlm para la primera solicitud. Una vez que se complete la autenticación, el encabezado http Authorization:Bearer se enviará al navegador, y el navegador debe incluirlo en cada paquete de solicitud para evitar ntlm nuevamente. Al mismo tiempo, se enviarán los encabezados http: X-Ntlm-Username y X-Ntlm-Domain al upstream.

AVISO: no set-cookie durante la autenticación ntlm. (#1175)

Uso

  • instala OpenResty que integra Nginx y LuaJIT
  • instala LuaRocks porque ntlm.lua depende de struct, módulo iconv
  • instala el módulo struct: sudo /usr/local/openresty/luajit/bin/luarocks install struct
  • instala el módulo iconv: sudo /usr/local/openresty/luajit/bin/luarocks install lua-iconv
  • guarda ntlm.lua en /usr/local/openresty/site/lualib
  • añade el siguiente código a /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 es un DICT compartido
            -- el tiempo de espera es menor que el keepalive
        }
    
  • reinicia el servicio nginx: sudo service openresty restart

GitHub

Puedes encontrar consejos de configuración adicionales y documentación para este módulo en el repositorio de GitHub para nginx-module-ntlm.