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.
Создание 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.
Перед завершением настройки, обязательно проверьте валидность ваших настроек, выполнив тестовый логин (кнопка Test). Укажите пользователя (мы завели его в zabbix ранее) и его пароль из AD.
Если тест пройден успешно, то сохраняйте настройки и переключите тип авторизации в Zabbix с Internal на LDAP.
Включите HTTP аутентификацию (HTTP Settings -> Enable HTTP authentication).
На этом настройка LDAP аутентификации завершена.
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
Теперь нам нужно сгенерировать keytab файл. Keytab — это файл который содержит SPN и зашифрованные ключи. Keytab используется для аутентификации на различных системах с использованием Kerberos без ввода пароля.
Сгенерировать keytab файл можно на контроллере домена:
- Залогиньтесь на контроллер домена и запустите командную строку с правами администратора. Перейдите в директорию C:
- Введите:
ktpass -princ HTTP/[email protected] -mapuser zabbix_admin -pass STRONGPASS -crypto ALL -ptype KRB5_NT_PRINCIPAL -out zabbix.keytab -setupn –setpass
- Скопируйте файл 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: Client 'HTTP/[email protected]’ not found in Kerberos database while getting initial credentials
В этом случае прежде всего попытайтесь авторизоваться из-под другого пользователя, например, вашей учетной записи^
kinit -pV LOGIN
Если аутентификация пройдет успешно, то значит дело в кейтаб файле. Убедитесь, что вы правильно сгенерировали его. Проверьте корректность команды для создания keytab файла.
Проверьте наличие SPN записи для вашего служебной учетной записи zabbix в AD. В командой строке контролера домена наберите:
setspn -l zabbix_admin
Вы должны увидеть подобное сообщение, запись должна быть в формате HTTP/zabbix.domain.local, если записи нет, нужно её добавить.
setspn -a HTTP/zabbix.domain.local zabbix_admin
Также нужно проверить что у пользователя изменилось имя входа на HTTP/zabbix.domain.local.
Если не изменилось, то измените его вручную.
Теперь нужно изменить конфигурационной файл apache2 — /etc/apache2/sites-available/000-default.conf.
Под строчкой ServerName zabbix.domain.local добавьте
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
Часто встречается ошибка, которая связана с несовпадением 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.
В Local intranet жмите Sites, проставьте чекбоксы как на скриншоте и жмите Advanced.
Пропишите URL вашего zabbix сервера.
Перейдите во вкладку Advanced и включите параметр Enable Integrated Windows Authentication.
Если у вас не был отмечен этот пункт – перезагрузите компьютер. По умолчанию он включен.
Вы также можете настроить это через групповые политики
В браузере Mozilla Firefox в about:config поменяйте добавьте url адрес zabbix сервера в следующие параметры:
network.automatic-ntlm-auth.trusted-uris network.negotiate-auth.delegation-uris network.negotiate-auth.trusted-uris
В случае, если у вас возникнут проблемы, обратитесь к более развернутой статье по настройке 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
Перезагрузите 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/[email protected]
При правильно сгенерированом keytab файле, команда успешно выполниться, и вы получите сообщение об успешной аутентификации
Утилитой klist можно посмотреть кэшированные тикеты Kerberos:
klist -a
CentOS
Zabbix: настройка прозрачной SSO аутентификации в Active Directory