支持 ACL 访问控制、引入 HOCON 全新配置文件格式

本文涉及的产品
云防火墙,500元 1000GB
简介: 11月,超轻量MQTT Broker NanoMQ 0.14版本发布,推出了ACL鉴权服务,并引入了HOCON格式的配置文件。

11 月,NanoMQ 继续保持稳步更新,最新的 0.14 版本已于本月初发布。此版本推出了用户期待许久的 ACL 鉴权(Access Control List)服务,并引入了全新的 HOCON 格式的配置文件。此外还缩减了发布版本时生成的 Docker 镜像的大小,并新增了带有 QUIC 支持的完整功能版镜像。

ACL 鉴权

将 MQTT 服务用于 IoT 应用时,为了保证服务和信息安全,需要 ACL 鉴权服务来防止恶意客户端发布错误数据和控制命令或订阅未经允许的主题获取敏感数据。NanoMQ 的 ACL 支持在众多用户呼声中于 0.14 版本正式发布。

目前 NanoMQ 支持通过在配置文件中编写规则来根据客户端 ID 和用户名配置鉴权规则。ACL 配置文件风格和语法与 EMQX 4.x 版本相同。

此处给出部分常用的场景规则配置示例:

  • 需要从系统主题读取监控数据显示在控制台时,只允许用户名是 dashboard 的客户端订阅“$SYS/#”系统主题,忽略有非法操作的客户端:

    ## ACL 未命中时,允许或者拒绝 发布/订阅 操作
    ##
    ## Value: allow: 允许
    ##        deny:  拒绝
    acl_nomatch=allow
    ## ACL 检查失败后,执行的操作。
    ##
    ## Value: ignore:     忽略
    ##        disconnect: 断开连接
    acl_deny_action=ignore
    
    # 允许用户名是 dashboard 的客户端订阅 "$SYS/#" 这个主题
    acl.rule.1={"permit": "allow", "username": "dashboard", "action": "subscribe", "topics": ["$SYS/#"]}
    
    # 拒绝其他所有用户订阅 "$SYS/#" 主题
    acl.rule.2={"permit": "deny", "username": "#", "action": "subscribe", "topics": ["$SYS/#"]}
  • 拒绝客户端 ID 为“malicious”和用户名为“unauthorized”的非法客户端向匹配“sensitive/#”和“Command/+/critical”的所有主题进行发布操作,并立刻断开有非法行为的客户端连接。

    acl_nomatch=allow
    acl_deny_action=disconnect
    
    # 拒绝操作
    acl.rule.1={"permit": "deny", "or" :["username": "unauthorized", "clientid": "malicious"], "action": "publish","topics": ["sensitive/#", "Command/+/critical"]}
    
    # 前面的规则都没有匹配到的话,允许所有操作
    acl.rule.2={"permit": "allow"}

ACL 功能可以在编译阶段关闭来提高性能和剪裁大小:

cmake -DENABLE_ACL=OFF ..

未来会根据用户需求和反馈,提供更强大的 ACL 功能,如正则匹配、客户端 IP 匹配、关联数据库鉴权和 HTTP 鉴权等,欢迎大家在线提交功能申请和反馈。

全新 HOCON 配置文件

秉承 EMQX 5.0 的先进设计,NanoMQ 也采用了标准的 HOCON(Human-Optimized Config Object Notation/人性化配置对象表示法)作为配置文件格式。HOCON 是一种更适合人类阅读的数据格式,功能语法上是 JSON 和 properties 的一个超集,可以灵活拓展。它由 Lightbend 开发,同时也在 Sponge 和 Puppet 等项目中作为配置格式使用。

NanoMQ 为了保证项目原有的易移植性和高度兼容性,使用原生 C 语言开发实现了一个语法解释器来完成部分 HOCON 功能的解析并转换为 JSON 和内部结构体,使得用户能够在不引入其他依赖库的情况下也能使用 HOCON 风格的配置文件。从 0.14 版本开始,NanoMQ 以精简版本的 HOCON 格式为默认的配置文件。但考虑到许多老用户仍然习惯于使用原有风格的配置文件,所以旧的配置文件也予以保留,可以通过-old_conf命令来读取旧的配置文件格式。

表格1.jpg

在鉴权和桥接配置中使用 HOCON 语法

在 HOCON 格式中不需要再为多次出现的配置文件类目(如多个用户名密码键值对)增加数字下标。

# #============================================================
# # Authorization 
 #============================================================
auth [
{
login = "admin"
password = "public"
}
{ 
login = "client"
password = "public"
}
  ......
]

对于复杂的配置层级关系,如多路桥接不分,能看到有更加明晰易读的隶属关系。

bridges.mqtt {
    nodes = [
        {
            name = emqx1
            enable = true
            connector {
                server = "mqtt-tcp://127.0.0.1:1883"
            }
            forwards = ["topic1/#", "topic2/#"]
            subscription = [
                {
                    topic = "cmd/topic1"
                    qos = 1
                }
                {
                   (......)
                }
            ]
            parallel = 2,
            ssl {
                enable = false
                }
    }
    {
            name = emqx2
            enable = true
            connector {
                server = "mqtt-quic://127.0.0.1:14567"
            }
            forwards = ["topic1/#", "topic2/#"]
            subscription = [
                {
                    topic = "cmd/topic1"
                    qos = 1
                }
            ]
            (......)
    }
]

其余功能的配置选项也根据 EMQX 5.0 的版本发布略有更改,请查阅 NanoMQ 官方文档查看更改后的配置文件细则。

其他优化

裁剪 Docker 镜像大小

NanoMQ 本身运行占用资源极小,但自 0.11 版本起由于引入了 QUIC 功能,使得镜像大小大大增加。为了帮助习惯采用 Docker 部署方式的用户节省部署空间,从 0.14 版本开始,Dockerfile 改为采用交叉编译方式发布具有完整功能的 Release 镜像。这一操作使得完整版镜像的大小缩小了数十倍。默认拉取的 NanoMQ 的镜像地址改为以 Alpine-Linux 为 base image 的版本,大小仅为 3MB。

MQTT over QUIC 桥接功能一经推出便得到了广泛的试用和热烈反响,但之前此功能必须通过源码编译开启,对于新手使用较为不便。自 0.14 版本起,NanoMQ 会自动一起发布开启 QUIC 支持的 Docker 镜像和二进制安装包。用户只需下载带有 -msquic 后缀的安装包或拉取带有 -full 后缀的 Docker 即可:

## 内置开启QUIC桥接功能的二进制安装包
nanomq-0.14.0-linux-amd64-msquic.deb
## 内置开启QUIC桥接功能的Docker镜像
docker pull emqx/nanomq:0.14.0-full

支持以共享库形式启动

不少用户有从自有程序调用 API 来启动 NanoMQ 的需求,或需要在 Android 或 iOS 移动端启动 MQTT 服务。为支持此类需求,NanoMQ 也可以编译成 .so 格式的动态链接库供使用:

cmake -G Ninja -DBUILD_SHARED_LIBS=ON ..
ninja

Bug Fix

  1. 修复了 QUIC 桥接中收到 Multi-Stream 功能影响造成的一个死锁问题。
  2. 修复了使用会话保持的客户端的 QoS 1/2 消息重发时,概率性顺序异常的问题。
  3. 修复了 QoS 1/2 消息只会重发一次从而造成的消息丢失。
  4. 修复了 Android 平台上通过动态链接库使用 NanoMQ 时由于 POSIX 时钟系统精度不足导致的计时器异常问题。
  5. 更新了 NanoSDK 的 close_all API 使其能够自动清理未完成的 AIO 避免线程阻塞。
  6. 为 MQTT over QUIC 桥接连接下线事件消息增加了MQTT V5 的 KeepAlive Timeout 错误码。

即将到来

由于配置文件格式更新,配置热更新和 Reload 功能将推迟到下一个版本中正式发布(只支持 HOCON 版本)。另外还将为 MQTT over QUIC 桥接功能增加 CUBIC/BBR 拥塞算法支持,以获取在不稳定带宽的网络环境中更稳定的传输质量保证。

版权声明: 本文为 EMQ 原创,转载请注明出处。

原文链接:https://www.emqx.com/zh/blog/nanomq-newsletter-202211

目录
相关文章
|
10天前
|
安全 网络安全 数据安全/隐私保护
访问控制列表(ACL)是网络安全中的一种重要机制,用于定义和管理对网络资源的访问权限
访问控制列表(ACL)是网络安全中的一种重要机制,用于定义和管理对网络资源的访问权限。它通过设置一系列规则,控制谁可以访问特定资源、在什么条件下访问以及可以执行哪些操作。ACL 可以应用于路由器、防火墙等设备,分为标准、扩展、基于时间和基于用户等多种类型,广泛用于企业网络和互联网中,以增强安全性和精细管理。
51 7
|
11天前
|
网络协议 安全 网络性能优化
了解访问控制列表 (ACL):概念、类型与应用
了解访问控制列表 (ACL):概念、类型与应用
26 2
|
13天前
|
网络虚拟化 数据安全/隐私保护 数据中心
对比了思科和华为网络设备的基本配置、接口配置、VLAN配置、路由配置、访问控制列表配置及其他重要命令
本文对比了思科和华为网络设备的基本配置、接口配置、VLAN配置、路由配置、访问控制列表配置及其他重要命令,帮助网络工程师更好地理解和使用这两个品牌的产品。通过详细对比,展示了两者的相似之处和差异,强调了持续学习的重要性。
26 2
|
1月前
|
网络协议 网络虚拟化 数据安全/隐私保护
访问控制列表(ACL)配置
访问控制列表(ACL)配置
访问控制列表(ACL)配置
|
1月前
|
安全 Java 数据安全/隐私保护
如何配置 Java 安全管理器来避免访问控制异常
配置Java安全管理器以防止访问控制异常,需在启动JVM时通过 `-Djava.security.manager` 参数启用,并设置安全策略文件,定义权限规则,限制代码执行操作,确保应用安全。
|
1月前
|
安全 网络协议 数据安全/隐私保护
访问控制(ACL)原理详解
访问控制(ACL)原理详解
访问控制(ACL)原理详解
|
2月前
|
Apache 数据安全/隐私保护
HAProxy的高级配置选项-ACL篇之基于源地址访问控制案例
这篇文章介绍了HAProxy的ACL(访问控制列表)功能,特别是如何基于源地址进行访问控制的高级配置选项,并通过实战案例展示了如何配置ACL规则以允许或阻止特定IP地址或IP范围的访问。
58 7
HAProxy的高级配置选项-ACL篇之基于源地址访问控制案例
ly~
|
2月前
|
消息中间件 搜索推荐 大数据
一般情况下在 RocketMQ 中添加 access key 的步骤: 一、确定配置文件位置 RocketMQ 的配置文件通常位于安装目录下的 conf 文件夹中。你需要找到 broker.conf 或相关的配置文件。 二、编辑配置文件 打开配置文件,查找与 ACL(访问控制列表)相关的配置部分。 在配置文件中添加以下内容:
大数据广泛应用于商业、金融、医疗和政府等多个领域。在商业上,它支持精准营销、客户细分及流失预测,并优化供应链管理;金融领域则利用大数据进行风险评估、市场预测及欺诈检测;医疗行业通过大数据预测疾病、提供个性化治疗;政府运用大数据进行城市规划和公共安全管理;工业领域则借助大数据进行设备维护、故障预测及质量控制。
ly~
114 2
|
2月前
|
Apache 数据安全/隐私保护
HAProxy的高级配置选项-ACL篇之基于策略的访问控制
这篇文章介绍了HAProxy的高级配置选项,特别是如何使用ACL(访问控制列表)进行基于策略的访问控制,通过实战案例展示了如何配置HAProxy以允许或拒绝来自特定源地址的访问。
61 6
HAProxy的高级配置选项-ACL篇之基于策略的访问控制
|
2月前
|
NoSQL 关系型数据库 MySQL
HAProxy的高级配置选项-haproxy的四层负载及访问控制案例
这篇文章介绍了HAProxy的高级配置选项,特别是如何进行四层负载均衡和基于策略的访问控制。通过实战案例,展示了如何配置HAProxy以实现对特定IP地址的访问控制,以及如何通过四层负载均衡将流量分配到后端的MySQL和Redis服务。
139 6
下一篇
无影云桌面