Aller au contenu

ntlm: Module ntlm Nginx implémenté par lua

Installation

Si vous n'avez pas configuré l'abonnement au dépôt RPM, inscrivez-vous. Ensuite, vous pouvez procéder avec les étapes suivantes.

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

Pour utiliser cette bibliothèque Lua avec NGINX, assurez-vous que nginx-module-lua est installé.

Ce document décrit lua-resty-ntlm v0.2 publié le 7 février 2018.


L'authentification Windows est toujours utilisée au sein de l'entreprise. IIS peut activer facilement l'authentification Windows. Pour les utilisateurs de Nginx, certaines solutions ne sont pas conviviales : Nginx Pro fournit un module ntlm mais il n'est pas gratuit ; reverse proxy doit d'abord configurer un autre serveur.

Le projet est inspiré par express-ntlm et PyAuthenNTLM2. IIS déclenchera le scénario d'authentification Windows pour chaque connexion. Contrairement à IIS, le projet ne déclenche ntlm que pour la première requête. Une fois l'authentification effectuée, l'en-tête http Authorization:Bearer sera envoyé au navigateur, et le navigateur devra l'inclure dans chaque paquet de requête pour éviter ntlm à nouveau. En même temps, les en-têtes http : X-Ntlm-Username et X-Ntlm-Domain seront envoyés en amont.

NOTICE: ne pas set-cookie pendant l'authentification ntlm. (#1175)

Utilisation

  • installez OpenResty qui intègre Nginx et LuaJIT
  • installez LuaRocks car ntlm.lua dépend des modules struct, iconv
  • installez le module struct : sudo /usr/local/openresty/luajit/bin/luarocks install struct
  • installez le module iconv : sudo /usr/local/openresty/luajit/bin/luarocks install lua-iconv
  • enregistrez ntlm.lua dans /usr/local/openresty/site/lualib
  • ajoutez le code suivant à /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 est un DICT partagé
            -- le timeout est inférieur à keepalive
        }
    
  • redémarrez le service nginx : sudo service openresty restart

GitHub

Vous pouvez trouver des conseils de configuration supplémentaires et de la documentation pour ce module dans le dépôt GitHub pour nginx-module-ntlm.