【Zabbix4.0】You are not logged in - リバースプロキシ環境での利用

 こんにちは。
ZabbixをIISでのリバースプロキシ環境で利用したところ、You are not logged in


このようなエラーメッセージが表示されログインできませんでした。
IPAddressでアクセスは可能なため、リバースプロキシを経由していることが原因と考えられます。
今回はこれをどうにかしたいと思います。

※参考にされる際は、自己責任でお願いします。


原因

今回の原因は、リバースプロキシ背後にあることによるCoociePathの定義が悪いようです。
phpのコードを変更し、nullを渡すことで回避できるとの情報がありましたので、これを試してみました。

変更

Vim等のエディタで
 /usr/share/zabbix/include/func.inc.php 
を開きます。


そして該当の箇所 'CSession::getDefaultCookiePath()' を 'null' に変更します。

 setcookie($name, $value, isset($time) ? $time : 0, CSession::getDefaultCookiePath(), null, HTTPS, true);
setcookie($name, $value, isset($time) ? $time : 0, null, null, HTTPS, true);

結果


リバースプロキシ越しに問題なくアクセスできるようになりました。
ただし、CSession::getDefaultCookiePath()を使用しないことによる影響を理解出来ていないため、何らかの悪影響がある可能性があります。(セキュリティ関係とか

getDefaultCookiePath()を見てみると、substr等を使いパスからデータを取り出すような処理をしているので、おそらく名前の通りクッキーのパスを取得しているように見えます。
そして、利用しているメソッドはsetcookieですので、おそらくクッキーを設定しているのでしょう。そこのパスがnullと言うのはどうなるんでしょう....

まとめ

とりあえず、リバースプロキシ越しにアクセスできないという問題は解決しました。
しかし、setcookieメソッドを書き換えてしまっているため、何かしらの影響がある可能性があります。影響を特定するにはプログラムを読み解かなければいけないため少し労力が必要です。また時間のあるときに読んでみたいと思います。
バージョンの変更でも解決するようですので、そちらのほうが安全かもしれません。


参考文献


コメント