Mosquitto — Как авторизовать только одно устройство в сети?

#mqtt #acl #mosquitto

#mqtt #acl #mosquitto

Вопрос:

Я новичок в mosquitto (Alpine Linux machine) После нескольких поисков я не нашел ответа Я хотел бы авторизовать сообщения MQTT только с одного устройства в сети Я попытался изменить «aclfile.example» на «acl.acl»

 user "equipment IP"
topic test
 

Но это не ограничивало подключение только к этому оборудованию (сервер все еще может получать сообщения от других).

Идеи?

Ответ №1:

Есть несколько вещей, которые, вероятно, нуждаются в освещении здесь:

  1. Списки управления доступом Mosquitto касаются пользователей и тем, а не IP-адресов.
  2. По умолчанию (по крайней мере, до версии 2.0, выпущенной на этой неделе) mosquitto позволяет клиентам подключаться без указания имени пользователя / пароля. Вы можете отключить это, добавив allow_annonymous false в конфигурационный файл
  3. Простое переименование файла ACL-примера не приведет к его загрузке, вам нужно явно указать на него в файле конфигурации с acl_file директивой.
  4. Вам также нужно будет указать файл паролей password_file , если вы хотите убедиться, что определенное имя пользователя может использоваться только авторизованными клиентами.

Если вы действительно хотите ограничить доступ к одному локальному компьютеру, вам может быть лучше использовать брандмауэр, чтобы принимать внешние подключения только с этого IP-адреса с помощью брандмауэра. например, iptables в Linux.

Ответ №2:

Есть несколько способов сделать это. Проще всего было бы определить одного пользователя и отключить анонимный доступ. Ваш файл mosquitto.conf будет выглядеть следующим образом:

 port 1883
allow_anonymous false
password_file /etc/mosquitto/pwfile
 

В вашем конфигурационном файле могут быть другие параметры для таких вещей, как ведение журнала и сохранение, но эти строки позволят подключаться только тем клиентам, у которых есть пользователь / пароль. Затем вы устанавливаете свое единственное имя пользователя / пароль в pwfile файле. Вот отличный пост в блоге о том, как это сделать: http://steves-internet-guide.com/mqtt-username-password-example /

Имейте в виду, что ваш клиентский узел теперь также должен указать имя пользователя / пароль в пакете ПОДКЛЮЧЕНИЯ, иначе ему будет отказано в доступе.

Другим способом было бы выдать SSL-сертификат вашему клиенту и разрешить только этот сертификат. Опять же, у Стива есть отличный пост в блоге о том, как это настроить: http://www.steves-internet-guide.com/creating-and-using-client-certificates-with-mqtt-and-mosquitto /