注意:スカイホビット越川のシステム監視ブログ https://ameblo.jp/skyhobbit/entry-12592619048.html と同じ内容です。
XymonにはEnable/Disable という監視を一時停止する機能がありますが、それが使えなくなる事象がありました。
AmazonLinux 2環境のXymon 4.3.30。
Enable/Disable画面の Select what to Disable で「Apply」をクリックしても、なにも反応がありません。
このとき Apache のエラーログには
AH01215: 日付 Enadis POST that is not coming from self or svcstatus (referer=http://example.com/xymon-seccgi/enadis.sh). Ignoring.: /home/xymon/cgi-secure/enadis.sh, referer: http://example.com/xymon-seccgi/enadis.sh
とのエラーメッセージが出力されています。
EnadisとはEnable/Disableの略ですね。POSTはhttpのPOSTのことではなく投稿との意味。
Enable/Disableの投稿は自分自身かsvcstatusからは許可されていないとのことです。
リバースプロキシを使って転送している環境なので使えないと出ているようです。
公式メーリングリストを探すと 2019年9月12日 に René Vermareさんからパッチの投稿がありました。
https://lists.xymon.com/archive/2019-September/046708.html から引用。
(注意:字下げはTABです)
--- a/web/enadis.c 2019-07-23 17:29:06.000000000 +0200
+++ b/web/enadis.c 2019-09-11 01:06:33.283642013 +0200
@@ -332,7 +332,8 @@
int argi, i;
char *username = getenv("REMOTE_USER");
char *userhost = getenv("REMOTE_HOST");
- char *userip = getenv("REMOTE_ADDR");
+ char *userip = getenv("HTTP_X_FORWARDED_FOR");
+ if (userip == NULL) userip = getenv("REMOTE_ADDR");
SBUF_DEFINE(fullmsg);
char *envarea = NULL;
int obeycookies = 1;
--- a/web/acknowledge.c 2019-07-23 17:29:06.000000000 +0200
+++ b/web/acknowledge.c 2019-09-11 01:01:55.493676233 +0200
@@ -374,7 +374,8 @@
parse_query();
if (getenv("REMOTE_USER")) {
- char *remaddr = getenv("REMOTE_ADDR");
+ char *remaddr = getenv("HTTP_X_FORWARDED_FOR");
+ if (remaddr == NULL) remaddr = getenv("REMOTE_ADDR");
SBUF_MALLOC(acking_user, 1024 + strlen(getenv("REMOTE_USER")) + (remaddr ? strlen(remaddr) : 0));
snprintf(acking_user, acking_user_buflen, "\nAcked by: %s", getenv("REMOTE_USER"));
変更点を見てもらえばわかりますが、REMOTE_ADDRでIPアドレスを拾っているところをHTTP_X_FORWARDED_FORから拾うように変えています。これで良さそうです。
フロントのリバースプロキシをApacheでやっている場合は、
ProxyPreserveHost on
で転送先にホスト名を送る必要があります。
このパッチをXymonソースコード群の直下に置いて、reverse_proxy.patchとか適当にファイル名をつけて保存。
$ patch -p1 < reverse_proxy.patch
で適応したら、あとはビルドし直します。
これで解決しました。