Zabbix: настройка прозрачной SSO аутентификации в Active Directory

В этой статье мы рассмотрим пошаговую настройку прозрачной (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-kerb. Nginx в этой статье рассматриваться не будет, но для него существует модуль spnego-http-auth-nginx-module, который необходимо включать отдельно при компиляции Nginx.

Настройка LDAP аутентификации Zabbix в Active Directory

Привязка доменного пользователя к Zabbix

Сначала нужно привязать пользователей домена к Zabbix. Для этого достаточно создать в заббиксе пользователя с таким же логином, как и в домене. Например, если ваш логин (атрибут sAMAccountName) user_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 аутентификацию. В веб-интерфейсе перейдите в Administration -> Authentication, вкладка LDAP settings. Включите опцию 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 authentication.

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

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

Если тест пройден успешно, то сохраняйте настройки и переключите тип авторизации в Zabbix с Internal на LDAP.

Изменить тиа аутентфикации в zabbix на ldap

Включите HTTP аутентификацию (HTTP Settings -> Enable HTTP authentication).

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 файл. 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.

loginname 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

Перейдите во вкладку Advanced и включите параметр Enable Integrated Windows Authentication.

Enable Integrated Windows Authentication

Если у вас не был отмечен этот пункт – перезагрузите компьютер. По умолчанию он включен.

Вы также можете настроить это через групповые политики

gpo для добавления сайта в доверенные

В браузере Mozilla Firefox в about: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 перед закрывающим тегом </VirtualHost> впишите:

LogLevel trace8

LogLevel trace8

Перезагрузите apach, теперь в error.log апача вы сможете видеть какие ошибки выдаёт модуль Kerberos.

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

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

Для работы и диагностики с Kerberos можно использовать команды kinit и klist.

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

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

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

kinit

Утилитой klist можно посмотреть кэшированные тикеты Kerberos:

klist -a

klist


Предыдущая статья Следующая статья


Комментариев: 0 Оставить комментарий

Оставить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *

Я не робот( Обязательно отметьте)