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.