EMQX Docker允許訪問$SYS系統主題


EMQX
發布訂閱ACL:指對發布(PUBLISH)/訂閱(SUBSCRIBE)操作的權限控制。
例如拒絕用戶名為WesChen向open/elsa/door發布消息
EMQX支持通過客戶端發布訂閱ACL進行客戶端權限的管理
 
 
 
目前開發環境是使用EMQX作為MQTT Broker,采用Docker的方式進行部署
 
默認的內置acl規則
%% 允許 "dashboard" 用戶 訂閱 "$SYS/#" 主題
{allow, {user, "dashboard"}, subscribe, ["$SYS/#"]}.

%% 允許 IP 地址為 "127.0.0.1" 的用戶 發布/訂閱 "$SYS/#","#" 主題
{allow, {ipaddr, "127.0.0.1"}, pubsub, ["$SYS/#", "#"]}.

%% 拒絕 "所有用戶" 訂閱 "$SYS/#" "#" 主題
{deny, all, subscribe, ["$SYS/#", {eq, "#"}]}.

%% 允許其它任意的發布訂閱操作
{allow, all}.

 

 
 
 
 
最終在查詢了很多資料后,最終在Docker Hub上看到相關的資料
https://hub.docker.com/r/emqx/emqx,其中Persistence中看到,如果需要將數據進行持久化,需要設置/opt/emqx/etc中的文件

 

 

 
docker-compose-emqx.yml
version: '3'

services:
  emqx1:
    image: emqx/emqx:4.3.10
    environment:
    - "EMQX_NAME=emqx"
    - "EMQX_HOST=node1.emqx.io"
    - "EMQX_CLUSTER__DISCOVERY=static"
    - "EMQX_CLUSTER__STATIC__SEEDS=emqx@node1.emqx.io, emqx@node2.emqx.io"
    - EMQX_LOADED_MODULES="emqx_mod_acl_internal,emqx_mod_acl_internal/"
    healthcheck:
      test: ["CMD", "/opt/emqx/bin/emqx_ctl", "status"]
      interval: 5s
      timeout: 25s
      retries: 5
    networks:
      emqx-bridge:
        aliases:
        - node1.emqx.io
    ports:
      - 1883:1883
      # - 8081:8081        
      - 8083:8083
      - 8084:8084
      - 8883:8883
      - 18083:18083    
    volumes:   
      - ./emqx/acl.conf:/opt/emqx/etc/acl.conf   #配置文件    

networks:
  emqx-bridge:
    driver: bridge

 

acl.conf
{allow, {user, "dashboard"}, subscribe, ["$SYS/#"]}.
 
{allow, {ipaddr, "127.0.0.1"}, pubsub, ["$SYS/#", "#"]}.
 
{allow, all, subscribe, ["$SYS/brokers/+/clients/#"]}.
 
{allow, all, subscribe, ["$SYS/#", {eq, "#"}]}.
 
{allow, all}.

 

 
 
原本地Windows或是Linux上使用包安裝EMQX,在設置了acl后,需要運行命令
./bin/emqx_ctl modules reload emqx_mod_acl_internal
但在使用docker時,只需要指定文件就可以了,將進行替換,然后運行EMQX時,會自動加載acl插件,並不需要進行插件的重新加載工作
 
 
最終運行效果

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM