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 から引用。

============================================================

--- 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"));

============================================================

(注意:字下げはTABです)

 

変更点を見てもらえばわかりますが、REMOTE_ADDRでIPアドレスを拾っているところをHTTP_X_FORWARDED_FORから拾うように変えています。これで良さそうです。

フロントのリバースプロキシをApacheでやっている場合は、

============================================================

ProxyPreserveHost on

============================================================

で転送先にホスト名を送る必要があります。

 

このパッチをソースの直下に置いて、reverse_proxy.patchとか適当にファイル名をつけて保存。

============================================================

patch -p1 < reverse_proxy.patch

============================================================

で適応したら、あとはビルドし直します。

 

これで解決しました。

 

 

 

アメブロだとコードが見にくいので、Qiitaにも同じ内容を書きました。

https://qiita.com/koshikawa/items/416b705d4344109833ab