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_x000D_Port: 389_x000D_Base DN: DC=domain, DC=local_x000D_Search attribute: sAMAccountName_x000D_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 аутентификации завершена.

Совет. В случае недоступности вашего 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_x000D_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/ [email protected] -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]_x000D_default = FILE:/var/log/krb5libs.log_x000D_kdc = FILE:/var/log/krb5kdc.log_x000D_admin_server = FILE:/var/log/kadmind.log_x000D_[libdefaults]_x000D_default_realm = DOMAIN.LOCAL_x000D_default_keytab_name = /etc/apache2/zabbix.keytab_x000D_dns_lookup_kdc = false_x000D_dns_lookup_realm = false_x000D_forwardable = true_x000D_ticket_lifetime = 24h_x000D_[realms]_x000D_DOMAIN.LOCAL = {_x000D_ kdc = dc.domain.local_x000D_ default_domain = DOMAIN.LOCAL_x000D_ admin_server = dc.domain.local_x000D_}_x000D_[domain_realm]_x000D_.domain.local = DOMAIN.LOCAL_x000D_domain.local = DOMAIN.LOCAL_x000D_

Подставьте свой домен, в некоторых местах домен написан в заглавном виде – соблюдайте это правило.

Примечание . Обратите внимание на строчку с кейтаб файлом “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 добавьте

<Location />_x000D_AuthType Kerberos_x000D_AuthName "Kerberos authenticated"_x000D_KrbAuthRealms DOMAIN.LOCAL_x000D_#KrbServiceName HTTP/zabbix.domain.local_x000D_KrbServiceName Any_x000D_Krb5Keytab /etc/apache2/zabbix.keytab_x000D_KrbMethodNegotiate On_x000D_KrbSaveCredentials on_x000D_KrbLocalUserMapping on_x000D_Require valid-user_x000D_</Location>_x000D_

Часто встречается ошибка, которая связана с несовпадением 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_x000D_network.negotiate-auth.delegation-uris_x000D_network.negotiate-auth.trusted-uris

В случае, если у вас возникнут проблемы, обратитесь к более развернутой статье по настройке Kerberos в браузерах https://remontka.com/nastrojka-kerberos-autentifikacii-v-razlichnyx-brauzerax/

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

Отладка и устранение проблем c Kerberos аутентификацией в Apache

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

В файле /etc/apache2/sites-available/000-defaults.conf перед закрывающим тегом </VirtualHost> впишите:

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

admin

Share
Published by
admin

Recent Posts

Консоль удаленного рабочего стола(rdp console)

Клиент удаленного рабочего стола (rdp) предоставляет нам возможность войти на сервер терминалов через консоль. Что…

2 недели ago

Настройка сети в VMware Workstation

В VMware Workstation есть несколько способов настройки сети гостевой машины: 1) Bridged networking 2) Network…

2 недели ago

Логи брандмауэра Windows

Встроенный брандмауэр Windows может не только остановить нежелательный трафик на вашем пороге, но и может…

2 недели ago

Правильный способ отключения IPv6

Вопреки распространенному мнению, отключить IPv6 в Windows Vista и Server 2008 это не просто снять…

2 недели ago

Ключи реестра Windows, отвечающие за параметры экранной заставки

Параметры экранной заставки для текущего пользователя можно править из системного реестра, для чего: Запустите редактор…

2 недели ago

Как управлять журналами событий из командной строки

В этой статье расскажу про возможность просмотра журналов событий из командной строки. Эти возможности можно…

2 недели ago