概要
mosquitto で認証機構を追加するのに mosquitto-auth-plugin という仕組みがあります
mosquitto は C 言語で書かれているためプラグインも C 言語です
使用するためにはソースからコンパイルする必要があるので今回はその方法を紹介します
環境
- Ubuntu 16.04
- make 4.1
- c-ares 33bf5ba35e2df09ecde9530816733965bb4053e4 (ソースからインストール)
- openssl 2326bba0e5cbe98f4d00855a6909b1f14b6f5427 (ソースからインストール)
- mosquitto 1.4.14 (ソースからインストール)
- mosquitto 1.4.8 (プラグイン確認用)
apt でインストールできるものを事前にインストール
- apt -y update
- apt-get -y install make git vim libcurl4-openssl-dev libwrap0-dev build-essential libtool m4 automake uuid-dev
mosquitto のビルドとインストール
mosquitto をビルドしてインストールするには apt でインストールしたモジュール以外に c-ares, openssl が必要になります
c-ares のインストール
- git clone https://github.com/c-ares/c-ares.git
- cd c-ares
- ./buildconf
- ./configure
- make
- make install
これをしないと ares.h が見つからず auth-plugin のビルドでエラーになります
openssl のインストール
- git clone https://github.com/openssl/openssl.git
- cd openssl
- ./config
- make
- make test
- make install
これをしないと opensslconf.h が見つからず auth-plugin のビルドでエラーになります
mosquitto のインストール
- wget ‘http://mosquitto.org/files/source/mosquitto-1.4.14.tar.gz’
- tar zvxf mosquitto-1.4.14.tar.gz
- mv mosquitto-1.4.14 mosquitto
- cd mosquitto
- make
- make test
- make install
mosquitto-auth-plug のビルド
- git clone https://github.com/jpmens/mosquitto-auth-plug.git
- cd mosquitto-auth-plug/
- cp config.mk.in config.mk
# Select your backends from this list
BACKEND_CDB ?= no
BACKEND_MYSQL ?= no
BACKEND_SQLITE ?= no
BACKEND_REDIS ?= no
BACKEND_POSTGRES ?= no
BACKEND_LDAP ?= no
BACKEND_HTTP ?= yes
BACKEND_JWT ?= no
BACKEND_MONGO ?= no
BACKEND_FILES ?= no
# Specify the path to the Mosquitto sources here
# MOSQUITTO_SRC = /usr/local/Cellar/mosquitto/1.4.12
MOSQUITTO_SRC =/root/mosquitto
# Specify the path the OpenSSL here
OPENSSLDIR = /root/openssl
# Specify optional/additional linker/compiler flags here
# On macOS, add
# CFG_LDFLAGS = -undefined dynamic_lookup
# as described in https://github.com/eclipse/mosquitto/issues/244
#
# CFG_LDFLAGS = -undefined dynamic_lookup -L/usr/local/Cellar/openssl/1.0.2l/lib
# CFG_CFLAGS = -I/usr/local/Cellar/openssl/1.0.2l/include -I/usr/local/Cellar/mosquitto/1.4.12/include
CFG_LDFLAGS =
CFG_CFLAGS =
- make clean
- make
で「auth-plug.so」が作成されていれば OK です
プラグインを使ってみる
今回は別途 Ubuntu に apt で インストールした mosquitto (1.4.8) にプラグインを有効にして使ってみます
- touch /etc/mosquitto/conf.d/auth.conf
- vim /etc/mosquitto/conf.d/auth.conf
auth_plugin /root/mosquitto-auth-plug/auth-plug.so
auth_opt_backends http
auth_opt_http_ip 127.0.0.1
auth_opt_http_port 3000
auth_opt_http_getuser_uri /auth
auth_opt_http_superuser_uri /superuser
auth_opt_http_aclcheck_uri /acl
- systemctl restart mosquitto
- mosquitto_sub -d -t topic -u username -P password
Client mosqsub|24842-ubuntu sending CONNECT
Client mosqsub|24842-ubuntu received CONNACK
Connection Refused: not authorised.
Client mosqsub|24842-ubuntu sending CONNECT
Client mosqsub|24842-ubuntu received CONNACK
Connection Refused: not authorised.
Client mosqsub|24842-ubuntu sending CONNECT
Client mosqsub|24842-ubuntu received CONNACK
Connection Refused: not authorised.
という感じで認証エラーになればプラグインの有効化は完了です
最後に
mosquitto-auth-plugin をビルドして mosquitto に設定するところまでやってみました
自力でビルドする必要があり、ビルドするのに依存するモジュールもビルドしなければならないのが辛かったです
もしかするとバージョンがあがったりするとビルドの方法が変わるかもしれません
その場合はソースコード内に含まれる README.md や INSTALL.md, compiling.txt などを見れば依存するモジュールやビルド方法が記載されているのでそちらを参照してください
自分もはじめは web でいろいろ調べていたんですが、ビルドの情報が結構古く、結局公式のドキュメントを見るのが一番良かったです
次回は認証サーバを独自で構築して実際に認証できるか試してみます
0 件のコメント:
コメントを投稿