Безопасность MQTT на слабых устройствах: лучшие практики

Reading time: 3 minutes

Last modified:

У MQTT нет собственной защиты. Брокер на открытом порту с анонимным доступом примет сообщение от кого угодно и отдаст кому угодно. На устройстве с маленьким флешем, батареей и SIM-картой каждая защита стоит ресурсов, поэтому вы выбираете, какие слои несёт устройство, а какие переходят на сервер.

Ниже практики из трёх наших продуктов: умный фильтр воды FlowID на ESP32, система учёта HomeSmart с LoRa-меш и GSM-шлюзами и GPS-трекеры Micare. Ограничения GSM-устройств разобраны в нашем сравнении модемов.

Выберите уровень защиты, который выдержит железо

Есть три блока:

  • TLS с сертификатами. Самая сильная модель: устройство проверяет брокера, у каждого устройства может быть своя идентичность. Нужны хранилище сертификатов, цепочка, надёжные часы и план продления для устройств, которые годами живут в поле.
  • TLS-PSK. Канал остаётся зашифрованным, цепочка сертификатов уходит. Брокер и устройство делят ключ и строку идентификатора. Рукопожатие проще и не требует часов. Продумайте, как каждое устройство получит свой ключ при прошивке.
  • Логины и ACL. Имя пользователя, пароль и права на топики не дают посторонним пользоваться вашим брокером. Сочетайте их с зашифрованным каналом.

Наше правило: шифруйте канал, аутентифицируйте каждое устройство и ограничивайте его собственными топиками.

Шифруйте канал на устройстве

Устройства FlowID подключаются к брокеру Mosquitto по TLS-PSK. В прошивке мы задаём ключ и идентификатор на защищённом клиенте сетевого стека ESP32 и запускаем поверх него стандартную библиотеку PubSubClient. На плате 4 МБ флеша и частота 80 МГц, поэтому буфер сообщения держим небольшим, 400 байт, и оставляем место для приложения и обновлений по воздуху.

Дайте каждому устройству свою идентичность и список доступа

На платформе Micare у каждого устройства свои учётные данные на брокере и список доступа, построенный по идентификатору клиента. Устройство читает и пишет только в свои топики, поэтому взломанный трекер не доберётся до данных другого. Не заводите один аккаунт на весь парк. Если управление ключами позволяет, давайте каждому устройству свой PSK.

Проектируйте топики на годы вперёд

Устройства в поле обновляются медленно или не обновляются вовсе, поэтому схема топиков должна пережить первую прошивку.

  • Делайте топики по устройствам, чтобы права следовали за устройством.
  • Добавляйте префикс версии. Устройства HomeSmart публикуют телеметрию в топик вида v1/telemetry/serial/channel и получают конфигурацию из v1/config/serial/channel. Новая прошивка переходит на новую версию, а сервер принимает обе.
  • Держите телеметрию и конфигурацию на разных ветках, чтобы у них могли быть разные права.

Не пускайте бизнес-логику и браузеры в брокер

Брокер служит транспортом. Во FlowID отдельный сервис состояния устройств подписан на сообщения о состоянии и обрабатывает их. В HomeSmart у веб-фронтенда не подключается к брокеру: бэкенд превращает сообщения устройства в события, страница раз в минуту забирает их из API, и учётные данные брокера в браузер не попадают. Заодно события стали сохраняться.

Передавайте настройки подключения по контролируемому каналу

Отдавайте устройству данные сети по BLE. Прошивка FlowID получает данные сети по BLE, до тридцати секунд пробует подключиться, сохраняет их только после успешного подключения и сообщает результат обратно по BLE. Устройство не хранит данные, которыми не может воспользоваться.

Эксплуатируйте брокер аккуратно

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

Короткий чек-лист

  1. Выключите анонимный доступ на каждом брокере, без исключений.
  2. Шифруйте канал. Берите PSK, если сертификаты слишком тяжёлые, и по возможности свой ключ на каждое устройство.
  3. Дайте каждому устройству ACL только на его топики.
  4. Не пускайте браузеры и приложения к брокеру. Ведите их через бэкенд.
  5. Версионируйте топики с первого релиза.
  6. Включите персистентность брокера, если опираетесь на retained-сообщения.
  7. Передавайте данные сети по контролируемому каналу и сохраняйте их только после успешного подключения.
  8. Следите за памятью брокера.

Эти практики взяты из наших проектов. Проверку безопасности вашей системы они не заменяют.

Спланируйте защиту своего парка устройств

Выбираете между PSK, сертификатами и одним ACL для парка устройств? Напишите нам. Посмотрите разработку IoT и разборы проектов: фильтр FlowID, трекер Micare и платформа HomeSmart. Свяжитесь с нами, расскажите об ограничениях железа, и мы скажем, какой вариант подойдёт.

Часто задаваемые вопросы

Достаточно ли TLS-PSK для MQTT на микроконтроллере?

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

Почему не ставить полноценный TLS с сертификатами на каждое устройство?

Сертификаты расходуют флеш и RAM на разбор, цепочку и рукопожатие, а устройствам в поле нужен план продления на годы вперёд. На наших ESP32-продуктах мы выбрали TLS-PSK по этим причинам.

Что делает ACL в MQTT?

Список доступа задаёт, в какие топики клиент может писать и на какие подписываться. Устройство с доступом только к своим топикам не прочитает и не перепишет чужие данные. Шифрование этого не даёт, поэтому мы используем оба механизма.

Можно ли подключать браузер к брокеру напрямую?

Нет. В HomeSmart у веб-фронтенда нет подключения к брокеру. Сообщения читает бэкенд, а браузер получает события из API, поэтому учётные данные брокера до клиента не доходят.

CimpleO IoT
Безопасность MQTT на слабых устройствах: лучшие практики
OCT 10 2026 · 3 MIN
Table of Contents