#mqtt #acl #mosquitto
#mqtt #acl #mosquitto
Вопрос:
Я новичок в mosquitto (Alpine Linux machine) После нескольких поисков я не нашел ответа Я хотел бы авторизовать сообщения MQTT только с одного устройства в сети Я попытался изменить «aclfile.example» на «acl.acl»
user "equipment IP"
topic test
Но это не ограничивало подключение только к этому оборудованию (сервер все еще может получать сообщения от других).
Идеи?
Ответ №1:
Есть несколько вещей, которые, вероятно, нуждаются в освещении здесь:
- Списки управления доступом Mosquitto касаются пользователей и тем, а не IP-адресов.
- По умолчанию (по крайней мере, до версии 2.0, выпущенной на этой неделе) mosquitto позволяет клиентам подключаться без указания имени пользователя / пароля. Вы можете отключить это, добавив
allow_annonymous false
в конфигурационный файл - Простое переименование файла ACL-примера не приведет к его загрузке, вам нужно явно указать на него в файле конфигурации с
acl_file
директивой. - Вам также нужно будет указать файл паролей
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 /