MQTT с паролем и wb-gpio

Идем в описание контроллера, раздел безопасность, там ссылка с “установите пароль на веб-интерфейс и заблокируйте доступ к MQTT-брокеру” Установка пароля на веб-интерфейс контроллера Wiren Board (Debian Bullseye) — Wiren Board
Читаем: “…Если ранее не устанавливался пароль на MQTT брокер и нет необходимости доступа к брокеру извне, то…” - ага, раз нам нужен доступ извне и по паролю, значит идем в статью по ссылке - MQTT в контроллерах Wiren Board — Wiren Board и настраиваем там по инструкции пароль, а там “Устанавливать следует только для listener 1883, это важно”. Установили, wb-gpio сломался, потому что идет на 1883 без пароля.

Как правильно всё на контроллере закрыть паролями, сохранив доступ извне и не сломав ничего внутри?

В целом конечно очень странно выглядит небезопасная конфигурация по-умолчанию, где для перехода на закрытый режим надо сделать очень много ручных действий с полным пониманием логики происходящего.
Должен быть какой-то готовый скрипт, который закрывает всё лишнее снаружи, иначе у тех, кто не обладает сисдаинскими знаниями, обязательно останется что-либо открыто и их будут продолжать взламывать снаружи.

Пока сделал так, но это работает только если у контроллера статический адрес на одном интерфейсе

listener 1883 127.0.0.1
allow_anonymous true
...
listener 1883 192.168.1.100
allow_anonymous false

Как я понимаю, порт 1883 захардкожен и в web-интерфейсе и в wb-gpio, поэтому легко их не разнести между собой

Добрый день.

Да. Снаружи - с паролем, с локалхоста - без.

Менять (любые) настройки следует только с полным осознанием их влияния.

Контроллер - это не “готовый продукт”. Это оборудование с ПО которое настраивается под задачу. Относиться с точки зрения безопасности нужно как к обычному серверу, методика настройки совершенно та же.

Веб-интерфейс никак не взаимодействуетс с брокером по MQTT, для него есть отдельный ws 18883 порт.

Этот сервис - да, работает с mqtt

Тогда получается, что в разделе " Установка пароля на MQTT брокер" MQTT в контроллерах Wiren Board — Wiren Board неверная информация

  • Во 2 пункте предлагается поставить пароль на 1883, что ломает внутреннее взаимодействие. Логичнее рекомендовать сделать его listener 1883 127.0.0.1 и добавить еще один listener 1884 с allow_anonymous false, к которому уже обращаться извне.
  • а дальше идет “для корректной работы через веб-интерфейс нужно будет использовать установленное имя пользователя и пароль в разделе Настройки → Веб-интерфейс → Подключение к MQTT брокеру, который по умолчанию использует анонимное подключение.” - а оказывается что тут ничего не надо прописывать, ведь оно через 18883 работает?

У обычного сервера (например, базовой установки Ubuntu или Debian) по-умолчанию наружу не высунуты внутренние сервисы без авторизации. Сейчас (в том числе из-за последних директив Евросоюза) всё больше ПО перестает высовывать интерфейсы управления с дефолтными паролями или без них на внешние сетевые интерфейсы.
Понимаю, что контроллер по-умолчанию предполагает настройку в локальной сети, но видятся логичным готовые пресеты первоначальной настройки - либо где всё открыто (контроллер используется в доверенной локальной сети), либо где всё закрыто (нет доверия сети).

Для дополнительныых listner можно настраивать авторизацию, можно не настраивать - смысл в том чтобы для localhost оставить как есть, без авторизации.
Если непонятно там описано - подскажите, как оописать лучше?

Тут - да, исправил, указав что нужно только для старых релизов, когда интерфейс мог работать и напрямую.

Да, у нас тоже идет работа по введению “безопсности из коробки”. Не так быстро как хотелось бы, но “роли” на подходе.

Это разработка-тестирование-поддержка. Да, неплохо, конечно.

Пункт 2 сейчас:

Далее в файле /etc/mosquitto/conf.d/10listeners.conf установите параметр allow_anonymous false (по умолчанию true). Устанавливать следует только для listener 1883, это важно.

Логичнее будет выглядеть например:

В файле /etc/mosquitto/conf.d/10listeners.conf требуется

  • Сделать listener 1883 доступным только локально: listener 1883 127.0.0.1 - его используют внутренние сервисы контроллера
  • Добавить новый listener с любым портом и allow_anonymous false, к которому будут обращаться внешние клиенты, например:
listener 1884
allow_anonymous false
acl_file /etc/mosquitto/acl/default.conf
password_file /etc/mosquitto/passwd/default.conf`

Благодарю, переделал. Вот в чем плюс свежего взгляда - у нас довольно замылен и контекст сразу подтягивается нужный.
Рад что помогаете улучшить документацию!