Grafanaセキュリティ強化設定¶
概要
このマニュアルではGrafanaのリモートアクセスセキュリティを強化するためHTTPS化とリバースプロキシの導入設定を行います。
■事前確認¶
以下の手順は、9.監視ツールセットアップでGrafanaを導入した既存のリレーサーバーで実施可能です。
~作業の流れ~
- 独自ドメイン(サブドメイン)を取得
※無料ドメイン取得手順も掲載 - WEBサーバーnginxのインストール・リバースプロキシ設定
- certbotをインストール
- 無料SSL証明書(Let’s Encrypt)を取得
- nginx設定変更
- SSL証明書自動更新を設定
作業前の注意事項
以下の文章をよく読みながら進めてください。コマンドの実行忘れ・コマンドコピーミスなどに十分注意してください。
1.ドメイン(サブドメイン)を取得する¶
確認
ホームページなどの運用ですでに独自ドメインを取得済みの場合はそちらを使用出来ます。独自ドメインをお持ちでない方は無料ダイナミックDNSでドメインを取得できます。
独自ドメインをお持ちの方は、登録レジストラのDNS設定でGrafana用サブドメインを設定してください。
参考)
ホスト名:任意のサブドメイン名
TYPE:A
VALUE(値):リレーサーバーIPアドレス
DDNS Nowで無料のドメインを取得します。 DDNS Nowは完全無料・定期通知不要・サービス保障稼働率100%など、使いやすいDDNSサービスです。ただしサブドメインなどは設定できません。1アカウント1ドメイン
ドメイン(アカウント)を取得する
ここで取得したサブドメインがGrafanaのURLになります。
例)grafana-abc.f5.si
詳細設定からDNSのAレコードを設定する
「Aレコード(IPv4アドレス)」欄にGrafanaを導入しているサーバーのIPアドレスを入力して「設定を変更する」をクリックしてください
登録情報確認
2.nginxをインストールする¶
sudo apt install nginx -y
sudo systemctl --no-pager status nginx
緑色で「active (running)」になっていることを確認する。
HTTP/HTTPS用ポートを開放する
sudo ufw allow 80/tcp
sudo ufw allow 443/tcp
開放中のGrafana用3000ポートを削除する
numbered で表示された3000ポートの番号を指定して削除してください。
sudo ufw status numbered
sudo ufw delete 番号
ufwをリロードする
sudo ufw reload
確認
ローカルブラウザから http://リレーIPアドレス
にアクセスして
Nginx Welcomeページが表示されればOK!
xxxx.bbb.com
を[1.ドメイン(サブドメイン)を取得する]で取得したドメイン(サブドメイン)に置き換えて実行する
domain=xxxx.bbb.com
仮想ホストファイルを作成する
sudo cat > $HOME/$domain.conf << EOF
server {
listen 80;
server_name $domain;
location / {
proxy_set_header Host \$http_host;
proxy_pass http://localhost:3000;
}
}
EOF
仮想ホストファイルをnginxフォルダへ移動する
sudo mv $HOME/$domain.conf /etc/nginx/sites-enabled/
nginxを再起動する
sudo systemctl restart nginx
確認
ローカルブラウザからhttp://ドメイン名
でアクセスし、Grafanaログイン画面が表示されればリバースプロキシ設定に成功しました!
デフォルトのホストファイルを削除する
sudo rm /etc/nginx/sites-enabled/default
3.certbotをインストールする¶
sudo snap install core; sudo snap refresh core
「Download snap "core" (14784) from channel "stable"」と表示され、ダウンロードに数分かかります。
戻り値メッセージが異なる場合(クリックして開く)
snap "core" is already installed, see 'snap help refresh'
snap "core" has no updates available
このメッセージはインストール済みです。次に進んでください。
sudo: snap: command not found
sudo: snap: command not found
以下のコマンドでインストールしてください。
sudo apt update -y
sudo apt install snapd -y
snapのインストールが完了したら以下を実行してください。
sudo snap install core; sudo snap refresh core
<戻り値>
「Download snap "core" (14784) from channel "stable"」
2023-02-24T10:18:49+01:00 INFO Waiting for automatic snapd restart...
core 16-2.58.2 from Canonical✓ installed
snap "core" has no updates available
と表示されたら次に進んでください。
sudo snap install --classic certbot
「Download snap "core20" (1822) from channel "stable」と表示され、ダウンロードに数分かかります
certbotをシステムフォルダへコピーする
sudo ln -s /snap/bin/certbot /usr/bin/certbot
4.無料SSL証明書(Let’s Encrypt)を取得する¶
sudo certbot --nginx
画面上の質問に回答します。
-
任意のメールアドレスの登録
ここで登録したメールアドレスにSSL証明書更新前・期限切れ情報の通知が届きます。
-
Let's Encryptサービス利用規約への同意確認
-
キャンペーンメール登録確認(不要ならN)
-
SSL証明書登録ドメインの確認
1:
にご自身のドメインが表示されていることを確認し、1
を入力
-
SSL証明書取得確認
This certificate expires on
は取得したSSL証明書の有効期限なので覚えておきましょう!
Congratulations!
が表示されていれば署名書取得成功です!
確認
ローカルブラウザからhttps://ドメイン名
でアクセスし、Grafanaログイン画面が表示されればHTTPS化に成功しました!
ドメインでアクセスした際のURL欄において、httpの後にsがついているかどうかをチェックしてください。
5.nginx設定変更¶
1.websocketを有効にする
xxxx.bbb.com
を[1.ドメイン(サブドメイン)を取得する]で取得したドメイン(サブドメイン)に置き換えて実行する
domain=xxxx.bbb.com
仮想ホストファイルを開く
sudo nano /etc/nginx/sites-enabled/$domain.conf
location /
ブロックを以下の内容に書き換える
location / {
proxy_set_header Host $http_host;
proxy_pass http://localhost:3000;
}
location /api/live {
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection $connection_upgrade;
proxy_set_header Host $http_host;
proxy_pass http://localhost:3000;
}
編集後参考)
追記したら保存して閉じる
2.nginx 構成ファイルの強化 設定ファイルを開く
sudo nano /etc/nginx/nginx.conf
SSL Settings
の TLSv1
とTLSv1.1
を削除する
編集後参考)
続けて、以下の文を全てコピーしてinclude /etc/nginx/site-enabled/*;
の後に追記する
## Start: Size Limits & Buffer Overflows ##
client_body_buffer_size 3K;
client_header_buffer_size 3k;
client_max_body_size 80k;
large_client_header_buffers 2 10k;
## END: Size Limits & Buffer Overflows ##
### Directive describes the zone, in which the session states are stored i.e. store in slimits. ###
### 1m can handle 32000 sessions with 32 bytes/session, set to 5m x 32000 session ###
limit_conn_zone $binary_remote_addr zone=addr:5m;
### Control maximum number of simultaneous connections for one session i.e. ###
### restricts the amount of connections from a single ip address ###
limit_conn addr 10;
map $http_upgrade $connection_upgrade {
default upgrade;
'' close;
}
赤枠の }
の位置に注意してください。
編集後参考)
追記したら保存して閉じる
nginxエラーチェック
sudo nginx -t
戻り値
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
nginx: [emerg] unexpected "}" in /etc/nginx/sites-enabled/******.conf:8
nginx: configuration file /etc/nginx/nginx.conf test failed
nginxを再起動する
sudo systemctl restart nginx
6.SSL証明書自動更新¶
1.SSL証明書自動更新タイマー確認
このプログラムでSSL証明書が自動更新されます。
systemctl status snap.certbot.renew.timer
緑色で「active(wating)」になっていることを確認する。
2.nginx自動起動スクリプト 自動更新されたSSL証明書を有効にするため、nginx再起動スクリプトを設定します。
cat > $HOME/nginx-reload.sh << EOF
#!/bin/bash
sudo systemctl reload nginx
EOF
sudo mv $HOME/nginx-reload.sh /etc/letsencrypt/renewal-hooks/deploy/
sudo chmod 755 /etc/letsencrypt/renewal-hooks/deploy/nginx-reload.sh
3.指定ユーザーと指定コマンドでsudoパスワード要求を無効にする
シェルスクリプト内でsudoコマンドを使用しているため、スクリプト自動実行にパスワード要求をスルー出来るように設定します。
ログインユーザー名を確認する(控える)
whoami
sudo visudo
xxxx
を、上記で調べたログインユーザー名に書き換えて追記する
xxxx ALL=NOPASSWD: /bin/systemctl
このまま追記しないでください。xxxxをユーザー名に書き換えてください
編集後参考)
追記したら保存して閉じる