Я пытаюсь реализовать настройку аутентификации CAS для Zabbix UI.
Итак, я настроил аутентификацию Zabbix на аутентификацию на основе http.
У меня есть первый (и общедоступный) httpd-сервер, я настраиваю здесь mod_proxy в контексте zabbix.
с этой конфигурацией
auth_cas.conf:
LoadModule auth_cas_module /etc/httpd/modules/mod_auth_cas.so
<IfModule mod_auth_cas.c>
CASVersion 2
CASCookieDomain domain
CASCookiePath /var/cache/apache2/mod_auth_cas/
CASLoginURL https://casserver/login
CASValidateURL https://casserver/serviceValidate
</IfModule>
proxy.conf:
ProxyPass /zabbix balancer://zabbix
<Proxy balancer://zabbix>
BalancerMember http://subserver/zabbix/
AuthType CAS
AuthName "Authentication required"
require valid-user
</Proxy>
Аутентификация CAS работает отлично, я хорошо аутентифицирован на моем общедоступном сервере httpd, как я вижу в доступе:
==> access <==
192.168.0.2 - Antoine [02/Dec/2014:17:35:33 +0100] "GET /horus/ HTTP/1.1" 200 - "https://publicaddress.com/zabbix/" "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.71 Safari/537.36"
Но мой пользователь плохо аутентифицирован на моем внутреннем сервере httpd:
192.168.0.1 - - [02/Dec/2014:17:34:46 +0100] "GET /zabbix/ HTTP/1.1" 200 3902 "-" "Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.1; Trident/6.0)"
Если я попытаюсь настроить базовую аутентификацию (AuthType Basic) на основе файла на моем общедоступном сервере, имя пользователя передается на мой внутренний httpd, и он отлично работает.
Хорошо, наконец, это работает. Вот полное решение (возможно, есть некоторые детали, которые не очень понятны, но это работает).
Переднему серверу необходим прямой доступ к серверу cas, mod_auth_cas не поддерживает запросы через прокси, а сертификат cas должен соответствовать запрошенному адресу.
На моем переднем http я устанавливаю cas auth auth_cas.conf:
<IfModule !mod_ssl.c>
LoadModule /etc/httpd/modules/ssl_module modules/mod_ssl.so
</IfModule>
LoadModule auth_cas_module /etc/httpd/modules/mod_auth_cas.so
<IfModule mod_auth_cas.c>
CASVersion 2
CASDebug On
CASAllowWildcardCert on
CASValidateDepth 9
CASCookieDomain public.domain
CASCookiePath /var/cache/apache2/mod_auth_cas/
CASLoginURL https://cas.address.com/login
CASValidateURL https://cas.address.com/serviceValidate
CASTimeout 7200
CASIdleTimeout 7200
</IfModule>
И мод прокси, proxy.conf:
ProxyPass /zabbix balancer://zabbix
ProxyPassReverse /zabbix balancer://zabbix
<Proxy balancer://zabbix >
BalancerMember http://internal.server/zabbix/
AuthType CAS
CASAuthNHeader REMOTE_USER
CasScope /zabbix
AuthName "Authentication required"
require valid-user
</Proxy>
На внутреннем сервере в файле zabbix.conf добавьте следующее:
SetEnvIfNoCase remote_user "(.*)" PHP_AUTH_USER=$1
SetEnvIfNoCase remote_user "(.*)" PHP_AUTH_PW=$1
Zabbix читает PHP_AUTH_USER для имени пользователя и проверяет, не пуст ли PHP_AUTH_PW.
Директива «CASAuthNHeader REMOTE_USER» передает аутентифицированного пользователя на внутренний фронт в заголовке http.
и директивы
SetEnvIfNoCase remote_user "(.*)" PHP_AUTH_USER=$1
SetEnvIfNoCase remote_user "(.*)" PHP_AUTH_PW=$1
установите PHP_AUTH_USER и PHP_AUTH_PW с заголовком «remote_user».
И не забудьте настроить аутентификацию zabbix на «HTTP».