Skip to content

4.How to use ACL

xukeawsl edited this page Mar 19, 2024 · 2 revisions

0.前提

开启用户名/密码认证且开启 ACL 认证, 并指定 ACL 文件路径和默认的权限 (在 config.yml 中配置)。

auth: true

acl:
    enable: true
    acl_file: '../acl_rules.yml'
    default: 'deny'

1. ACL 文件

在收到客户端的请求后, 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'

2.文件格式

主要支持三种类型的 ACL 认证, 包括用户名、IP 地址和客户端标识符, 其中用户名主要用于控制 发布/订阅 行为, IP 地址和客户端标识符用于控制 连接 行为, 对于用户名来说需要额外配置和 发布/订阅 相关的内容, 配置解释如下:

  • permission : 控制权限, 支持 allowdeny

  • type : 控制类型, 支持 usernameipaddrclientid

  • object : 控制对象, 根据 type 类型配置用户名, IP 地址或客户端标识符

  • mode : 控制对象匹配模式, 支持精确匹配 eq 和正则匹配 eq

  • action : 控制行为, 针对用户名控制, 支持 subpuball

  • topics : 主题列表, 包含一个主题列表, 对于订阅来说是按精确匹配的, 对于发布来说是支持通配符匹配的

Clone this wiki locally