目的
前回のブログでは計測した環境データをデータを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との接続が不安定になったため今回は実装しなかった。
参考文献等
appendix
grafanaのメール設定方法はこちらです。