
Я пытаюсь настроить аутентификацию LDAPS на Zabbix 2.4, но она не работает. Вот информация о моей конфигурации:
- ОС: Debian
Установленные пакеты PHP:
libapache2-mod-php5 php-pear php5 php5-cli php5-common php5-curl php5-gd php5-imagick php5-json php5-ldap php5-mysqlnd php5-pgsql php5-readline php5-sasl zabbix-frontend-php
Эта команда работает:
ldapsearch -H ldaps://ldaps.mptest.be:636 -D cn=reader,dc=antidot,dc=prv -W -b ou=people,dc=antidot,dc=prv
Тот же URI, OU, логин, пароль на странице настройки аутентификации LDAP в Zabbix, у меня это:
ldap_bind(): Невозможно привязаться к серверу: Невозможно связаться с сервером LDAP
[authentication.php:120 → CLdapAuthValidator->validate() → CLdap->checkPass() → ldap_bind() в /usr/share/zabbix/include/classes/ldap/CLdap.php:112] LDAP: невозможно выполнить привязку по указанному Bind DN. Неверное имя пользователя или пароль!
Вот содержимое /etc/ldap/ldap.conf:
TLS_REQCERT allow BASE dc=antidot,dc=prv URI ldaps://ldap.mptest.be TLS_CACERTDIR /etc/ssl/mptest/wildcard_mptest_be.ca
(Аутентификация без SSL на порту 386 невозможна)
решение1
Вот что работает в Ubuntu 14.04. Система на базе Debian должна быть такой же:
решение2
Я решил эту проблему, посетив веб-интерфейс Zabbix, а затем перейдя по ссылкеАдминистрация->Аутентификация->LDAPи изменениеLDAP-хостпараметр из имени хоста (например, ldap.example.com
) на его IP-адрес (например, 10.6.10.10
).
решение3
PHP LDAP, честно говоря, просто отстой. Некоторое время назад я тоже боролся с Zabbix и LDAPS. Вы можете сделать все на 100% правильно, но все равно будет падать. Так что не волнуйтесь, проблема не на вашей стороне.
Чтобы это заработало, вам нужно отключить проверку сертификата TLS/SSL в OpenLDAP. PHP LDAP использует библиотеки OpenLDAP, и поэтому /etc/openldap/ldap.conf
или ~/.ldaprc
загружаются и имеют значение. (Это можно увидеть, используя пример запроса PHP LDAP и запустив его с strace -e trace=open php example.php
). Проблема здесь, похоже, находится в области использования PHP библиотек OpenLDAP, некоторых отсутствующих/неправильных/не реализованных вызовов для успешной проверки сертификата TLS. Исправление этого потребует исправления PHP.
TLS_REQCERT never
должен быть параметром, необходимым для этого. Настройки URL и OU/DC в ldap.conf не должны иметь значения, поскольку они предоставляются из конфигурации Zabbix. Я настоятельно рекомендую изменить это в ~/.ldaprc
домашнем каталоге вашего веб-сервера, чтобы не повлиять на другие приложения, использующие LDAPS.
Это решение не очень хорошее, но все же лучше, чем откат к незашифрованному LDAP. И просто для ясности, я попробовал вручную разместить CACerts для OpenLDAP, повторно сгенерировав кэш сертификатов и установив значение TLS_REQCERT
. always
Это отлично сработало с использованием eg ldapsearch
(использует ту же библиотеку, что и PHP), но все еще не удалось с функцией LDAP в PHP. Так что эта попытка, скорее всего, будет пустой тратой времени. Я не пытался разместить клиентский сертификат и использовать, TLS_KEY/TLS_CERT
как указано в ответе от @jouflux. Если это сработает, то это будет лучшим решением.