WebARENAでUbuntuサーバを立てる(2)

MQTTブローカーである mosquitto をインストールしてみます。インターネット上に見えるMQTTブローカーなので、SSLでの暗号化と接続のための何らかの認証を導入します。
本来ならば、クライアントの正当性を認証するところまでやるべきなのですが、1クライントごとに証明書を生成して管理する必要が出てきます。趣味の世界でそこまでやると大変なので、MQTTブローカーに接続する際にパスワード認証を行うレベルにとどめました。

こちらの記事を参考にしました。

mosquittoのインストール

以下の手順でインストールしていきます。

root@i-xxxxxxxx:/etc/nginx/sites-available# apt install mosquitto mosquitto-clients

mosquittoが接続の認証に使用するパスワードファイルを作成します。

root@i-xxxxxxxx:/etc/mosquitto# mosquitto_passwd -c /etc/mosquitto/passwd (ユーザー名)

以下の内容で mosquitto の設定ファイル /etc/mosquitto/conf.d/default.conf を作成します。(※mosquittoでLet’s Encryptの証明書を使うと、2ヶ月に一度証明書が更新されるたびにファームウェアを修正する必要が出てきます。後日こちらの記事でMQTTについてはオレオレ証明書を使うように設定変更しています。)

allow_anonymous false
password_file /etc/mosquitto/passwd

listener 1883 localhost

listener 8883
certfile /etc/letsencrypt/live/example.com/cert.pem
cafile /etc/letsencrypt/live/example.com/chain.pem
keyfile /etc/letsencrypt/live/example.com/privkey.pem

listener 8083
protocol websockets
certfile /etc/letsencrypt/live/example.com/cert.pem
cafile /etc/letsencrypt/live/example.com/chain.pem
keyfile /etc/letsencrypt/live/example.com/privkey.pem

mosquitto を再起動することで、設定ファイルを適用した状態で active 状態であることを確認します。

root@i-xxxxxxxx:/etc/mosquitto# systemctl restart mosquitto
root@i-xxxxxxxx:/etc/mosquitto# systemctl status mosquitto
● mosquitto.service - LSB: mosquitto MQTT v3.1 message broker
Loaded: loaded (/etc/init.d/mosquitto; generated)
Active: active (exited) since Sun 2020-08-02 21:30:06 UTC; 12s ago
Docs: man:systemd-sysv-generator(8)
Process: 32035 ExecStop=/etc/init.d/mosquitto stop (code=exited, status=0/SUCCESS)
Process: 32041 ExecStart=/etc/init.d/mosquitto start (code=exited, status=0/SUCCESS)

Aug 02 21:30:06 i-xxxxxxxx systemd[1]: Stopped LSB: mosquitto MQTT v3.1 message broker.
Aug 02 21:30:06 i-xxxxxxxx systemd[1]: mosquitto.service: Found left-over process 31814 (mosquitto) in contro
Aug 02 21:30:06 i-xxxxxxxx systemd[1]: This usually indicates unclean termination of a previous run, or servi
Aug 02 21:30:06 i-xxxxxxxx systemd[1]: Starting LSB: mosquitto MQTT v3.1 message broker...
Aug 02 21:30:06 i-xxxxxxxx mosquitto[32041]: * Starting network daemon: mosquitto
Aug 02 21:30:06 i-xxxxxxxx mosquitto[32041]: ...done.
Aug 02 21:30:06 i-xxxxxxxx systemd[1]: Started LSB: mosquitto MQTT v3.1 message broker.

ファイアウォールの設定を変更して穴あけをします。

root@i-xxxxxxxx:/etc/mosquitto# ufw allow 8883
root@i-xxxxxxxx:/etc/mosquitto# ufw allow 8083

証明書自動更新時にmosquittoを再起動するよう設定します。/etc/letsencrypt/renewal/example.com.conf を編集して、最後の行に以下の内容を付け加えます。

# Autorestart for mosquitto
renew_hook = systemctl restart mosquitto

ドライランで構文チェックを行います。

root@i-xxxxxxxx:/etc/letsencrypt/renewal# certbot renew --dry-run

クライアントからは以下の方法でテストできます。

サブスクライブ(購読)は以下の通りです。上は localhost 限定。下はSSL接続の場合。

ubuntu@i-xxxxxxxx:~$ mosquitto_sub -h localhost -t test -u (ユーザー名) -P (パスワード)
ubuntu@i-xxxxxxxx:~$ mosquitto_sub -h example.com -t test -p 8883 --capath /etc/ssl/certs/ -u (ユーザー名) -P (パスワード)

パブリッシュは以下の通りです。上は localhost 限定。下はSSL接続の場合。

ubuntu@i-xxxxxxxx:~$ mosquitto_pub -h localhost -t test -m "TEST MESSAGE" -u (ユーザー名) -P (パスワード)
ubuntu@i-xxxxxxxx:~$ mosquitto_pub -h exmple.com -t test -p 8883 --capath /etc/ssl/certs/ -m "SSL TEST MESSAGE" -u (ユーザー名) -P (パスワード)

以上で他のLinuxマシンからの MQTT over SSL で接続できるようになりました。

コメントを残す

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

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)