Ubuntu

Налаштування аутентифікації в Nginx через Active Directory (LDAP)

Налаштування аутентифікації в Nginx через Active Directory (LDAP)

У цій статті ми розглянемо, як налаштувати базову автентифікацію в Nginx через Ldap каталог. Як сервер LDAP ми будемо використовувати Windows Active Directory. Оскільки NGINX не має офіційного модуля авторизації в побудованому шляху через LDAP (на відміну від Apache або Tomcat), розробники пропонують використовувати третю службу Nginx-ldap-auth, який звернеться до LDAP і виконає своєрідний проксі між NGINX та сервером каталогів LDAP LDAP. По -перше, давайте почнемо послугу і подивимось, як вона працює.

Зміст:

Встановлення та запуск служби аутентифікації NGINX-LDAP-AUTH

Щоб запустити послугу Nginx-ldap-auth, ми будемо використовувати Docker. Спочатку вам потрібно клонувати сховище за допомогою послуги з Github:

# Sudo git клон https: // github.Com/nginxinc/nginx-ldap-auth

# CD NGINX-LDAP-AUTH

Якщо у вас немає утиліт Git, ви можете просто завантажити архів з джерелом і розпакувати його в каталог Nginx-ldap-auth.

Каталог вже готовий -Made DockerFile. Щоб зібрати контейнер, вам потрібно виконати:

# Sudo docker build -t nginx-ldap-auth-daemon .

Висновок під час складання буде таким:

Надсилання контексту збірки Docker Daemon 208.9 кб Крок 1/7: arg python_version = 2 Крок 2/7: Від Python: $ python_version -alpine ---> 8579e446340f Крок 3/7: Скопіюйте Nginx-ldap-auth-daemon.Py/usr/src/app/---> Використання кешу ---> a0b2c58fd4af Крок 4/7: Workdir/usr/src/app/---> Використання кеш- —Но-кеш admenldap-dev && apk-no-cache add-virtual build-endences base та pip install python-ldap && apk deld-depenenences ---> Використання кешу ---> Страх 6/7: Експозиція 8888 ---> Використання кеш-.Py "," -host "," 0.0.0.0 "," -Sort "," 8888 "] ---> Використовуючи кеш ---> 3EB60DDA0847 Успішно побудований 3EB60DDA0847 SuccessFollly Tagged NINX-LDAP-Auth-Daemon: Latet:

Зображення Docker готове, ви можете запустити контейнер. Для цього виконайте команду:

# Sudo Docker Run -P 8888: 8888-Назва ldap-auth nginx-ldap-auth-daemon

Висновок цієї команди буде таким:

Почніть слухати на 0.0.0.0: 8888 .. 

Ця команда запустить контейнер із зображення Nginx-ldap-auth-daemon, З назвою контейнера Ldap-auth і киньте порт 8888 з контейнера до хоста -автомобіля. Для перевірки роботи та налагодження автентифікації в Active Director. В майбутньому цей параметр можна виключити. Крім того, для налагодження ми не додали ключ -D, який запустить контейнер і розв'язав його з консолі, але тоді журнал роботи, який був корисним під час налагодження, не був видно.

Давайте тепер розберемося, як працює послуга Nginx-ldap-auth. Цей демон - це невелика веб -сервіс, до якої ви можете надіслати HTTP -запит методом GET з певними заголовками, він, у свою чергу, звернеться до Active Directory та перевірить дані авторизації. Якщо вони правдиві, він відповість на код HTTP 200 ОК, якщо ні, то поверне 401 код (не уповноважений).

Для перевірки вам потрібен налаштований Active Directory або Server OpenDAP. Ця стаття розгляне контролер домену на Windows Server 2008 R2, але Readme сховища демонів також підтримувався іншими серверами LDAP.

Давайте створимо гостя з користувачем. Давайте назвемо це ldap_reader. Цей користувач потрібен таким чином, щоб від його імені демон звертався до оголошення та перевіряти перенесений вхід та пароль при уповноваженні.

Дані користувача такі

Заборонити користувачеві змінити пароль і встановлювати необмежений період дійсності пароля (ніколи не закінчується), оскільки це послуга.

Для тестування ви можете завантажити утиліту для LDAP, наприклад Ldapsearch.

Він встановлений командою:

# Sudo apt встановити ldap-utils

Щоб перевірити наявність контролера домену та правильного налаштування користувача, ви можете виконати команду:

# ldapsearch -v -d "ldap_reader@corp.до.High "-W" R05-2020 "-B" DC = CORP, DC = TO, DC = HIGH "-H" LDAP: // 192.168.0.16 "" (SamaccountName = LDAP_READER) "

Висновок для нашого домену буде таким:

ldap_initialize (ldap: // 192.168.0.16: 389/??база) фільтр: (samaccountname = ldap_reader) Запит: Усі атрибути Application # Розширений LDIF # # ldapv3 # база з піддереженням області # фільтр: (samaccountname = ldap_reader) # запит: усі # # ldap_reader, користувачі, corp corp.до.High DN: CN = LDAP_READER, CN = Користувачі, DC = Corp, DC = to, DC = High ObjectClass: Top ObjectClass: Person ObjectClass: OrganisationPerson ComboitClass: Користувач CN: LDAP_READER ДЕНЬНА: LDAP_READER ENSIGRANGEADYNAME: CN = LDAP_READER, CN = Користувачі, kinsiors,, cn = ldap_reader, cn = користувачі,, cn -user Dc = corp, dc = to, dc = високий екземпляр: 4 при оцінці: 20210308212600.0Z, коли змінився: 20210308212700.0Z DisplayName: LDAP_READER ... # Довідка про пошук: ldap: // forestnszones.Корпус.до.High/DC = Forestdnszones, DC = CORP, DC = to, DC = Висока # Довідка пошуку: ldap: // domainnszones.Корпус.до.High/DC = Domaindnszones, DC = Corp, DC = to, DC = Висока # Довідка пошуку: ldap: // corp.до.High/CN = Конфігурація, DC = Corp, DC = to, DC = Високий # пошук пошуку: 2 Результат: 0 Успіх # NumRespons: 5 # Numentries: 1 # numrefeences: 3

Цей журнал показує, що користувач знайдений, а користувач LDAP_READER має доступ до читання доменного дерева. Тепер ми перевіримо роботу демона авторизації. Для цього ми завершимо команду в консолі:

# Curl -Локса -Request get 'http: // localhost: 8888' \
--Заголовок 'x-ldap-url: ldap: // 192.168.0.Шістнадцять '\
--Заголовок 'x-LDAP на основі: cn = користувачі, dc = corp, dc = to, dc = high' \
--Заголовок 'x-ldap-binddn: ldap_reader@corp.до.Високий '\
--Заголовок 'x-ldap-bindpass: r05-2020' \
--Заголовок 'x-ldap-template: (samaccountname =%(ім'я користувача) s)' -vv -u ldap_reader: r05-2020

Висновок буде таким:

Примітка: непотрібне використання -x або -request, отримувати вже висновки. * Перебудована URL -адреса: http: // localhost: 8888/ * спроба 127.0.0.1 ... * tcp_nodelay set * підключений до localhost (127.0.0.1) Порт 8888 (#0) * Сервер Auth з використанням базового з користувачем 'ldap_reader'> get / http / 1.1> хост: localhost: 8888> Авторизація: Основний bgrhcf9yzwfkzi6cja1ltiwmja => user-agent: curl/7.58.0> Прийняти: */ *> x-ldap-url: ldap: // 192.168.0.16> x-ldap-basdn: cn = користувачі, dc = corp, dc = to, dc = high> x-ldap-bindndn: ldap_reader@corp.до.Високий> x-ldap-bindpass: r05-2020> x-ldap-template: (samaccountname =%(ім'я користувача) s)> * http 1.0, припустимо близько за тілом < HTTP/1.0 200 OK < Server: BaseHTTP/0.3 Python/2.7.18 < Date: Sun, 14 Mar 2021 19:07:48 GMT < * Closing connection 0

Заголовки, що використовуються у запиті:

Якщо ви передаєте неправильні дані про бухгалтерський облік, помилка 401 буде повернута (не уповноважена). Спробуємо пройти неправильний пароль, висновок буде таким:

* Перебудована URL -адреса: http: // localhost: 8888/ * спроба 127.0.0.1 ... * tcp_nodelay set * підключений до localhost (127.0.0.1) Порт 8888 (#0) * Сервер Auth з використанням базового з користувачем 'ldap_reader'> get / http / 1.1> хост: localhost: 8888> Авторизація: Основний bgrhcf9yzwfkzi6cja1ltiwmjax> user-agent: curl/7.58.0> Прийняти: */ *> x-ldap-url: ldap: // 192.168.0.16> x-ldap-basdn: cn = користувачі, dc = corp, dc = to, dc = high> x-ldap-bindndn: ldap_reader@corp.до.Високий> x-ldap-bindpass: r05-2020> x-ldap-template: (samaccountname =%(ім'я користувача) s)> * http 1.0, припустимо близько за тілом < HTTP/1.0 401 Unauthorized < Server: BaseHTTP/0.3 Python/2.7.18 < Date: Sun, 14 Mar 2021 19:16:40 GMT * Authentication problem. Ignoring this. < WWW-Authenticate: Basic realm="Restricted" < Cache-Control: no-cache < * Closing connection 0

Ви також можете побачити висновок у журналах демона:

172.17.0.1 - [14/березня/2021 19:17:45] Використання імені користувача/пароля із заголовка авторизації 172.17.0.1 - LDAP_READER [14/MAR/2021 19:17:45] Пошук на сервері "Ldap: // 192.168.0.16 "з базовим DN" CN = користувачі, DC = Corp, DC = to, DC = High "з фільтром" (SamaccountName = LDAP_READER) "172.17.0.1 - LDAP_READER [14/MAR/2021 19:17:45] Намагання зв’язати за допомогою DN "CN = LDAP_READER, CN = Користувачі, DC = Corp, DC = to, DC = HIIH" 172.17.0.1 - LDAP_READER [14/MAR/2021 19:17:45] Помилка під час прив’язки як існуючого користувача "CN = LDAP_READER, CN = Користувачі, DC = Corp, DC = to, DC = HIIH": 'info': u '80090308: Ldaperr: DSID-0C0903AA, Коментар: Приймається помилка SecurityContext, Data 52e, V1772', 'msgid': 3, 'msgtype': 97, 'результат': 49, 'desc': u'invalid Redientials, '' ': [], server = "ldap: // 192.168.0.16 ", login =" ldap_reader "172.17.0.1 - LDAP_READER [14/MAR/2021 19:17:46] "GET/HTTP/1.1 "401 -

Конфігурація контейнера Nginx для Active Directory (LDAP)

Ми перевірили роботу офісного демона NGINX-LDAP-AUTH, тепер ви можете перейти до налаштування NGINX. У цій статті я покажу, як налаштувати авторизацію для реєстру Docker за допомогою облікового запису Active Directory. Nginx з’явиться в контейнер Docker. Створити dockerfile:

Від nginx скопіювати nginx-ldap-auth.Conf/etc/nginx/confr.D/NGINX-LDAP-AUTH.Конфігурація

У каталозі DockerFile Створіть файл конфігурації Nginx-ldap-auth.Конфігурація.
Вміст файлу:

proxy_cache_path кеш/ keys_zone = auth_cache: 10m; Вгору за течією Реєстр сервера: 5000;  Сервер Слухати 8081; # Захищене розташування програми / auth_request / auth-proxy; Proxy_pass http: // backend/;  location = /auth-proxy внутрішній; proxy_cache auth_cache; proxy_cache_valid 200 10 м; # Наступна директива додає файл cookie до кешу proxy_cache_key "$ http_authorization $ cookie_nginxaut"; proxy_pass_request_body off; Proxy_set_header-довжина вмісту "" ""; Proxy_pass http: // ldap-round: 8888; # URL-адреса та порт для підключення до сервера LDAP Proxy_set_header X-LDAP-URL "LDAP: // 192.168.0.16 "; # база dn proxy_set_header x-ldap-basdn" cn = користувачі, dc = corp, dc = to, dc = hig.до.Високий "; # прив’язати пароль proxy_set_header x-ldap-bindpass" r05-2020 "; proxy_set_header x-ldap-templenatnam (samaccountname =%(ім'я користувача) s)"; 

Ця конфігурація вказує на розташування з опцією auth_request, що дозволяє надсилати запит HTTP для перевірки авторизації. Ми вказали внутрішню адресу /автор-проксі, до якої буде перенаправлений запит на авторизацію. У цьому місці вказується параметри, які налаштовують параметри кешування та заголовків, які будуть надіслані в Nginx-ldap-auth.

Після створення конфігурації потрібно зібрати контейнер:

# Sudo docker build . -T nginx-ldap

Запустіть контейнер з Nginx з висновком консолі:

# Sudo Docker Run -P: 8081: 8081-Лінк LDAP-AUTH-Лінк Реєстр-Назва NGINX-LDAP NGINX-LDAP

Висновок команди буде таким:

/Docker-entrypoint.Sh: /docker-entrypoint.D / не порожній, спробує виконати конфігурацію / docker-entrypoint.SH: Шукаю сценарії оболонки в /docker-entrypoint.D / / docker -entrypoint.SH: Запуск /Docker-entrypoint.D/10-Listen-on-ipv6-by-default.Sh 10-Listen-on-ipv6-by-default.SH: Інформація: отримання контрольної суми/etc/nginx/conf.D/за замовчуванням.Конф 10-лист-он-на-ipv6-by-default.SH: Інформація: Увімкнено прослуховувати на ipv6 in/etc/nginx/contront.D/за замовчуванням.Conf /docker-entrypoint.SH: Запуск /Docker-entrypoint.D/20-ONVSUBST-ON-TEMPLATES.Sh /docker-entrypoint.SH: Конфігурація завершена; Готовий до запуску

Ми перевіряємо аутентифікацію користувача доменного оголошення користувача в NGINX

Тепер відкрийте браузер і перейдіть на адресу: http: // localhost: 8081/v2/_catalog. Після успішного дозволу NGINX повинен перенаправити приватне сховище Докера, описаний у статті про реєстр Докера.

У журналах веб -сервера лінія привабливості до /v2/_catalog. Т.до. Поточний користувач не уповноважений, сервер повернув код коду відповіді 401 і пропонує ввійти. Після успішного дозволу код відповіді повинен повернутися 200.

172.17.0.1 - - [21/березня/2021: 19: 19: 09 +0000] "get/v2/_catalog http/1.1 "401 179"-"" Mozilla/5.0 (x11; ubuntu; linux x86_64; rv: 82.0) Gecko/20100101 Firefox/82.0 ""-"172.17.0.1 - ldap_reader [21/mar/2021: 19: 19: 20 +0000] "get/v2/_catalog http/1.1 "200 20"-"" Mozilla/5.0 (x11; ubuntu; linux x86_64; rv: 82.0) Gecko/20100101 Firefox/82.0 ""-"

Введіть вхід та пароль користувача домену. Для тесту ви можете використовувати користувача служби, який був створений для пошуку домену деревини.

Після успішного авторизації слід відкрити сторінку зі списком зображень у сховищі Докера.

У моєму сховищі, на даний момент одне зображення, створене у статті про створення простої мікросервісу в Docker.

У журналах служби служби, що звертається до сервера LDAP, ви можете побачити наступне:

172.17.0.4 - [21/березня/2021 19:18:18] Використання імені користувача/пароля із заголовка авторизації 172.17.0.4 - LDAP_READER [21/MAR/2021 19:18:18] Пошук на сервері "Ldap: // 192.168.0.16 "з базовим DN" CN = користувачі, DC = Corp, DC = to, DC = High "з фільтром" (SamaccountName = LDAP_READER) "172.17.0.4 - LDAP_READER [21/MAR/2021 19:18:18] Спроба зв’язати за допомогою DN "CN = LDAP_READER, CN = користувачі, DC = Corp, DC = to, DC = HIIH" 172.17.0.4 - LDAP_READER [21/MAR/2021 19:18:18] Auth OK для користувача "LDAP_READER" 172.17.0.4 - LDAP_READER [21/MAR/2021 19:18:18] "Get/Auth -Proxy HTTP/1.0 "200

Журнал показує, що було зроблено підключення до сервера LDAP, облікові записи користувачів були уповноважені та перевірені.

Після перевірки ви можете зупинити контейнери та почати знову на задньому плані:

Ми видаляємо контейнери:

# Sudo docker rm ldap-auth
# Sudo docker rm nginx-ldap

Тепер ви можете запустити на задньому плані Nginx та nginx-ldap-auth. Ми також видалили прохід портів назовні у контейнері авторизації, це більше не потрібно.

# Sudo docker run -d-ім'я ldap-auth nginx-ldap-auth-daemon
# Sudo docker run -p: 8081: 8081 -d-link ldap-auth-link Registr

У цій статті ми вивчили загальний принцип налаштування авторизації за допомогою облікових даних LDAP в Nginx. Заключний бекенд може не обов'язково діяти Реєстр Docker, Таким чином, ви можете налаштувати автентифікацію в Active Directory у будь -якому з ваших додатків, опублікованих через Nginx.

Вибір найкращих програм для обробки фотографій
Великий вибір найкращих редакторів фотографій для різних операційних систем. Розглянемо програми для Windows, MacOS, Linux, а також популярних мобільн...
Як виправити 0x800f0247 у Windows 10
З'явиться помилка при спробі встановити оновлення системи. Найчастіше це пов'язано з пошкодженням системних файлів та несумісністю драйверів. В обох в...
Як використовувати Pics Print, створіть плакат аркушів A4
Багато рейнджерів та графічних редакторів можуть надсилати зображення для друку, а в різних форматах лише домашні та офісні принтери можуть працювати ...