外はBASIC認証、中はSatisfy anyでIP認証だけ

muninではserver-statusを取得するときにはまったメモ
外部からもサーバー監視したい。けど晒したくないのでBASIC認証は欲しい。
そうするとmuninがserver-statusを取得できなくなって、Apacheに関する情報が得られなくなる。

そこでDirectory、またはLocationの中でSatisfyって指定があるらしい。

<Directory "/var/www/html">
    AuthType Basic
    AuthUserFile /home/hogehoge/.htpasswd
    Require valid-user
    
    Order deny,allow
    Deny from all
    Allow from all
</Directory>

このようにとりあえずVirtualHostの公開ディレクトリ全体にたいしてBASIC認証をかける。

すると上述したように、muninが/server-statusが取得できなくなるので、Locationを使ってそこだけ内部からのアクセスはBASIC認証無しにアクセス許可を与えたい。

<Location /server-status>
    SetHandler server-status
    Satisfy Any
    Order deny,allow
    Deny from all
    Allow from 127.0.0.1
</Location>

こうすることで、ローカルホストからのアクセスであればBASIC認証無しでアクセス可能になる。

ちなみにSatisfy Anyは許可されたユーザー、またはIPのどちらかひとつでアクセス許可を与えるけども、AnyではなくAllを指定すると両方必要になるらしい。muninに限らずいちいいちパスワード入力するのめんどいっすって思ったときに許可されたIP書いておくと便利そう。

ここでひとつハマったのがこれでもまだmuninがアクセス拒否されてる。ためしにtelnet 127.0.0.1で/server-statusをHTTP GETしてみると確かに↑に書いた設定は有効で取得できる。外部からはBASIC認証を要求される。Why?

で、結局muninがどうやって自分のサーバーの/server-statusを取得しにいこうとしているのか知らないけども、localhostではなく

    Allow from 123.456.789.012

と、ローカルホストではなくそのサーバーに割り当てられてるIPを記述したところ、無事取得できるようになった。ドメイン名でもいいのかもしれない。

今回は参考サイトがほとんどないのでこれが正しいやり方なのかは分かりません。