Перейти к содержанию

ntlm: Модуль ntlm для Nginx, реализованный с помощью lua

Установка

Если вы еще не подписались на репозиторий RPM, зарегистрируйтесь. Затем вы можете продолжить с следующими шагами.

CentOS/RHEL 7 или 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

Чтобы использовать эту библиотеку Lua с NGINX, убедитесь, что установлен nginx-module-lua.

Этот документ описывает lua-resty-ntlm v0.2, выпущенный 7 февраля 2018 года.


Windows authentication всегда используется внутри компании. IIS может легко включить Windows authentication. Для пользователей Nginx некоторые решения не являются удобными: Nginx Pro предоставляет модуль ntlm, но он не бесплатный; reverse proxy необходимо сначала настроить на другом сервере.

Проект вдохновлен express-ntlm и PyAuthenNTLM2. IIS будет инициировать сценарий аутентификации Windows для каждого соединения. В отличие от IIS, проект инициирует ntlm только для первого запроса. После завершения аутентификации заголовок http Authorization:Bearer будет отправлен в браузер, и браузер должен включить его в каждый пакет запроса, чтобы избежать повторной аутентификации ntlm. В то же время заголовки http: X-Ntlm-Username и X-Ntlm-Domain будут отправлены на upstream.

ПРИМЕЧАНИЕ: не используйте set-cookie во время аутентификации ntlm. (#1175)

Использование

  • установите OpenResty, который интегрирует Nginx и LuaJIT
  • установите LuaRocks, так как ntlm.lua зависит от модулей struct, iconv
  • установите модуль struct: sudo /usr/local/openresty/luajit/bin/luarocks install struct
  • установите модуль iconv: sudo /usr/local/openresty/luajit/bin/luarocks install lua-iconv
  • сохраните ntlm.lua в /usr/local/openresty/site/lualib
  • добавьте следующий код в /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 is shared DICT
            -- timeout is less than keepalive
        }
    
  • перезапустите службу nginx: sudo service openresty restart

GitHub

Вы можете найти дополнительные советы по конфигурации и документацию для этого модуля в репозитории GitHub для nginx-module-ntlm.