通过 mod_proxy 为 Zabbix ui 设置 Cas 身份验证

通过 mod_proxy 为 Zabbix ui 设置 Cas 身份验证

我尝试为 Zabbix UI 实现 CAS 身份验证设置。

因此我将 Zabbix 身份验证配置为基于 http 的身份验证

我有第一个(公共的)httpd 服务器,我在这里在 zabbix 上下文中设置了 mod_proxy。

使用这种配置

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>

代理服务器配置文件:

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,并且它可以完美运行。

答案1

好的,终于成功了。这是完整的解决方案(可能有些细节不太清楚,但确实有效)。

前端服务器需要直接访问 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

使用标题“remote_user”设置 PHP_AUTH_USER 和 PHP_AUTH_PW。

并且不要忘记将 zabbix 身份验证配置为“HTTP”。

相关内容