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.luadepende destruct, móduloiconv - 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.luaen/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.