Поиск по сайту:

Как установить Mosquitto MQTT Message Broker на Debian 11


На этой странице

  1. Предпосылки
  2. Установка сервера и клиента Mosquitto
  3. Настройка аутентификации в Mosquitto
  4. Защита Mosquitto с помощью сертификатов SSL/TLS
  5. Включение веб-сокетов в Mosquitto
  6. Заключение

Eclipse Mosquitto — это бесплатный брокер сообщений с открытым исходным кодом, реализующий протокол MQTT. Mosquitto реализует MQTT версии 3.1.0, 3.1.1 и версии 5.0. Mosquitto — это облегченный брокер сообщений, который подходит для различных типов развертывания и использования.

Mosquitto — это брокер сообщений, который использует модель публикации/подписки для доставки сообщений. Он использует низкую пропускную способность и обеспечивает простоту реализации, что означает, что он подходит для развертывания на небольших устройствах и IoT (Интернете вещей), мобильных устройствах, встроенных компьютерах и микроконтроллерах.

В этом руководстве мы подробно рассмотрим процесс установки и настройки Mosquitto MQTT Message Broker на сервере Debian 11, настройку аутентификации, защиту Mosquitto с помощью сертификатов SSL/TLS, а также включение веб-сокетов на Mosquitto.

Предпосылки

Для начала у вас должны быть следующие требования для прохождения этого руководства:

  • Сервер Debian 11. В этой демонстрации используется сервер Debian с именем хоста mosquitto-server.
  • Пользователь без полномочий root с правами root/администратора.

Установка сервера и клиента Mosquitto

Mosquitto — это брокер сообщений MQTT с открытым исходным кодом, который доступен и может быть установлен на нескольких платформах, таких как Windows, Linux, BSD и macOS. Для дистрибутива Debian Linux Mosquitto доступен в репозитории Debian по умолчанию, что позволяет легко установить его через APT.

На этом этапе вы ознакомитесь с процессом установки сервера и клиента Mosquitto на сервере Debian. Вы также ознакомитесь с основным использованием командной строки Mosquitto (mosquitto_sub и mosquitto_pub), чтобы проверить установку сервера Mosquitto.

Сначала обновите и обновите индекс пакетов Debian с помощью приведенной ниже команды apt.

sudo apt update

Найдите пакет mosquitto, используя следующую команду apt.

sudo apt search mosquitto

Вы должны увидеть некоторые пакеты Mosquitto, которые доступны по умолчанию в репозитории Debian, включая серверное приложение и клиент Mosquitto.

Теперь запустите приведенную ниже команду apt, чтобы установить пакеты Mosquitto. При появлении запроса введите y для подтверждения и нажмите ENTER для продолжения.

sudo apt install mosquitto mosquitto-clients

После установки Mosquitto проверьте службу Mosquitto с помощью следующей команды systemctl.

sudo systemctl is-enabled mosquitto
sudo systemctl status mosquitto

Затем вы увидите, что служба Mosquitto включена и будет запускаться автоматически при загрузке. И текущий статус службы Mosquitto работает.

Теперь, когда сервер Mosquitto запущен, вы должны пройти проверку Mosquitto с помощью клиентской командной строки mosquitto_sub и mosquitto-pub.

Проще говоря, mosquitto_sub — это инструмент командной строки для получения сообщений (подписчика) от mosquitto_pub (издателя).

Выполните следующую команду mosqitto_sub, чтобы получить несколько сообщений на тему test.

sudo mosquitto_sub -h localhost -t test

Затем откройте новый терминальный сеанс вашего сервера и выполните следующую команду mosquitto_pub, чтобы отправить несколько сообщений в тему test.

sudo mosquitto_pub -h localhost -t test -m "Hello from terminal 2"
sudo mosquitto_pub -h localhost -t test -m "Hello from terminal 2 - Publisher"
sudo mosquitto_pub -h localhost -t test -m "Hello"

Затем вы увидите опубликованные сообщения через mosquitto_pub на получателе mosquitto_sub, что означает, что установка сервера и клиента Mosquitto прошла успешно.

Настройка аутентификации на Mosquitto

Установка Mosquitto по умолчанию выполняется без аутентификации. Для обеспечения безопасности развертывания (особенно в рабочей среде) необходимо включить аутентификацию на сервере Mosquitto. Вы можете создать и определить пользователя в Mosquitto и защитить Mosquitto Sub и Pub с помощью аутентификации по имени пользователя и паролю.

Выполните следующую команду, чтобы создать нового пользователя и пароль Mosquitto. В этой демонстрации используется пользователь alice, а пароль будет сгенерирован и хеширован в файле /etc/mosquitto/.passwd.

sudo mosquitto_passwd -c /etc/mosquitto/.passwd alice

Введите пароль для пользователя Mosquitto alice и повторите пароль.

После создания имени пользователя и пароля создайте новую конфигурацию Mosquitto /etc/mosquitto/conf.d/auth.conf, используя следующую команду редактора nano.

sudo nano /etc/mosquitto/conf.d/auth.conf

Добавьте следующую конфигурацию в файл. Это запустит Mosquitto на порту 1883, отключит анонимный доступ и определит файл паролей как /etc/mosquitto/.passwd.

listener 1883
allow_anonymous false
password_file /etc/mosquitto/.passwd

Сохраните файл и выйдите из редактора, когда закончите.

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

sudo systemctl restart mosquitto

Чтобы проверить аутентификацию сервера Mosquitto, вы можете использовать команды mosquitto_sub и mosquitto_pub.

Если вы не предоставили имя пользователя/пароль во время процесса публикации/подписки, вам будет отказано, и в соединении будет отказано. Но если вы указали имя пользователя/пароль для аутентификации и у вас есть правильные учетные данные, вы сможете отправлять и получать сообщения через подписчика и издателя Mosquitto.

Выполните следующую команду, чтобы проверить Pub и Sub на Mosquitto без аутентификации.

# session - Mosquitto Subscriber
sudo mosquitto_sub -h localhost -t test

# session - Mosquitto Publisher
sudo mosquitto_pub -h localhost -t test -m "Hello again from terminal 2"

Затем вы увидите, что без аутентификации оба подключения к серверу Mosquitto будут отклонены, поскольку они неавторизованы, и вы не сможете отправлять и получать сообщения.

Затем выполните следующую команду, чтобы проверить Pub и Sub Mosquitto с помощью пользователя и пароля.

# session - Mosquitto Subscriber
sudo mosquitto_sub -h localhost -t test -u "alice" -P "p4ssw0rd"

# session - Mosquitto Publisher
sudo mosquitto_pub -h localhost -t "test" -m "Hello - enabled auth" -u "alice" -P "p4ssw0rd"

Когда учетные данные Mosquitto верны, вы будете подключены как к подписчику Mosquitto, так и к издателю, и сможете отправлять и получать сообщения через командную строку Mosquitto.

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

Защита Mosquitto с помощью сертификатов SSL/TLS

Хотя сервер Mosquitto защищен с помощью аутентификации, необходимо выполнить еще несколько шагов, чтобы обеспечить безопасность развертывания Mosquitto. Это включает в себя внедрение сертификатов SSL/TLS, которые будут шифровать передачу данных между сервером Mosquitto и приложениями.

Прежде чем приступить к работе, убедитесь, что у вас есть сертификаты SSL/TLS, созданные для вашей локальной среды.

Для начала выполните следующую команду openssl, чтобы сгенерировать сертификат dhparam. Это создаст сертификат DHPARAM для /etc/mosquitto/certs/dhparam.pem.

sudo openssl dhparam -out /etc/mosquitto/certs/dhparam.pem 2048

Теперь измените владельца каталога сертификатов Mosquitto на пользователя mosquitto с помощью приведенной ниже команды chmod.

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

Затем создайте новую дополнительную конфигурацию /etc/mosquitto/conf.d/ssl.conf, используя следующую команду редактора nano. При этом вы активируете безопасное соединение на сервере Mosquitto через сертификаты SSL/TLS.

sudo nano /etc/mosquitto/conf.d/ssl.conf

Добавьте следующую конфигурацию в файл. Это запустит Mosquitto на порту 8883 с включенным TLS поверх него. Поэтому обязательно измените путь сертификатов SSL/TLS.

listener 8883

certfile /etc/letsencrypt/live/msqt.hwdomain.io/fullchain.pem
cafile /etc/letsencrypt/live/msqt.hwdomain.io/chain.pem
keyfile /etc/letsencrypt/live/msqt.hwdomain.io/privkey.pem
dhparamfile /etc/mosquitto/certs/dhparam.pem

Сохраните файл и выйдите из редактора, когда закончите.

Теперь выполните следующую команду systemctl, чтобы перезапустить службу Mosquitto и применить новые изменения. Теперь сервер Mosquitto будет работать с включенным безопасным протоколом TLS.

sudo systemctl restart mosquitto

При включенном SSL/TLS вы затем проверите конфигурацию, отправив сообщения подписчику Mosquitte через защищенное соединение.

Выполните следующую команду mosquitto_sub, чтобы открыть подписчика Mosquitte в текущей терминальной сессии.

sudo mosquitto_sub -h localhost -t test -u "alice" -P "p4ssw0rd"

Затем откройте новый сеанс, подключитесь к серверу и выполните следующую команду для отправки сообщений на сервер Mosquitto. При этом вы будете подключаться к серверу Mosquitto msqt.hwdomain.io через соединение SSL/TLS, работающее через порт 8883.

sudo mosquitto_pub -h msqt.hwdomain.io -t test -m "hello again - with SSL enabled" -p 8883 --capath /etc/ssl/certs/ -u "alice" -P "p4ssw0rd"

Теперь вы должны получать сообщения в оболочке подписчика Mosquitto. Mosquitto Producer отправляет сообщения подписчику Mosquitto через защищенное SSL/TLS-соединение, работающее через порт 8883.

Включение WebSockets на Mosquitto

На этом этапе вы установили сервер Mosquitto и защитили установку, включив аутентификацию по имени пользователя/паролю и безопасное соединение SSL/TLS. Затем вы узнаете, как включить WebSockets через MQTT на сервере Mosquitto.

WebSocket — это протокол связи с отслеживанием состояния, который обеспечивает постоянный полнодуплексный канал между сервером и клиентом, повторно используя то же соединение, которое было открыто в начале связи (во время рукопожатия открытия).

Для начала создайте новую конфигурацию /etc/mosquitto/conf.d/websockets.conf, используя следующую команду редактора nano.

sudo nano /etc/mosquitto/conf.d/websockets.conf

Добавьте следующую конфигурацию в файл. Это активирует протокол WebSockets и защитит его с помощью сертификатов SSL/TLS. WebSockets будут работать на порту 8083.

listener 8083
protocol websockets
certfile /etc/letsencrypt/live/msqt.hwdomain.io/fullchain.pem
cafile /etc/letsencrypt/live/msqt.hwdomain.io/chain.pem
keyfile /etc/letsencrypt/live/msqt.hwdomain.io/privkey.pem

Сохраните файл и выйдите из редактора, когда закончите.

Затем выполните следующую команду systemctl, чтобы перезапустить службу Mosquitto и применить новые изменения. Сервер Mosquitto теперь будет работать с включенными WebSockets поверх безопасного соединения SSL/TLS.

sudo systemctl restart mosquitto

Чтобы проверить конфигурацию WebSockets, вы можете подключиться к Mosquitto с помощью стороннего инструмента, такого как MQTT Explorer, который доступен для основных операционных систем, таких как Linux, Windows и macOS.

Ниже представлен MQTT Explorer с подключением WebSockets.

При подключении вы должны увидеть следующую панель инструментов.

Заключение

Из этого руководства вы узнали, как установить Mosquitto MQTT Message Broker на сервер Debian 11. Вы также узнали, как защитить сервер Mosquitto, включив аутентификацию по имени пользователя и паролю, а также защитив передачу данных и подключение Mosquitto через сертификаты SSL/TLS. Кроме того, вы включили протокол WebSockets на сервере Mosquitto, который позволяет устанавливать соединения между подписчиком и производителем в асинхронном режиме.

Теперь вы можете использовать установку Mosquitto, создав высокодоступный кластер Mosquitto или настроив панель администрирования Mosquitto через Cedalo Management Center.