mqtt redis认证配置
说明:mqtt服务采用emqx服务
emqx文档:
https://www.emqx.io/docs/zh/v4.3/
本文档旨在说明mqtt的用户认证以及主题认证,提高mqtt使用的安全性。
本次认证采用redis储存认证数据。
涉及的配置文件有 emqx.conf和 /plugins/emqx_auth_redis.conf。
1、mqtt基础配置
在emqx.conf中
//最大报文尺寸
mqtt.max_packet_size = 10MB /
//飞行窗口的最大大小,用于提高速度
zone.external.max_inflight = 320
2、权限控制的配置
在emqx.conf中
//权限控制的配置(非必要不使用)
//是否允许匿名访问,改为禁止
allow_anonymous = false
//权限控制改为默认拒绝访问
acl_nomatch = deny
//指定权限控制配置文件
acl_file = /etc/emqx/plugins/emqx_auth_redis.conf
3、mqtt用户认证配置
在emqx_auth_redis.conf 中
//Redis数据库配置:ip+端口 链接池大小 几号数据库 密码
auth.redis.server = 127.0.0.1:6379
auth.redis.pool = 8
auth.redis.database = 0
auth.redis.password =xxx
1)基本认证方式:用户名+密码的方式
auth.redis.auth_cmd = HMGET mqtt_user:%u password
//说明:%u 表示用户 %c 表示用客户端id 认证
//密码校验方式: plain 明文认证(默认),
auth.redis.password_hash = plain
2)基本认证方式:如密码加密方式
plain:名文
md5:MD5
sha\sha256\sha512:哈希算法
//说明:%u 表示用户 %c 表示用客户端id 认证 salt 椒盐值
auth.redis.auth_cmd = HMGET mqtt_user:%u password salt
//密码加密规则:椒盐在前明文密码在后
auth.redis.password_hash = salt,plain
如图
4、mqtt 发布订阅控制(acl)配置
首先将模块中的emqx_mod_acl_internal停掉,在开启emqx_auth_redis 插件
修改配置文件
在emqx_auth_redis.conf 中
//发布订阅指定用户 说明:%u用的是用户名匹配 %c用的是客户端id
auth.redis.acl_cmd = HGETALL mqtt_acl:%u
//Redis的写法是:
SET mqtt_acl:emqx testtopic/2 2
//说明:mqtt_acl前缀 ,emqx 用户名 testtopic/2 主题 2:access: 允许的操作,1 为仅允许订阅,2 为仅允许发布,3 为允许订阅和发布
如下图所示:emqx只能订阅test1的主题,可以同时实现发布、订阅功能
至此权限管理完成