Mqtt 如何在网络中只授权一个设备?

Mqtt 如何在网络中只授权一个设备?,mqtt,acl,mosquitto,Mqtt,Acl,Mosquitto,我是Mosquito(高山Linux机器)的初学者 经过几次搜索,我没有找到答案 我想只授权来自网络中一个设备的MQTT消息 我尝试将“aclfile.example”更改为“acl.acl” 但这并没有将连接仅限于此设备(服务器仍然可以接收来自其他设备的消息) 想法?有几种方法可以做到这一点。最简单的方法是定义一个用户,并禁用匿名访问。您的mosquitcho.conf文件如下所示: port 1883 allow_anonymous false password_file /etc/mosq

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

但这并没有将连接仅限于此设备(服务器仍然可以接收来自其他设备的消息)


想法?

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

port 1883
allow_anonymous false
password_file /etc/mosquitto/pwfile
您的配置文件中可能有其他选项,如日志记录和持久性,但这些行只允许具有用户/密码的客户端连接。然后在
pwfile
文件中设置一个用户名/密码。下面是一篇关于如何做到这一点的博文:

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


另一种方法是向您的客户机颁发SSL证书,并且只允许该证书进入。同样,Steve有一篇关于如何设置的博文:

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

  • MOSQUITO ACL处理的是用户和主题,而不是IP地址
  • 默认情况下(至少在本周v2.0.0发布之前),mosquitto允许客户端在不指定用户名/密码的情况下进行连接。您可以通过向配置文件添加
    allow\u annonymous false
    来禁用此功能
  • 仅重命名示例ACL文件不会导致加载它,您需要使用
    ACL\u file
    指令在配置文件中显式指向它
  • 如果要确保特定用户名只能由授权客户使用,还需要使用
    密码\u文件
    指定密码文件
  • 如果您真的想限制对单个本地计算机的访问,那么您最好使用防火墙,只接受来自该IP地址的外部连接。e、 g.Linux上的iptables

    port 1883
    allow_anonymous false
    password_file /etc/mosquitto/pwfile