EMQ X 生产环境鉴权配置详解(连接认证与访问控制)

EMQ的应用场景、下载、运行,官方文档都说的很细,本篇主要总结一下生产环境下,暴露于外网下的EMQ的访问鉴权配置。

警告:建议版本是3.2.2,请不要使用3.1版本(bug:任何人可以直接通过DashBoard的18083端口调用rest api创建用户)

EMQ X 消息服务器的鉴权主要有连接认证和访问控制俩部分组成,提供了的一系列相关的认证插件(Plugins)。  

连接认证: EMQ X 校验每个连接上的客户端是否具有接入系统的权限,若没有则会断开该连接

访问控制: EMQ X 校验客户端每个 发布(Publish)/订阅(Subscribe) 的权限,以 允许/拒绝 相应操作

连接认证支持按用户名密码、ClientID 或匿名认证,我使用的是emqx_auth_username插件( 用户名密码认证/鉴权),此处注意的是系统默认开启匿名认证(Anonymous),所在在生产环境中我们在etc/emqx.conf 配置文件中禁用匿名认证。

## Value: true | false 是否允许匿名访问 
allow_anonymous = false

然后在dashboard把我们要使用的插件启动起来

EMQ X 生产环境鉴权配置详解(连接认证与访问控制)_第1张图片

然后继续在dashboard中创建应用

EMQ X 生产环境鉴权配置详解(连接认证与访问控制)_第2张图片

接下来,我们使用它的api来创建一个用户,注意它的api是带有basic认证的,不然提示无权,postman中填入的认证信息就是我们刚才在dashboard应用中创建的 AppID 和 AppSecret 。

EMQ X 生产环境鉴权配置详解(连接认证与访问控制)_第3张图片

EMQ X 生产环境鉴权配置详解(连接认证与访问控制)_第4张图片

至此连接认证我们就配置完成了。接下来我们要指定该用户可以订阅哪些消息,发布哪些消息的权限了。也就是ACL配置。

首先,我们要在etc/emqx.conf 配置文件中把此项禁用

## 当acl规则没有匹配到的时候就会找的这个参数,如果为allow,则会通过验证,为deny就会不通过验证
## ACL nomatch. Enum: allow, deny
acl_nomatch = deny

然后在 etc/acl.conf配置文件中定义ACL 规则,EMQ X 启动时加载到内存中。

%% 允许 'dashboard' 用户订阅 '$SYS/#'
{allow, {user, "dashboard"}, subscribe, ["$SYS/#"]}.

%% 允许本机用户发布订阅全部主题
{allow, {ipaddr, "127.0.0.1"}, pubsub, ["$SYS/#", "#"]}.

%% 拒绝除本机用户以外的其他用户订阅 '$SYS/#' 与 '#' 主题
{deny, all, subscribe, ["$SYS/#", {eq, "#"}]}.

%% 允许上述规则以外的任何情形
{allow, all}.

配置完成就大功告成了。接下来通过websocket连接工具来连接一下。其中有一些细节。

EMQ X 生产环境鉴权配置详解(连接认证与访问控制)_第5张图片

 

你可能感兴趣的:(连接认证,访问控制,emq,鉴权,Linux)