Httpd

通過 mod_proxy 為 Zabbix ui 設置 Cas 身份驗證

  • December 8, 2014

我嘗試為 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>

代理.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>

和 mod 代理 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 authentification配置為“HTTP”。

引用自:https://serverfault.com/questions/648586