Добрый день.
Установил защиту согласно инструкции
Однако, необходим доступ к чтению и записи к топикам.
На 2 шаге инструкции мы закрываем доступ к websocket- и mqtt-порту, изменяя содержимое файла /mnt/data/etc/mosquitto/conf.d/listeners.conf #change 0.0.0.0 to to limit listener to localhost
listener 1883 127.0.0.1
#listener 1883 0.0.0.0
# example:
#listener 1883 0.0.0.0
#change 0.0.0.0 to 127.0.0.1 to limit listener to localhost
listener 18883 127.0.0.1
#listener 18883 0.0.0.0
protocol websockets
После закрытия, очевидно, не получится подписаться на топики: (взял для примера /devices/wb-adc/controls/Vin)
В mosquitto_sub можно указать имя пользователя и пароль для подключения, где их нужно создать?
Второй вопрос, в протоколе MQTT существует защищенное SSL-подключение, для которого используется порт 8883. Как его настроить? И в чем будет принципиальная разница от подключения с логином и паролем по порту 1883?
Добрый день!
Если вы не используете TLS как транспортный уровень, то логин-пароль передаются по сети просто текстом, что не очень безопасно.
Как включить TLS на брокере: http://www.steves-internet-guide.com/mosquitto-tls/
Как использовать mosquitto_sub с TLS:
Зашел в /etc/mosquitto/mosquitto.conf
В нем содержится:
# Place your local configuration in /etc/mosquitto/conf.d/
#
# A full description of the configuration file is at
# /usr/share/doc/mosquitto/examples/mosquitto.conf.example
К сожалению подробного описание по адресу /usr/share/doc/mosquitto/examples/mosquitto.conf.example нет.
3. В файле /etc/mosquitto/conf.d/auth.conf, который лежит /mnt/data/etc/mosquitto/conf.d/auth.conf содержится:
Я в нем заменил allow_anonymous false
4. В файлы
/mnt/data/etc/mosquitto/acl.conf
/mnt/data/etc/mosquitto/passwd.conf
Которые по умолчанию пустые записал соответственно user - в первый файл user:$6$xSei+vfRibHo3sRF$+9cm8u1z6B/UaGnd0grgQqR+sLoLjTHzSZ2eqEpcw1QjP2T7OdhjohC/Tz0cj+ka4krIuA8Xqd/E2CplPIYSog== - во второй
5. Перезапустил в контроллере службу командой service mosquitto restart
После этого контроллер начал перезагружаться с периодичностью в 3-5 минут. В момент между перезагрузками стер содержимое файлов из 4 пункта. И перезагрузка прекратилась.
Подскажите, что сделано не так? Как правильно поставить логин и пароль?
Пробовал по другой инструкции установить логин и пароль, но безуспешно:
Открываем файл настроек sudo nano /etc/mosquitto/mosquitto.conf
и заменяем его содержимое на следующее:
# Place your local configuration in /etc/mosquitto/conf.d/
#
# A full description of the configuration file is at
# /usr/share/doc/mosquitto/examples/mosquitto.conf.example
Перезагружается контроллер, скорее всего, из-за https://wirenboard.com/wiki/index.php/Watchdog, его можно отключить.
А фундаментальная причина глубже, и, видимо, такая: наши внутренние сервисы, например, wb-mqtt-serial, который опрашивает Modbus-устройства и передаёт значения с них в MQTT, тоже пытаются подключиться к брокеру - а он запаролен. При этом в том же wb-mqtt-serial пароль никак не задать, насколько я знаю.
Поэтому нужно подумать, как сделать так, чтобы локальные сервисы работали с брокером без пароля, а внешние подключения - с паролем.
Я пока придумал только обходной манёвр:
поднять ещё один брокер, уже с паролем,
на брокере Wiren Board разрешить только локальные подключения (но без пароля),
Вот бы такая возможность была в mosquitto по-умолчанию, очевидная же фича
Ох, стоп! Давайте всё-же посмотрим маны на москито
В терминале наберём nano /etc/mosquitto/conf.d/auth.conf
а затем поменяем содержимое на
Всё, после этого у вас всё будет в порядке и для локалхоста безпарольное подключение будет доступно.
Посмотрел вашу тему с самого начала. Абсолютно очевидно, что проблема в том, что у вас не стартует сам брокер. При чём тут “mqtt-serial” и локалхост я не знаю.
service watchdog stop - останавливаем watchdog чтоб вайронсброд не перезагружался (я хз почему этого способа нет в вики)
nano /etc/mosquitto/passwd.conf пишете туда пользователь:пароль
mosquitto_passwd -U /etc/mosquitto/passwd.conf - генерим хэш на указанный пароль, начиная с этого этапа пароль будет напоминать кракозябры.
Да, так лучше. Но единственное что я бы добавил “напишите service watchdog start для того, чтобы запустить его обратно.” Оно вроде как и очевидно, а вроде как инструкции пишутся в том числе для тех, кто не может в очевидное
Здравствуйте.
Произвел действия как в первом посте. Так же проделал операции как рекомендовал PavelSolovev
Собственно вопрос так у меня и остался. Через браузер webUI вижу, все отображается, управлять могу.
А вот в приложении на смартфоне ввожу ip, port, login, passwd - а соединения нет.
Разжуйте, пожалуйста, еще раз как сделать возможным подключение к порту 18883 с приложения.
P.S. IP выделенный, проброс на порт 18883 настроен, внешний порт для доступа к 18883 пингуется и видно что открыт.
Спасибо.
@PavelSolovev а подскажите, пожалуйста, в каких манах вы нашли опцию allow_anonymous_localhost ?) Гугл выдает только два результата: эта страница и вики WB (скорее всего поправленная после этого обсуждения). Даже в исходниках mosquitto ничего похожего не нашел🤔
Оно, работает, но совершенно непонятно каким образом.
ага, этот я видел, спасибо. мне интересен именно allow_anonymous_localhost . откуда берется этот суффикс _localhost и почему с ним все начинает работать как надо?