emqtt emq 的主题访问控制 acl.conf

访问控制(ACL)

EMQ 消息服务器通过 ACL(Access Control List) 实现 MQTT 客户端访问控制。

ACL 访问控制规则定义:

允许(Allow)|拒绝(Deny) 谁(Who) 订阅(Subscribe)|发布(Publish) 主题列表(Topics)

MQTT 客户端发起订阅/发布请求时,EMQ 消息服务器的访问控制模块,会逐条匹配 ACL 规则,直到匹配成功为止:

          ---------              ---------              ---------
Client -> | Rule1 | --nomatch--> | Rule2 | --nomatch--> | Rule3 | --> Default
          ---------              ---------              ---------
              |                      |                      |
            match                  match                  match
             \|/                    \|/                    \|/
        allow | deny           allow | deny           allow | deny

默认访问控制设置

EMQ 消息服务器默认访问控制,在 etc/emq.conf 中设置:

## ACL nomatch
mqtt.acl_nomatch = allow

## Default ACL File
mqtt.acl_file = etc/acl.conf

ACL 规则定义在 etc/acl.conf,EMQ 启动时加载到内存:

%% Allow ‘dashboard‘ to subscribe ‘$SYS/#‘
{allow, {user, "dashboard"}, subscribe, ["$SYS/#"]}.

%% Allow clients from localhost to subscribe any topics
{allow, {ipaddr, "127.0.0.1"}, pubsub, ["$SYS/#", "#"]}.

%% Deny clients to subscribe ‘$SYS#‘ and ‘#‘
{deny, all, subscribe, ["$SYS/#", {eq, "#"}]}.

%% Allow all by default
{allow, all}.

HTTP 插件访问控制

注解

开启 HTTP 插件后,会终结 ACL 链

HTTP API 实现访问控制: https://github.com/emqtt/emq_auth_http

配置 etc/plugins/emq_auth_http.conf, 启用 HTTP 认证插件后:

## ‘access‘ parameter: sub = 1, pub = 2
auth.http.acl_req = http://127.0.0.1:8080/mqtt/acl
auth.http.acl_req.method = get
auth.http.acl_req.params = access=%A,username=%u,clientid=%c,ipaddr=%a,topic=%t

MySQL 插件访问控制

MySQL 插件访问控制,通过 mqtt_acl 表定义 ACL 规则:

CREATE TABLE `mqtt_acl` (
  `id` int(11) unsigned NOT NULL AUTO_INCREMENT,
  `allow` int(1) DEFAULT NULL COMMENT ‘0: deny, 1: allow‘,
  `ipaddr` varchar(60) DEFAULT NULL COMMENT ‘IpAddress‘,
  `username` varchar(100) DEFAULT NULL COMMENT ‘Username‘,
  `clientid` varchar(100) DEFAULT NULL COMMENT ‘ClientId‘,
  `access` int(2) NOT NULL COMMENT ‘1: subscribe, 2: publish, 3: pubsub‘,
  `topic` varchar(100) NOT NULL DEFAULT ‘‘ COMMENT ‘Topic Filter‘,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

INSERT INTO mqtt_acl (id, allow, ipaddr, username, clientid, access, topic)
VALUES
    (1,1,NULL,‘$all‘,NULL,2,‘#‘),
    (2,0,NULL,‘$all‘,NULL,1,‘$SYS/#‘),
    (3,0,NULL,‘$all‘,NULL,1,‘eq #‘),
    (5,1,‘127.0.0.1‘,NULL,NULL,2,‘$SYS/#‘),
    (6,1,‘127.0.0.1‘,NULL,NULL,2,‘#‘),
    (7,1,NULL,‘dashboard‘,NULL,1,‘$SYS/#‘);

etc/plugins/emq_auth_mysql.conf 配置 ‘acl_query’ 与 ‘acl_nomatch’:

## ACL Query Command
auth.mysql.acl_query = select allow, ipaddr, username, clientid, access, topic from mqtt_acl where ipaddr = ‘%a‘ or username = ‘%u‘ or username = ‘$all‘ or clientid = ‘%c‘

Postgre 插件访问控制

PostgreSQL 插件访问控制,通过 mqtt_acl 表定义 ACL 规则:

CREATE TABLE mqtt_acl (
  id SERIAL primary key,
  allow integer,
  ipaddr character varying(60),
  username character varying(100),
  clientid character varying(100),
  access  integer,
  topic character varying(100)
);

INSERT INTO mqtt_acl (id, allow, ipaddr, username, clientid, access, topic)
VALUES
    (1,1,NULL,‘$all‘,NULL,2,‘#‘),
    (2,0,NULL,‘$all‘,NULL,1,‘$SYS/#‘),
    (3,0,NULL,‘$all‘,NULL,1,‘eq #‘),
    (5,1,‘127.0.0.1‘,NULL,NULL,2,‘$SYS/#‘),
    (6,1,‘127.0.0.1‘,NULL,NULL,2,‘#‘),
    (7,1,NULL,‘dashboard‘,NULL,1,‘$SYS/#‘);

etc/plugins/emq_auth_pgsql.conf 设置 ‘acl_query’ 与 ‘acl_nomatch’:

## ACL Query. Comment this query, the acl will be disabled.
auth.pgsql.acl_query = select allow, ipaddr, username, clientid, access, topic from mqtt_acl where ipaddr = ‘%a‘ or username = ‘%u‘ or username = ‘$all‘ or clientid = ‘%c‘

Redis 插件访问控制

Redis Hash 存储一个 MQTT 客户端的访问控制规则:

HSET mqtt_acl:<username> topic1 1
HSET mqtt_acl:<username> topic2 2
HSET mqtt_acl:<username> topic3 3

etc/plugins/emq_auth_redis.conf 配置 ‘acl_cmd’ 与 ‘acl_nomatch’:

## ACL Query Command
auth.redis.acl_cmd = HGETALL mqtt_acl:%u

MongoDB 插件访问控制

MongoDB 数据库创建 mqtt_acl 集合:

{
    username: "username",
    clientid: "clientid",
    publish: ["topic1", "topic2", ...],
    subscribe: ["subtop1", "subtop2", ...],
    pubsub: ["topic/#", "topic1", ...]
}

mqtt_acl 集合插入数据,例如:

db.mqtt_acl.insert({username: "test", publish: ["t/1", "t/2"], subscribe: ["user/%u", "client/%c"]})
db.mqtt_acl.insert({username: "admin", pubsub: ["#"]})

etc/plugins/emq_auth_mongo.conf 配置 ‘acl_query’ 与 ‘acl_nomatch’:

## acl_query
auth.mongo.acl_query.collection = mqtt_user

auth.mongo.acl_query.selector = username=%u

原文地址:https://www.cnblogs.com/sttchengfei/p/12028484.html

时间: 2024-10-10 14:45:36

emqtt emq 的主题访问控制 acl.conf的相关文章

CCNP路由实验之十四 路由器的访问控制ACL

?? ACL(Access Control List,访问控制列表) 是路由器接口的指令列表,用来控制端口进出的数据包.ACL适用于所有的路由协议,如IP.IPX.AppleTalk等.这张表中包含了匹配关系.条件和查询语句,表只是一个框架结构,其目的是为了对某种访问进行控制.访问控制列表使用包过滤技术,在路由器上读取第三层及第四层包头中的信息如源地址,目的地址,源端口,目的端口等,根据预先定义好的规则对包进行过滤,从而达到访问控制的目的,该技术初期仅在路由器上支持,现在已经支持三层交换机和二层

Linux 访问控制acl

Linux:ACL设置 目录: 1. acl设置 2. mask值 3. acl备份 4. 实例演示  1.acl设置 Acl是关联用户和文件或目录的访问控制,因此对用户而言,可以具体分为两类,用户和组:对文件而言可以分为文件和目录:对继承而言,可以分为默认继承权限和非继承权限,从语法上讲d表示在某目录下新建文件或目录继续父目录的default权限.具体如下常用格式: setfacl -m u:wang:rwx file|directory setfacl -Rm g:sales:rwX dir

emqtt emq 的用户密码认证

MQTT 认证设置 EMQ 消息服务器认证由一系列认证插件(Plugin)提供,系统支持按用户名密码.ClientID 或匿名认证. 系统默认开启匿名认证(anonymous),通过加载认证插件可开启的多个认证模块组成认证链: ---------------- ---------------- ------------ Client --> | Username认证 | -ignore-> | ClientID认证 | -ignore-> | 匿名认证 | ---------------

Samba访问控制smb.conf

访问控制 Samba的访问控制通过hosts allow(配置允许访问的客户端).hosts deny(配置拒绝访问的客户端)两个参数实现. 在Samba中使用hosts allow.hosts deny参数时,该参数可以出现在全局配置部分,用于允许或拒绝可连接到Samba服务器的客户端,也可以出现在具体的共享资源配置中用于允许或拒绝可访问该资源的客户端.如果在全局配置部分的hosts allow.hosts deny优先级与具体共享资源的配置发生冲突时会怎么样呢?通过Samba的工作过程不难看

Squid代理--经典缓存代理服务器(实现正向代理配置、ACL各种访问控制、日志分析)

Squid是Linux系统中常用的一款开源代理服务软件官方网站http://www.squid-cache.org , 可以很好的实现http.ftp.dns查询,以及ssl等应用的缓存代理. 一.Squid服务概述 缓存代理概述 1.代理的工作机制 当客户机通过代理来请求web页面时,指定的代理服务器会先检查自己的缓存,如果缓存中已经有客户机需要访问的页面,则直接将缓存中的页面反馈给请求的客户端.如果缓存中没有,则由代理服务器向web服务器发起访问请求,当获得返回的web页面后,缓存服务器首先

转:EMQ(emqttd) 2.x 安装和使用(物联网传输控制协议的Broker)

支持下国产开源. MQTT物联网传输控制协议:<MQTT-3.1.1-CN.pdf> 下载:emqttd-centos64-v2.0-rc.2-20161019.zip 安装: $ unzip emqttd-centos64-v2.0-rc.2-20161019.zip -d /data/ $ mv /data/emqttd /data/emqttd-centos64-v2.0-rc.2-20161019 $ ln -s /data/emqttd-centos64-v2.0-rc.2-2016

Linux_haproxy_acl访问控制(4)v1.0

acl: The use of Access Control Lists (ACL) provides a flexible solution to perform content switching and generally to take decisions based on content extracted from the request, the response or any environmental status.基于某种检测条件 ,将用户请求或相应的某一类(通常为请求),做

CodeBlocks主题设置

1.下载CodeBlocks的相关主题,这里提供一个下载链接:http://pan.baidu.com/s/1mi4W2BA 2.在本地磁盘的C盘中,找到CodeBlocks默认的主题default. conf(一般在C:\\Users\用户名\AppData\Roaming\CodeBlocks中),将下载好的主题覆盖default.conf,并重命名为default.conf 3.打开CodeBlocks (1)在设置菜单栏里面选择编辑 (2)挑选合适的主题

交换机ACL配置

这里的CLI以今天的DUT为准,可能跟思科的命令略有不同,不过大致思路还是相同的. 设置模式下以(conf)#表示,响应ACL模式下以(aclname)#表示,某个端口内的设置用(if-e0/1/1)表示 1.建立ACL: (conf)#access-list standard/extender [aclname] (aclname)# permit xxx (aclname)# deny xxx 针对三层的ACL设置可以选择standard或者extender,处于三层,那么仅涉及到IP和MA