外は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を記述したところ、無事取得できるようになった。ドメイン名でもいいのかもしれない。
今回は参考サイトがほとんどないのでこれが正しいやり方なのかは分かりません。