У цій статті ми розглянемо покроково прозорою (SSO – Single Sign On) аутентифікації Zabbix 4.0 (і вище) в Active Directory через Kerberos протокол.

Кінцевий результат: заходячи на URL Zabbix, користувач автоматично аутентифицирующей без введення облікових даних. Для цього користувачеві потрібно бути залогіненним в Windows під доменним обліковим записом, який прив’язаний до заббіксу. Також у користувача повинен бути налаштований браузер (включена підтримка Kerberos і прописані довірені сайти інтрамережі для IE).

стенд:

  • Ubuntu Server 18.04 LTS;
  • Домен Active Directory, функціональний рівень 2008 (або вище);
  • Zabbix Server 4.0.11, веб сервер – Apache2 (інструкція по установці Zabbix);
  • A Запис в DNS для domain.local.

Примітка. Для реалізації SSO в цій статті буде використовуватися Apache2 з модулем libapache2-mod-auth-curb. Nginx в цій статті розглядатися не буде, але для нього існує модуль spnego-http-auth-nginx-module, Який має активуватися окремо при компіляції Nginx.

Налаштування LDAP аутентифікації Zabbix в Active Directory

Прив’язка доменного користувача до Zabbix

Спочатку потрібно прив’язати користувачів домену до Zabbix. Для цього достатньо створити в заббіксе користувача з таким же логіном, як і в домені. Наприклад, якщо ваш логін (атрибут sAMAccountName) користувач_5, То і користувач в Zabbix повинен мати таке ж ім’я входу.

створити користувача в zabbix

Проробіть це з кожним користувачем, який буде користуватися Zabbix.

Створення Active Directory учеткі для зв’язку Zabbix з доменом

Тепер потрібно створити в Active Directory окремого користувача, через якого буде виконуватися прив’язка Zabbix до домену. На практиці, можна використовувати будь-який доменний обліковий запис, але лечше створити виділений службовий аккаунт. У моєму випадку це буде zabbix_admin. Для створення користувача в AD я скористаюся PowerShell командою New-ADUser:

New-ADUser -Name "zabbix_admin" -GivenName "zabbix_admin" -Surname "zabbix_admin" -SamAccountName "zabbix_admin" -AccountPassword (Read-Host -AsSecureString "Password:") -DisplayName "zabbix_admin" -Enabled $true

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

Налаштування LDAP аутентифікації в веб інтерфейсі Zabbix

Тепер переналаштувати Zabbix на LDAP аутентифікацію. У веб-інтерфейсі перейдіть в Адміністрація -> Аутентифікація, вкладка Налаштування LDAP. Увімкніть опцію Enable LDAP authentication і заповніть наступні поля.

LDAP host: ldap://dc1.domain.local
Port: 389
Base DN: DC=domain, DC=local
Search attribute: sAMAccountName
Bind DN: CN=zabbix_admin, OU=Users, DC=domain, DC=local

Опис кожного параметра ви можете подивитися в документації Zabbix https://www.zabbix.com/documentation/current/manual/web_interface/frontend_sections/administration/authentication в розділі Аутентифікація LDAP.

настройка LDAP аутентфікаціі в zabbix через Active Directory

Перед завершенням настройки, обов’язково перевірте валідність ваших налаштувань, виконавши тестовий логін (кнопка Тест). Вкажіть користувача (ми завели його в zabbix раніше) і його пароль з AD.
перевірка ldap аутентфікаціі в zabbix

Якщо тест пройдено успішно, то зберігайте налаштування і перемкніть тип авторизації в Zabbix з Internal на LDAP.

Змінити тіа аутентфікаціі в zabbix на ldap

Увімкніть HTTP аутентифікацію (HTTP Settings -> Увімкнути автентифікацію HTTP).

zabbix включити HTTP authentication

На цьому настройка LDAP аутентифікації завершена.

Порада. У разі недоступності вашого LDAP сервера, ви не зможете потрапити в Zabbix. Щоб знову перейти до внутрішню аутентифікацію, зайдіть в mysql і виконайте команду:

update zabbix.config set authentication_type="0" where configid='1';

Налаштування прозорою (Single Sign On) аутентифікації в Zabbix (Apache2, krb5-user)

Спочатку в файлі / etc / hostname вкажіть FQDN ім’я сервера, яке має збігатися з DNS записом у вашому домені, в моєму випадку це zabbix.domain.local.

У файлі / etc / hosts також пропишіть FQDN вашого сервера на локальний IP і на IP вашого сервера:

127.0.0.1 localhost zabbix.domain.local
10.10.1.50 zabbix.domain.local

Для коректної роботи Kerberos аутентифікації необхідно синхронізувати час з контролером вашого домену. Ставимо пакет ntpdate і направляємо його на контролер домену

apt-get install ntp ntpdate
ntpdate dc.domain.local

У CentOS 8 для синхронізації часу використовується chrony. Ntp і ntpdate відсутні в офіційних репозиторіях.

Тепер нам потрібно згенерувати keytab файл. Клавіатура – це файл який містить SPN і зашифровані ключі. Keytab використовується для аутентифікації на різних системах з використанням Kerberos без введення пароля.

Згенерувати keytab файл можна на контролері домену:

  1. Залогініться на контролер домену і запустіть командний рядок з правами адміністратора. Перейдіть в директорію C:
  2. Введіть:
    ktpass -princ HTTP/zabbix.domain.local@DOMAIN.LOCAL -mapuser zabbix_admin -pass STRONGPASS -crypto ALL -ptype KRB5_NT_PRINCIPAL -out zabbix.keytab -setupn –setpass
  3. Скопіюйте файл C: zabbix.keytab на ваш Zabbix сервер в директорію / etc / apache2 /.

Встановимо необхідні пакети для роботи Kerberos і модуль для apache2:

apt install krb5-user libapache2-mod-auth-kerb

Сконфігуріруем krb5-user. Правимо конфігураційний файл /etc/krb5.cnf:

[logging]
default = FILE:/var/log/krb5libs.log
kdc = FILE:/var/log/krb5kdc.log
admin_server = FILE:/var/log/kadmind.log
[libdefaults]
default_realm = DOMAIN.LOCAL
default_keytab_name = /etc/apache2/zabbix.keytab
dns_lookup_kdc = false
dns_lookup_realm = false
forwardable = true
ticket_lifetime = 24h
[realms]
DOMAIN.LOCAL = {
 kdc = dc.domain.local
 default_domain = DOMAIN.LOCAL
 admin_server = dc.domain.local
}
[domain_realm]
.domain.local = DOMAIN.LOCAL
domain.local = DOMAIN.LOCAL

Підставте свій домен, в деяких місцях домен написаний в заголовному вигляді – дотримуйтеся цього правила.

Примітка. Зверніть увагу на рядок з кейтаб файлом “default_keytab_name = /etc/apache2/zabbix.keytab”, переконайтеся, що файл доступний цим шляхом. Обов’язково дайте цього файлу права на читання для www-data, виконайте chown www-data:www-data /etc/apache2/zabbix.keytab

Перевіряємо роботу Kerberos аутентифікації в Linux:

kinit -kV -p HTTP/zabbix.domain.local –t /etc/apache2/zabbix.keytab

kinit - перевірка Kerberos аутентифікації в Linux через keytab файл

Ви можете зіткнутися з помилкою

kinit: Client 'HTTP/zabbix.domain.local@DOMAIN.LOCAL’ not found in Kerberos database while getting initial credentials

В цьому випадку перш за все спробуйте авторизуватися з-під іншого користувача, наприклад, ваш обліковий запис ^

kinit -pV LOGIN

Якщо аутентифікація пройде успішно, то значить справа в кейтаб файлі. Переконайтеся, що ви правильно згенерували його. Перевірте коректність команди для створення keytab файлу.

Перевірте наявність SPN записи для вашого службового облікового запису zabbix в AD. У командою рядку контролера домену наберіть:

setspn -l zabbix_admin

setspn -l zabbix_admin

Ви повинні побачити подібне повідомлення, запис повинна бути в форматі HTTP / zabbix.domain.local, якщо записи немає, потрібно її додати.

setspn -a HTTP/zabbix.domain.local zabbix_admin

додати setspn запис користувачеві ad

Також потрібно перевірити що у користувача змінилося ім’я входу на HTTP / zabbix.domain.local.

ім'я для входу SPN

Якщо не змінилося, то змініть його вручну.

Тепер потрібно змінити конфигурационной файл apache2 – /etc/apache2/sites-available/000-default.conf.

Під рядком ServerName zabbix.domain.local додайте

<Location />
AuthType Kerberos
AuthName "Kerberos authenticated"
KrbAuthRealms DOMAIN.LOCAL
#KrbServiceName HTTP/zabbix.domain.local
KrbServiceName Any
Krb5Keytab /etc/apache2/zabbix.keytab
KrbMethodNegotiate On
KrbSaveCredentials on
KrbLocalUserMapping on
Require valid-user
</Location>

Часто зустрічається помилка, яка пов’язана з розбіжністю KrbServiceName з тим, що прописаний в keytab файлі, тому на час тестування можна поставити значення Any. Після того як все запрацює, впишіть валідності назва сервісу. Звіритися можна через команду klist -le /etc/apache2/zabbix.keytab.

Налаштування браузерів для Kerberos аутентифікації

Щоб браузер Internet Explorer почав використовувати Kerberos аутентифікацію на сайті, потрібно додати цей URL в Local Intranet сайти. Google Chrome успадковує ці настройки Internet Explorer, тому окремо його налаштовувати не треба.

замітка. URL вашого сайту Zabbix повинен бути відсутнім в списку Trusted sites, інакше Kerberos працювати не буде. Сайт повинен бути прописаний тільки у вкладці Intranet sites.

В IE перейдіть в Internet Options -> Security.

Додати сайт zabbix в місцеву мережу

У Local intranet тисніть Sites, проставте чекбокси як на скріншоті і тисніть Advanced.

настройки IE для SSO аутентфікаціі

Пропишіть URL вашого zabbix сервера.

додати сайт zabbix в local inranet

Перейдіть у вкладку Розширений і включіть параметр Увімкнути інтегровану автентифікацію Windows.

Увімкнути інтегровану автентифікацію Windows

Якщо у вас не був відзначений цей пункт – перезавантажте комп’ютер. За замовчуванням він включений.

Ви також можете налаштувати це через групові політики

gpo для додавання сайту в довірені

У браузері Mozilla Firefox в близько: config поміняйте додайте url адресу zabbix сервера в наступні параметри:

network.automatic-ntlm-auth.trusted-uris
network.negotiate-auth.delegation-uris
network.negotiate-auth.trusted-uris

настройки kerberos аутентфікаціі для mozilla firefox

У разі, якщо у вас виникнуть проблеми, зверніться до більш розгорнутої статті по налаштуванню Kerberos в браузерах https://winitpro.ru/index.php/2018/01/22/nastrojka-kerberos-autentifikacii-v-razlichnyx-brauzerax/

Після виконання цих етапів, настройку можна вважати завершеною. При зверненні на URL вашого Zabbix, ви має автоматично аутентифицироваться без введення пароля ..

Налагодження і усунення проблем c Kerberos аутентифікації в Apache

При виникненні проблем, включіть режим налагодження в apache2:

У файлі /etc/apache2/sites-available/000-defaults.conf перед закриває тегом впишіть:

LogLevel trace8

LogLevel trace8

Перезавантажте apach, тепер в error.log апача ви зможете бачити якісь помилки видає модуль Kerberos.

Для зручності використовуйте команду з фільтром по IP

tail -f /var/log/apache2/error.log | grep ‘ваш ип’

Для роботи та діагностики з Kerberos можна використовувати команди кініт і klist.

kinit – утиліта для отримання і кешування Kerberos тікетів. приклад:

kinit –V -k -t /etc/apache2/zabbix.keytab –p HTTP/zabbix.domain.local@DOMAIN.LOCAL

При правильно згенерованих keytab файлі, команда успішно виконатися, і ви отримаєте повідомлення про успішну аутентифікації

кініт

утилітою klist можна подивитися кешированниє тікети Kerberos:

klist -a

klist

Leave a Reply

Your email address will not be published. Required fields are marked *