【问题标题】:Mosquitto - How to authorize only one device in the network?Mosquitto - 如何只授权网络中的一台设备?
【发布时间】:2020-12-09 07:11:00
【问题描述】:

我是 mosquitto(Alpine Linux 机器)的初学者 经过几次搜索我没有找到答案 我想只从网络中的一台设备授权 MQTT 消息 我尝试将“aclfile.example”更改为“acl.acl”

user "equipment IP"
topic test

但这并没有限制只能连接到这个设备(服务器仍然可以接收来自其他设备的消息)

想法?

【问题讨论】:

    标签: mqtt acl mosquitto


    【解决方案1】:

    这里可能需要介绍几件事:

    1. Mosquitto ACL 处理用户和主题,而不是 IP 地址。
    2. 默认情况下(至少在本周发布 v2.0.0 之前)mosquitto 允许客户端在不指定用户名/密码的情况下进行连接。您可以通过在配置文件中添加 allow_annonymous false 来禁用此功能
    3. 仅重命名示例 ACL 文件不会导致它被加载,您需要在配置文件中使用 acl_file 指令显式指向它。
    4. 如果您想确保特定用户名只能由授权客户端使用,您还需要使用password_file 指定密码文件。

    如果您真的想限制对单个本地计算机的访问,那么您最好让防火墙使用防火墙仅接受来自该 IP 地址的外部连接。例如Linux 上的 iptables。

    【讨论】:

      【解决方案2】:

      有几种方法可以做到这一点。最简单的方法是定义一个用户,并禁用匿名访问。您的 mosquitto.conf 文件如下所示:

      port 1883
      allow_anonymous false
      password_file /etc/mosquitto/pwfile
      

      您的配置文件中可能有其他选项用于日志记录和持久性等内容,但这些行只会让拥有用户/密码的客户端连接。然后在pwfile 文件中设置一个用户名/密码。这是一篇关于如何做到这一点的精彩博客文章:http://steves-internet-guide.com/mqtt-username-password-example/

      请记住,您的客户端节点现在还必须在 CONNECT 数据包上提供用户名/密码,否则将被拒绝访问。

      另一种方法是向您的客户端颁发 SSL 证书,并且只允许该证书进入。同样,Steve 有一篇很棒的博客文章介绍了如何设置它:http://www.steves-internet-guide.com/creating-and-using-client-certificates-with-mqtt-and-mosquitto/

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2022-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-12-29
        • 2023-04-02
        • 1970-01-01
        • 1970-01-01
        • 2020-06-23
        相关资源
        最近更新 更多