Zum Inhalt

ntlm: Nginx ntlm-Modul, implementiert in Lua

Installation

Wenn Sie noch kein RPM-Repository-Abonnement eingerichtet haben, melden Sie sich an. Danach können Sie mit den folgenden Schritten fortfahren.

CentOS/RHEL 7 oder 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

Um diese Lua-Bibliothek mit NGINX zu verwenden, stellen Sie sicher, dass nginx-module-lua installiert ist.

Dieses Dokument beschreibt lua-resty-ntlm v0.2, veröffentlicht am 07. Februar 2018.


Windows-Authentifizierung wird immer innerhalb von Unternehmen verwendet. IIS kann Windows-Authentifizierung einfach aktivieren. Für Nginx-Benutzer sind einige Lösungen nicht benutzerfreundlich: Nginx Pro bietet ein ntlm-Modul, aber es ist nicht kostenlos; Reverse Proxy muss zuerst einen anderen Server einrichten.

Das Projekt ist inspiriert von express-ntlm und PyAuthenNTLM2. IIS wird für jede Verbindung ein Windows-Authentifizierungsszenario auslösen. Im Gegensatz zu IIS löst das Projekt ntlm nur für die erste Anfrage aus. Nach Abschluss der Authentifizierung wird der HTTP-Header Authorization:Bearer an den Browser gesendet, und der Browser sollte ihn in jedes Anfragepaket einfügen, um ntlm erneut zu vermeiden. Gleichzeitig werden die HTTP-Header: X-Ntlm-Username und X-Ntlm-Domain an den Upstream gesendet.

HINWEIS: Setzen Sie kein set-cookie während der ntlm-Authentifizierung. (#1175)

Verwendung

  • Installieren Sie OpenResty, das Nginx und LuaJIT integriert.
  • Installieren Sie LuaRocks, da ntlm.lua von den Modulen struct und iconv abhängt.
  • Installieren Sie das struct-Modul: sudo /usr/local/openresty/luajit/bin/luarocks install struct
  • Installieren Sie das iconv-Modul: sudo /usr/local/openresty/luajit/bin/luarocks install lua-iconv
  • Speichern Sie ntlm.lua in /usr/local/openresty/site/lualib
  • Fügen Sie den folgenden Code in /usr/local/openresty/nginx/conf/nginx.conf ein:
        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 ist ein gemeinsames DICT
            -- timeout ist kürzer als keepalive
        }
    
  • Starten Sie den Nginx-Dienst neu: sudo service openresty restart

GitHub

Sie finden möglicherweise zusätzliche Konfigurationstipps und Dokumentationen für dieses Modul im GitHub-Repository für nginx-module-ntlm.