Назад | Перейти на главную страницу

Настройка аутентификации Cas для Zabbix ui через mod_proxy

Я пытаюсь реализовать настройку аутентификации 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».