Базовая защита Mosquitto — это только начало. Обсудим, как с помощью ACL, файрвола и Fail2Ban создать надёжную и безопасную MQTT-инфраструктуру на Ubuntu 24.04. В статье рассказали, какие шаги помогут надёжно защитить Mosquitto на Ubuntu 24.04 и минимизировать риски утечки данных и несанкционированного доступа.

При настройке MQTT-брокера для своих проектов многие сталкиваются с вопросом: как усилить защиту, чтобы предотвратить утечки данных и несанкционированные подключения. Базовой аутентификации и шифрования через TLS часто оказывается недостаточно, особенно если брокер доступен извне, через Интернет.
В материале рассказали, какие дополнительные меры безопасности стоит применять для Mosquitto на VPS, как настроить списки контроля доступа (ACL) и брандмауэр UFW, чтобы надёжно защитить свою MQTT-инфраструктуру от внешних угроз.
Зачем нужен брандмауэр UFW для Mosquitto
Второй логичный шаг после защиты на уровне брокера — защита самого сервера на уровне сети. Даже если Mosquitto отлично настроен изнутри, если сервер принимает весь входящий трафик без ограничений, остаётся риск атаки через другие открытые порты.
Чтобы этого избежать, стоит настроить брандмауэр UFW (Uncomplicated Firewall). Принцип работы прост: разрешаем только те соединения, которые действительно нужны, и блокируем все остальные.
Mosquitto по умолчанию использует два порта: 1883 для незашифрованных подключений и 8883 для TLS. Если вы решили оставить только защищённые соединения через TLS, порт 1883 лучше вообще закрыть.
Для открытия нужных портов выполните команду:
sudo ufw allow 8883/tcp
Если требуется оставить временный доступ через 1883 для тестирования:
sudo ufw allow 1883/tcp
Проверить активные правила файрвола можно командой:
sudo ufw status
UFW даёт простой, но эффективный способ минимизировать возможные векторы атак. Когда сервер принимает только ожидаемые соединения, значительно снижается риск сетевых атак и сканирования.
В крупных корпоративных проектах, где используется Mosquitto, часто дополнительно разворачивают отдельные VPN-сервисы и настраивают брандмауэр так, чтобы брокер принимал подключения только из частной внутренней сети. Это один из лучших способов защитить инфраструктуру от внешнего вмешательства.
Минимальные требования к безопасности паролей в Mosquitto
Выбирая пароли для клиентов MQTT-брокера, важно помнить: слабые или повторяющиеся пароли — это не просто риск, это прямая угроза всей системе. Даже при настроенной аутентификации слабые пароли могут быть легко подобраны с помощью автоматических скриптов.
Надёжный пароль для Mosquitto должен включать не менее 12 символов, содержать заглавные и строчные буквы, цифры и специальные символы. Пароли вроде 123456, qwerty, password или им подобные слишком легко угадываются и фактически не защищают брокер.
Хорошей практикой является регулярная смена паролей клиентов, особенно для тех устройств или пользователей, которые имеют права на публикацию критичных команд. В корпоративных проектах часто вводится обязательная политика смены паролей каждые 90–180 дней, что значительно снижает риск компрометации данных.
Создание и настройка ACL
Чтобы начать работать с ACL в Mosquitto, нужно создать отдельный файл правил. Для этого переходим в каталог, где хранится конфигурация брокера:
cd /etc/mosquitto/
Создаём новый файл при помощи любого текстового редактора, например:
sudo nano acl
Формат записи в файле довольно простой и читаемый даже для новичков. Сначала указывается имя пользователя, затем права (чтение, запись или оба действия) и топик, к которому это правило относится.
Чтобы задать индивидуальные права для разных пользователей, можно использовать следующую настройку.
- Разрешить полный доступ ко всем топикам:
user mosquitto-user
topic readwrite #
- Разрешить пользователю 'another-mosquitto-user' отправлять сообщения в топики вида sensors/+:
user another-mosquitto-user
topic write sensors/+
- Предоставить пользователю 'monitor-mosquitto-user' доступ только на чтение сообщений в этих же топиках:
user monitor-mosquitto-user
topic read sensors/+
- Полностью запретить доступ к системным топикам брокера:
topic read $SYS/#
Интересной возможностью является использование шаблонов через переменные %u и %c. Это удобно, когда клиентов много, и каждому нужно дать доступ к своему топику без явного прописывания всех пользователей вручную. Например, запись:
pattern readwrite devices/%u/#
даст каждому пользователю доступ только к его собственному подразделу в дереве устройств. Если же устройства используют уникальные идентификаторы клиента без логина, удобнее использовать %c вместо %u.
В файлах ACL для Mosquitto поддерживаются подстановочные символы, которые значительно упрощают управление доступом:
- Символ + заменяет ровно один уровень в структуре топика. Например, правило devices/+/data позволит охватить такие топики, как devices/sensors/data или devices/device1/data — любое значение на месте плюса.
- Символ # подставляется вместо любого количества уровней. Запись devices/# охватывает весь раздел, включая топики вроде devices/sensors/data, devices/device1, devices/sensors/temp/status и любые другие вложенные пути.
Дополнительно в ACL-файлах можно использовать механизм pattern. Это гибкий способ назначать права пользователям на лету, без необходимости прописывать для каждого отдельные разрешения вручную.
При использовании pattern доступны специальные переменные:
- %u — автоматически подставляется имя пользователя MQTT-клиента;
- %c — заменяется на идентификатор клиента.
Важно помнить
Mosquitto применяет первое совпавшее правило в ACL-файле. Если сначала разрешить доступ ко всем топикам, а затем попытаться что-то запретить, запрет сработать уже не сможет.
После создания или изменения файла ACL нужно обязательно обновить конфигурацию брокера, добавив в mosquitto.conf строку:
acl_file /etc/mosquitto/acl
После этого перезапустите Mosquitto:
sudo systemctl restart mosquitto
Настройка ACL — это не просто перестраховка. В крупных проектах с десятками или сотнями устройств она становится критически важной для предотвращения случайного или злонамеренного вмешательства в работу системы.
Fail2Ban для защиты Mosquitto
Даже при строгой настройке аутентификации иногда имеет смысл усилить защиту дополнительными средствами. Один из эффективных способов — использование Fail2Ban.
Fail2Ban отслеживает неудачные попытки входа и автоматически блокирует IP-адреса, с которых осуществляется подозрительная активность. Это особенно актуально для брокеров, доступных в Интернете, где сканеры и боты постоянно пытаются подобрать логины и пароли.
Для Mosquitto можно настроить отдельное правило Fail2Ban, которое будет отслеживать логи брокера и реагировать на множественные ошибки аутентификации. При обнаружении подозрительного поведения IP-адрес атакующего будет автоматически заблокирован через брандмауэр, например, через тот же UFW.
Аудит безопасности Mosquitto
Даже при самой тщательной первоначальной настройке безопасность Mosquitto не стоит воспринимать как что-то раз и навсегда завершённое. Изменения в инфраструктуре, обновления ПО, новые требования клиентов или сотрудников могут со временем открывать новые уязвимости.
Поэтому важно регулярно проводить аудит настроек брокера. Это может быть простая ручная проверка открытых портов через nmap, анализ активных соединений, проверка логов на наличие подозрительной активности и контроль сроков действия TLS-сертификатов.
Некоторые команды и сканеры помогают быстро понять, насколько сервер виден извне и какие уязвимые точки остаются открытыми. Например, простая команда:
nmap -p 1883,8883 <IP-адрес>
покажет, какие порты доступны, а значит, какие возможности остаются для атакующих.
Регулярный аудит помогает заранее увидеть потенциальные угрозы и устранять их до того, как они станут проблемой.
Заключение
Безопасность MQTT-брокера — это не отдельная галочка в списке задач, а основа стабильной и надёжной работы всей IoT-инфраструктуры. Mosquitto позволяет построить гибкую систему обмена данными, но только при условии правильной защиты.
Настройка аутентификации пользователей, внедрение TLS-шифрования, использование списков контроля доступа (ACL) и грамотное управление сетевыми подключениями через брандмауэр — всё это базовые шаги, без которых нельзя всерьёз говорить о безопасности брокера. Но на этом работа не заканчивается: защита требует внимания и регулярного контроля. Безопасные пароли, своевременное обновление сертификатов, мониторинг активности и периодический аудит — это не избыточная предосторожность, а нормальная практика для любого ответственного проекта.
Mosquitto легко масштабируется от домашних систем умного дома до крупных корпоративных сетей. И чем раньше вы заложите правильные принципы безопасности, тем проще будет развивать инфраструктуру без страха утечек, сбоев и атак.
Помните: настроенная сегодня грамотная защита брокера — это не только защита данных и устройств, но и уверенность в будущем вашем проекте. Чем надёжнее фундамент, тем устойчивее будет ваш IoT-проект.
Читайте в блоге:
- Гайд по установке Mosquitto на Ubuntu 24.04
- Защита Mosquitto на Ubuntu 24.04: настройка аутентификации и шифрования