Httpd
通過 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>
代理.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”。