環境計測実験2〜セキュリティの強化〜

目的

前回のブログでは計測した環境データをデータをMQTTを利用して通信し可視化するところまで行った。今回は前回利用したサーバーのセキュリティを少しだけ強化することにして、主にリバースプロキシの構築を行うことにする。

使用機器

MacBookPro

conoha VPSサーバー(ubuntu)
今回はDNSの設定の関係でAWSのEC2は利用しなかった

 

実験方法

前回と同じ方法で可視化する

node-redのパスワードを設定する

grafanaをリバースプロキシ する

node-redのパスワードを設定する

node-redはデフォルの状態ではパスワードが設定されておらず、誰でもアクセスできる状態になっている。このままではクラッキングされる可能性が高くなるので、ユーザーの認証の有効化をしてユーザー名とパスワードを設定した。
ユーザー認証を有効化するにはsettings.jsの中を修正する必要があるが、ubuntuの場合settings.jsは
~/.node-red/settings.js
にあるのでこの中を少し書き換えた。

//adminAuth: {
    //    type: "credentials",
    //    users: [{
    //        username: "admin",
    //        password: "$2a$08$zZWtXTja0fB1pzD4sHCMyOCMYz2Z6dNbM6tl8sJogENOMcxWV9DN.",
    //        permissions: "*"
    //    }]
    //},

のコメントアウトを解除してusernameとpasswordを書き換えます。この時パスワードはハッシュ化したパスワードになりますので注意する必要があります。
パスワードをハッシュ化する方法をubuntuの場合で説明します。(私は少しハマりました)
パスワードのハッシュ化にはnode-red-adminツールを利用した。

.node-redディレクテリにnode-red-adminをインストールした。

cd ~/.node-red
sudo npm install -g node-red-admin

使い方は.node-redディレクトリで

node-red-admin hash-pw

と入力すると、

Password:

と表示されるので、任意のパスワードを入力をする。そうするとハッシュ化された文字列が出力された。
usernameとpasswordを書き換えた。

adminAuth: {
        type: "credentials",
        users: [{
            username: "任意の名前",
            password: "ハッシュ化したパスワード",
            permissions: "*"
        }]
    },

書き換えた後でnode-redを起動すると

のような認証画面が出てくるようになった。

 

Grafanaをリバースプロキシする

今回はApache2を利用するので、Apache2をインストールした。

sudo apt install apache2

でインストールした。

シンボリックをmods-enableに作成した。

cd /etc/apache2/mods-enabled
sudo ln -s ../mods-available/proxy.load proxy.load
sudo ln -s ../mods-available/proxy_http.load proxy_http.load
sudo ln -s ../mods-available/proxy.conf proxy.conf

リバースプロキシ を設定した。

/etc/apache2/mods-enabled/proxy.conf ファイルを編集した。

proxy.confの中の

<IfModule mod_proxy.c>

</IfModule mod_proxy.c>の間に

ProxyRequests Off
ProxyPass /grafana http://127.0.0.1:3000
ProxyPassReverse  /grafana http://127.0.0.1:3000

を書き込んだ。

次にgrafana側の設定をした。

grafana.iniの中の;root_url = http://localhost:3000のコメントアウトを外し末尾に/grafanaを書き足した。具体的には、

/etc/grafana/grafana.iniの中を

root_url = http://localhost:3000/grafana

のように編集して、grafanaとapache2を再起動した。

sudo service apache2 restart
sudo service grafana-server restart

ここで、http://ドメイン名/grafanaにブラウザで接続することによって、grafanaを利用できるようになった。
ブラウザで使用する3000番のポートは閉じておく。

結果

grafanaはリバースプロキシしたために80番ポートでapache2が受けることが可能になり3000番ポートを解放しなくてもよくなった。またサーバー証明をセットすることにより、https暗号通信を行うことが可能になった。

考察

node-redにパスワードをかけ、grafanaを80番ポートで受けることにより、余計なポートを閉じることができたので少しはセキュリティが高まったと考えることができる。
node-redも設定により、https暗号通信を行うことも可能だが、今回は省略した。必要がないときはポートを綴じておく方が無難だと考えられる。

Appendix

node-redもリバースプロキシ を利用することは可能だが、node-red serverとの接続が不安定になったため今回は実装しなかった。

参考文献等

node-red user group japan

SignalFlag”z”

grafana4.02をApacheの下で動かす

ServerWorld

appendix

grafanaのメール設定方法はこちらです。

Qiita Grafanaのメール設定で詰まった話

Leave Comment

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です