-
Notifications
You must be signed in to change notification settings - Fork 6
4.How to use ACL
xukeawsl edited this page Mar 19, 2024
·
2 revisions
开启用户名/密码认证且开启 ACL 认证, 并指定 ACL 文件路径和默认的权限 (在 config.yml
中配置)。
auth: true
acl:
enable: true
acl_file: '../acl_rules.yml'
default: 'deny'
在收到客户端的请求后, mqtt-server
会按照从上到下的顺序进行规则匹配, 在成功匹配到某条规则后, mqtt-server
将按设定允许或拒绝当前请求, 并停止后续规则的匹配, 如果没有任何一条规则被匹配, 则按照设置的默认权限允许或拒绝当前请求。
mqtt-server
通过一个 yaml 文件来配置具体的 ACL 规则, 使用数组的形式, 解析时从上到下依次解析每一条规则, 格式如下:
# 规则 1
- permission: 'allow'
type: 'username'
object: 'key1'
mode: 'eq'
action: 'all'
topics:
- 'topic/hello'
- '+/world'
# 规则 2
- permission: 'allow'
type: 'ipaddr'
object: '.*'
mode: 're'
# 规则 3
- permission: 'allow'
type: 'clientid'
object: 'mqttx_.*'
mode: 're'
主要支持三种类型的 ACL 认证, 包括用户名、IP 地址和客户端标识符, 其中用户名主要用于控制 发布/订阅
行为, IP 地址和客户端标识符用于控制 连接
行为, 对于用户名来说需要额外配置和 发布/订阅
相关的内容, 配置解释如下:
-
permission : 控制权限, 支持
allow
和deny
-
type : 控制类型, 支持
username
、ipaddr
和clientid
-
object : 控制对象, 根据 type 类型配置用户名, IP 地址或客户端标识符
-
mode : 控制对象匹配模式, 支持精确匹配
eq
和正则匹配eq
-
action : 控制行为, 针对用户名控制, 支持
sub
、pub
和all
-
topics : 主题列表, 包含一个主题列表, 对于订阅来说是按精确匹配的, 对于发布来说是支持通配符匹配的