小規模サーバー環境のリソース監視に最適なツール「Munin」は、デフォルトではWebインターフェースに制限がかかっていないため、セキュリティ的に弱いところがあります。
ローカルネットワーク上なら、このような点もそれほど気にする必要はないかもしれませんが、インターネットへ公開しているサーバーにMuninサーバーをインストールするような場合は、なにがしかのアクセス制限が必要でしょう。
そこでここでは、Nginx上に構築したMuninサーバーでアクセス制限を行う方法として、Nginxの設定で実装可能な2つの方法(IPアドレスにより制限する方法と、Basic認証を実装する方法)を紹介します。
Muninをよりセキュアに運用したい場合に参考にしてください。
目次
IPアドレスによる制限方法
IPアドレスにより制限する場合は、Nginxの設定ファイルのserverディレクティブや、locationディレクティブに記述するのが一般的です。
以下の例では、serverディレクティブに記述しており、制限内容は次のとおりです。
- 192.168.10.0/24からのアクセスは許可
- 127.0.0.1(自分自身)からのアクセスは許可
- 上記以外はすべて接続拒否
# vi /etc/nginx/conf.d/munin.conf
server {
listen 80;
server_name 192.168.10.170;
root /var/www/html/munin/;
index index.html index.htm;
…
#アクセス制限設定
allow 192.168.10.0/24;
allow 127.0.0.1;
deny all;
…
}
以上で、許可されていないIPアドレスからアクセスすると、次のようにアクセスが拒否されます。
制限の詳しい記述方法は、以下の公式サイトをご覧ください。
nginx.org | http_access_module
Basic認証による制限方法
Basic認証は、Web上で利用できる認証方法の一つで、ログイン情報を利用して認証しないとWebページを表示できないようにできます。
設定する際は、Nginxの設定ファイルのserverディレクティブやlocationディレクティブに記述するのが一般的です。
手順は、次のとおりです。
認証ユーザー情報の作成
まず、以下のツールをインストールして、認証で使用するユーザー情報ファイルを作成します。ここでは例として「user1」「user2」の2つのユーザー情報を作成します。
# yum install httpd-tools
# htpasswd -c /etc/nginx/.htpasswd user1
New password: *****
Re-type new password: *****
Adding password for user user1
# htpasswd /etc/nginx/.htpasswd user2
New password: *****
Re-type new password: *****
Adding password for user user2
Basic認証の実装
次にNginxの設定ファイルにBasic認証の設定を記述します。
# vi /etc/nginx/conf.d/munin.conf
server {
listen 80;
server_name 192.168.10.170;
root /var/www/html/munin/;
index index.html index.htm;
…
auth_basic "Restricted"; #認証時に表示されるメッセージ
auth_basic_user_file /etc/nginx/.htpasswd; #.htpasswdファイルのパスを指定
…
}
以上で、Muninサーバーにブラウザでアクセスすると、ユーザー情報を入力するためのポップアップが表示され、上で設定したユーザー名とパスワードで認証をパスしないと、Muninの画面が表示されなくなります。
あとがき
IPアドレスによる制限とBasic認証を両方利用すれば、よりセキュリティを強化できると思います。
ただ、1台のサーバーに複数のサービスを同居させるのは、トラブルが起こった時の原因の切り分けが難しくなるため、個人的には避けたいところです。
VPSとかだと、同居せざるを得ないのかもしれませんが。