Mosquittoを安全に利用する

はじめに

pkgsrc/net/mosquitto-2.1.2nb1を使う機会があったのだが、なるべく安全な方法で利用したいと思っていた。 TLS証明書を利用して暗号化された経路で通信し、接続にはユーザーIDとパスワードによるユーザー認証を利用し、ユーザー毎にアクセス制限を設定したい。 また、受信した情報はファイルに保存しておきたい。

設定は/usr/pkg/etc/mosquitto.confに書けば良い。

TLS証明書を利用する

Let's Encryptで取得したTLS証明書が使える。 以下のように設定すれば良い。 これは、pkgsrc/security/acmeshを使って取得したものだが、どのような方法で取得しても良い。

certfile /var/db/mosquitto/.acme.sh/MYHOSTNAME.net_ecc/fullchain.cer
keyfile /var/db/mosquitto/.acme.sh/MYHOSTNAME_ecc/app4.ryoon.net.key
cafile /var/db/mosquitto/.acme.sh/MYHOSTNAME_ecc/ca.cer

接続にユーザーIDとパスワードによるユーザー認証を利用する

ユーザー毎にアクセス制限を設定するためにも、ユーザーIDとパスワードによりユーザー認証をした上で接続する必要がある。 これは、以下のように設定すれば良い。

password_file /var/db/mosquitto/mosquitto.passwd

この中身は、mosquitto_passwd(1)で生成すれば良い。 以下のようにユーザーIDとパスワードをmosquitto.passwdとして用意しておき、mosquitto_passwdコマンドでパスワードをハッシュ化したファイルに変換すれば良い。 ハッシュアルゴリズムも選択できるようだ。

$ cat mosquitto.passwd
user001:password001
user002:password002
$ mosquitto_passwd -U mosquitto.passwd
$ cat mosquitto.passwd
user001:$7$1000$qmp3mSmMucnEwhH3vLWRLquFBPYVQFdALWJwvihS7UI6d2cTKSma77hbTeYFSoJ+M/WTowwzUg7klW+7ClbNng==$YxIm/PFeBoiCN9xBvV9XR1XWK6VqIJrwE432iX7b5ygnoyKKMRSHf9rk/9Lw02Gp9FWfhwnPU8ugzPJUIDzImA==
user002:$7$1000$x8FPjLROciMpi7q7OIkV+cdzEf+Eo02kGMuPaWALcoS9Vt7G9J/um376TaGuSDOj76HSvL8HIla8HHQx7DkJGQ==$3V1pN+4ApuSBPtnyzxfSWSnUb01Q0EjQ6LmkAQb+VetHuxCkcJkzEhQyG2Y6F7MWgG1DqfyrJIWCF7pYqHuquQ==

ユーザー毎にアクセス制限を設定する

まず、アクセス制限の内容を読み込むように/usr/pkg/etc/mosquitto.confに以下のように設定する。

acl_file /var/db/mosquitto/mosquitto.acl

その上で、/var/db/mosquitto/mosquitto.aclを以下のように設定する。 user001は全てのトピックに読み書きでき、user002は全てのトピックに書き込みだけできるようにする。 データと投入するクライアントはuser002でアクセスして来ることを想定し、user001で接続することを想定している。 user001は書き込みはできなくても良いのだが。

$ cat /var/db/mosquitto/mosquitto.acl
user user001
topic readwrite #

user user002
topic write #

受信したデータをファイルに保存する

/var/db/mosquitto/mosquitto.dbに保存するように設定する。

autosave_interval 60
autosave_on_changes true
persistence true
persistence_file mosquitto.db
persistence_location /var/db/mosquitto

その他

他にも設定してある内容は以下のようだ。

# mosquitto daemonを動かすユーザー
user mosquitto
# 待ち受けるポート
istener 8883
# ログとしてsyslogに出力するレベル
log_type debug

0 件のコメント:

コメントを投稿

注: コメントを投稿できるのは、このブログのメンバーだけです。

Mosquittoに、Python Paho MQTT libraryを使ってアクセスする

あらかじめ起動しておいたMosquitto にPython Paho MQTT library (pkgsrc/net/py-paho-mqtt 2.1.0)を使って、Mosquittoの受信したデータを、InfluxDB 1 (pkgsrc/databases/influ...