【发布时间】:2020-12-09 07:11:00
【问题描述】:
我是 mosquitto(Alpine Linux 机器)的初学者 经过几次搜索我没有找到答案 我想只从网络中的一台设备授权 MQTT 消息 我尝试将“aclfile.example”更改为“acl.acl”
user "equipment IP"
topic test
但这并没有限制只能连接到这个设备(服务器仍然可以接收来自其他设备的消息)
想法?
【问题讨论】:
我是 mosquitto(Alpine Linux 机器)的初学者 经过几次搜索我没有找到答案 我想只从网络中的一台设备授权 MQTT 消息 我尝试将“aclfile.example”更改为“acl.acl”
user "equipment IP"
topic test
但这并没有限制只能连接到这个设备(服务器仍然可以接收来自其他设备的消息)
想法?
【问题讨论】:
这里可能需要介绍几件事:
allow_annonymous false 来禁用此功能acl_file 指令显式指向它。password_file 指定密码文件。如果您真的想限制对单个本地计算机的访问,那么您最好让防火墙使用防火墙仅接受来自该 IP 地址的外部连接。例如Linux 上的 iptables。
【讨论】:
有几种方法可以做到这一点。最简单的方法是定义一个用户,并禁用匿名访问。您的 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/
【讨论】: