Защита Mosquitto на Ubuntu 24.04: настройка аутентификации и шифрования

Защита Mosquitto на Ubuntu 24.04: настройка аутентификации и шифрования

Mosquitto без базовой защиты — лёгкая добыча для атак. Чтобы обеспечить безопасность IoT-системы, одного запуска брокера сообщений недостаточно — требуется грамотная настройка. В этом материале рассказываем, как включить шифрование TLS и аутентификацию всего за несколько шагов.

Mosquitto лого

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

Мы подробно разобрали, как настроить Mosquitto на Ubuntu 24.04 для безопасной работы на сервере: от создания пользователей до генерации TLS-сертификатов и конфигурации защищённых подключений. Все инструкции применимы как к локальным установкам, так и к работе на VPS. Отдельно указали, на какие нюансы стоит обратить внимание, чтобы избежать критических ошибок в защите.

Аренда VPS/VDS от 219 руб/месяц

Преимущества VPS в AdminVPS:

✓ Бесплатное администрирование

✓ Только быстрые NVMe-диски

✓ Защита от DDoS-атак

✓ Быстрая техподдержка

Аренда VPS/VDS виртуального сервера от AdminVPS — это прозрачная и честная услуга с доступной ценой

Почему Mosquitto нельзя оставлять без защиты

Развёртывая Mosquitto как есть, без дополнительной настройки безопасности, вы фактически оставляете сервер открытым для любого, кто знает его IP-адрес и порт подключения. Это не теоретическая угроза, а реальный риск, который подтверждён практикой и рядом инцидентов.

По умолчанию Mosquitto принимает подключения от всех желающих без проверки имени пользователя и пароля. Это значит, что злоумышленник может:

  • без труда подписаться на любой MQTT-топик и перехватить все сообщения, включая команды управления устройствами или показания датчиков.
  • публиковать собственные сообщения в сеть, вводя устройства в заблуждение или нарушая их работу;
  • перегружать брокер фальшивыми запросами, вызывая отказ в обслуживании (DoS-атаки).

Без настройки аутентификации в Mosquitto есть риск, что посторонние смогут отправлять команды вашим устройствам. Например, в проектах по мониторингу теплиц злоумышленники могут вызвать перерасход ресурсов или сбой работы оборудования. На практике такие инциденты могут привести к серьёзным финансовым потерям и простою систем.

Особенно уязвимыми остаются публичные брокеры, установленные на арендуемых VPS без изоляции сети или межсетевых экранов. В таких условиях Mosquitto может быть обнаружен сканерами вроде Shodan буквально за считанные часы. Например, если вы разместили сервер и не настроили доступы, ваш Mosquitto вполне могут найти сканеры типа Shodan буквально за считанные часы.

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

Для компаний, работающих с персональными данными или обслуживающих удалённые объекты, такие утечки могут обернуться не только репутационными потерями, но и реальными штрафами. Например, по требованиям закона № 152-ФЗ «О персональных данных».

Именно поэтому отказ от настройки аутентификации и шифрования в Mosquitto — это не просто техническая недоработка. Это критическая ошибка в архитектуре системы.

Какие бывают уровни безопасности в MQTT

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

Аутентификация — это базовая проверка личности клиента, который пытается подключиться к брокеру. Без аутентификации Mosquitto будет принимать любого пользователя без разбора, а значит, любой желающий сможет подписаться на топики или отправить команды вашим устройствам. Чтобы этого избежать, для каждого клиента создаются уникальные логины и пароли. При подключении брокер проверяет их и пускает только тех, кто прошёл проверку. Этот этап защищает от случайных подключений и грубых попыток взлома.

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

Шифрование канала связи через TLS — третий, но не по значимости элемент. Даже если логин и пароль надёжно защищены, если соединение не шифруется, любой перехватчик в сети сможет прочитать передаваемые данные. А в MQTT через брокер часто идут не просто безобидные статусы — это команды управления, параметры систем безопасности, личные данные пользователей. Шифрование делает всё взаимодействие между клиентом и сервером надёжно скрытым от посторонних глаз.

Безопасность в MQTT — это связка из трёх элементов. Настроить только один из них — значит оставить дыру в защите. По-настоящему защищённым считается только тот брокер, где есть аутентификация для проверки клиентов, авторизация для контроля их прав и обязательное шифрование всех передаваемых данных. Именно такая модель сегодня применяется в серьёзных IoT-проектах, от промышленных систем мониторинга до корпоративных сетей умного офиса.

Как настроить аутентификацию пользователей в Mosquitto

Для начала нужно запретить анонимный доступ и настроить подключение только через зарегистрированные учётные записи. Для этого создайте файл с логином и паролем для нового пользователя:

sudo mosquitto_passwd -c /etc/mosquitto/passwd mosquitto-user

Опция -c создаёт новый файл. Если он уже существует, его содержимое будет перезаписано. В процессе команда попросит ввести пароль.

Чтобы добавить ещё одного пользователя без перезаписи файла, пропишите:

sudo mosquitto_passwd /etc/mosquitto/passwd another-mosquitto-user

Очень важно, чтобы брокер имел доступ к файлу паролей. Для этого измените владельца:

sudo chown mosquitto:mosquitto /etc/mosquitto/passwd

Теперь откройте основной конфигурационный файл Mosquitto:

sudo nano /etc/mosquitto/mosquitto.conf

И добавьте туда строки:

allow_anonymous false
password_file /etc/mosquitto/passwd

Если в файле осталась строка:

allow_anonymous true

Обязательно закомментируйте её или удалите, чтобы запретить доступ без логина.

После изменений перезапустите сервис:

sudo systemctl restart mosquitto

Теперь подключение к брокеру будет требовать указания имени пользователя и пароля:

mosquitto_sub -h X.X.X.X -t test -u "mosquitto-user" -P "Password"

Где:

  • X.X.X.X — IP-адрес сервера;
  • Password — пароль от вашей учётной записи.

Зачем использовать TLS в Mosquitto

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

TLS (Transport Layer Security) решает эту проблему. При его использовании все сообщения между клиентами и брокером передаются в зашифрованном виде, а клиенты могут удостовериться в подлинности сервера по сертификату.

Передача данных без TLS — как отправка открытки: любой может её прочитать. С TLS вы используете надёжный, опломбированный сейф.

Генерация сертификатов для Mosquitto

Для начала создайте директорию для хранения сертификатов:

sudo mkdir -p /etc/mosquitto/certs

Создайте конфигурационный файл для OpenSSL:

sudo nano /etc/mosquitto/certs/openssl.cnf

Минимальное содержимое:

[req]
default_bits = 2048
prompt = no
default_md = sha256
distinguished_name = dn
[dn]
C = RU
ST = Moscow Region
L = Moscow
O = Your Organization
OU = Your Unit
CN = X.X.X.X
[v3_ca]
subjectAltName = @alt_names
[alt_names]
IP.1 = X.X.X.X

Замените X.X.X.X на реальный IP-адрес сервера.

В этом случае:

  1. [req] — секция, где задаются ключевые параметры для создания сертификата. Здесь, например:
  • default_bits = 2048 — определяет длину генерируемого ключа в битах;
  • prompt = no — отключает ручной ввод данных при создании запроса, чтобы всё заполнялось автоматически;
  • default_md = sha256 — задаёт используемый алгоритм хеширования (SHA-256);
  • distinguished_name = dn — указывает, что данные для имени сертификата берутся из секции [dn].
  1. [dn] — блок, в котором описывается содержание сертификата:
  • C = RU — код страны в формате международного стандарта ISO 3166-1;
  • ST = Moscow Region — штат, область или регион;
  • L = Moscow — город или населённый пункт;
  • O = Your Organization — название организации, которой будет принадлежать сертификат;
  • OU = Your Unit — подразделение или отдел внутри организации;
  • CN = X.X.X.X — общее имя: здесь обычно указывают IP-адрес или доменное имя сервера, для которого сертификат создаётся. Не забудьте заменить X.X.X.X на реальный IP-адрес вашего брокера.
  1. [v3_ca] — секция для расширенных атрибутов сертификата:
  • subjectAltName = @alt_names — настраивает поле Subject Alternative Name (SAN), которое определяет допустимые альтернативные имена для подключения.
  1. [alt_names] — список дополнительных IP-адресов или доменных имён:
  • IP.1 = X.X.X.X — разрешает использовать сертификат для конкретного IP-адреса, указанного в этой строке.

Теперь создайте закрытый ключ центра сертификации и самоподписанный сертификат:

cd /etc/mosquitto/certs/
sudo openssl genpkey -algorithm RSA -out ca.key
sudo openssl req -new -x509 -days 365 -key ca.key -out ca.crt -config openssl.cnf

Затем сгенерируйте ключ и запрос на сертификат для сервера:

sudo openssl genpkey -algorithm RSA -out server.key
sudo openssl req -new -key server.key -out server.csr -config openssl.cnf

Подпишите запрос:

sudo openssl x509 -req -in server.csr -CA ca.crt -CAkey ca.key -CAcreateserial -out server.crt -days 365 -extfile openssl.cnf -extensions v3_ca

Не забудьте выставить правильные права доступа:

sudo chown mosquitto:mosquitto -R /etc/mosquitto/certs/

Как часто нужно обновлять сертификаты TLS в Mosquitto

Сертификаты, которые используются для шифрования соединений через TLS, имеют срок действия. Обычно это 90 дней или 1 год, если сертификаты самоподписанные или от корпоративного УЦ.

Важно не забывать о сроке истечения сертификатов. Если сертификат истёк, все клиенты потеряют возможность подключиться к брокеру — соединения будут автоматически отклоняться. Это приведёт к перебоям в работе всей инфраструктуры, а в бизнесе даже к прямым убыткам.

Рекомендуем следующее.

  • При самоподписанных сертификатах ставить напоминание за 30 дней до истечения срока.
  • Настроить автоматическое обновление с помощью скриптов и cron-задач.

Проверить срок действия сертификата можно простой командой:

openssl x509 -enddate -noout -in /etc/mosquitto/certs/server.crt

Пример ответа на команду:

notAfter=2025-05-01T12:00:00Z

В данном примере сертификат действителен до 1 мая 2025 года.

Небольшая дисциплина в вопросах обновления сертификатов экономит огромное количество нервов и денег.

Включение TLS в настройках Mosquitto

Отредактируйте конфигурацию брокера:

sudo nano /etc/mosquitto/mosquitto.conf

Добавьте параметры для TLS:

listener 8883
cafile /etc/mosquitto/certs/ca.crt
certfile /etc/mosquitto/certs/server.crt
keyfile /etc/mosquitto/certs/server.key

Если не хотите оставлять открытый порт 1883, строку listener 1883 можно удалить или закомментировать.

Перезапустите брокер:

sudo systemctl restart mosquitto

Теперь Mosquitto принимает подключения только на защищённом порту 8883.

Как подключиться к Mosquitto через TLS

Чтобы подписаться на топик через защищённое соединение, введите:

mosquitto_sub -h X.X.X.X -p 8883 -t test -u "mosquitto-user" -P "Password" --cafile /etc/mosquitto/certs/ca.crt

Где:

  • X.X.X.X — это IP-адрес сервера, на котором запущен Mosquitto-брокер;
  • 8883 — порт, через который осуществляется защищённое соединение по протоколу MQTT через TLS;
  • mosquitto-user — имя пользователя, зарегистрированного для подключения к брокеру;
  • Password — пароль, связанный с указанной учётной записью;
  • /etc/mosquitto/certs/ca.crt — путь к сертификату центра сертификации, который используется для проверки подлинности сервера.

В MQTTX достаточно активировать SSL/TLS и выбрать нужный CA-файл для доверия сертификату сервера.

Если после настройки Mosquitto вы планируете подключаться к брокеру через графические клиенты, например, через MQTTX, для успешного защищённого соединения потребуется указать:

  • протокол подключения mqtts://;
  • порт 8883;
  • имя пользователя и пароль, созданные для аутентификации;
  • путь к сертификату центра сертификации (CA), который нужно будет перенести на локальный компьютер. Для передачи сертификата удобно использовать программы вроде WinSCP.

Что важно проверить после настройки безопасности Mosquitto

После того как Mosquitto настроен на работу с аутентификацией и шифрованием, очень важно убедиться, что система действительно защищена, а не оставлена с открытыми лазейками. Маленькая ошибка на этом этапе может свести на нет все усилия, вложенные в защиту брокера.

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

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

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

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

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

Итоги

Настройка базовой безопасности Mosquitto не так сложна, как кажется на первый взгляд, но требует внимательности и понимания того, как работают разные уровни защиты. Только связка из надёжной аутентификации, продуманной авторизации и обязательного шифрования трафика позволяет говорить о реальной безопасности брокера сообщений.

Грамотно настроенный Mosquitto справляется с задачами любой сложности — от обмена данными между парой устройств в умном доме до обслуживания сетей с тысячами датчиков в промышленности. Чем серьёзнее вы относитесь к вопросам безопасности на старте, тем меньше рисков и сбоев будет в будущем.

Читайте в блоге:

Loading spinner
0 Комментарий
Старые
Новые Популярные
Межтекстовые Отзывы
Посмотреть все комментарии

VPN на VPS-сервере

Узнайте, как создать собственный VPN на VPS-сервере для защиты ваших конфиденциальных данных!

Что будем искать? Например,VPS-сервер

Мы в социальных сетях