УСТАНОВКА БРОКЕРА СООБЩЕНИЙ MOSQUITTO В CENTOS 7
			MQTT – это легковесный протокол сообщений, предназначенный для общения между устройствами (machine-to-machine) интернета вещей. Он используется для отслеживания перемещения транспортных средств, домашней автоматизации и сбора данных.
Mosquitto – это популярный MQTT-сервер (или брокер). Он прост в установке и настройке и активно поддерживается сообществом.
Данное руководство поможет установить Mosquitto, получить для него сертификат SSL от сервиса Let’s Encrypt и настроить безопасное взаимодействие устройств по MQTT.
Пакет предоставляет простые базовые настройки.
Запуск и автостарт:
Темы – это метки, которые присваиваются опубликованным заметкам. Они расположены в виде иерархии (например, sensors/outside/temp или sensors/outside/humidity). Упорядочивание тем полностью зависит от ваших потребностей.
Откройте ещё одну сессию терминала, в результате у вас должно быть два терминала. Запустите в новом терминале команду mosquitto_sub, чтобы подписаться
Флаг –h указывает имя хоста сервера MQTT, -t – тему. После запуска команды на экране не появится вывода, поскольку команда mosquitto_sub ждет получения сообщений. Вернитесь в первый терминал и опубликуйте сообщение:
Команда mosquitto_pub использует те же опции, что и mosquitto_sub, однако в этот раз используется дополнительный флаг –m (он позволяет ввести текст сообщения). Нажмите Enter, и вы увидите в другом терминале MQTT-сообщение hello world.
Введите во втором терминале CTRL+C, чтобы остановить mosquitto_sub, но не прерывайте подключения к серверу (оно понадобится позже).
Теперь нужно защитить трафик с помощью SSL-сертификата. Используйте Certbot, новый клиент Let’s Encrypt.
Установите Certbot:
Итак, сертификаты получены, и теперь нужно настроить их автоматическое обновление.
Флаг —post-hook «systemctl restart mosquitto» перезапустит Mosquitto, чтобы загрузить новый сертификат (только если сертификат был обновлен).
Теперь настройте пароль для Mosquitto.
Mosquitto предоставляет утилиту mosquitto_passwd для генерирования файла паролей. Эта команда предложит ввести пароль для указанного пользователя и поместит результат в /etc/mosquitto/passwd.
Перезапустите Mosquitto:
Теперь нужно протестировать новые настройки. Попробуйте опубликовать сообщение без пароля:
Вернитесь в первый терминал и опубликуйте сообщение:
Пока что пароли передаются в незашифрованном виде. Чтобы исправить это, нужно настроить Mosquitto для поддержки SSL-шифрования.
Чтобы настроить шифрование, нужно сообщить Mosquitto, где хранятся сертификаты Let’s Encrypt. Откройте конфигурационный файл:
Строка listener 8883 настраивает зашифрованный прослушиватель на порт 8883. Это стандартный порт MQTT + SSL (также называется MQTTS). Следующие три строки, certfile, cafile и keyfile указывают Mosquitto путь к файлам сертификата Let’s Encrypt.
Сохраните и закройте файл.
Прежде чем перезапустить Mosquitto, нужно исправить кое-что в service-файле mosquitto по умолчанию. Откройте его в текстовом редакторе:
Брокер Mosquitto всё равно будет запущен как пользователь mosquitto, но теперь при первом запуске у него будут права root и он сможет загрузить сертификат Let’s Encrypt (по причинам безопасности доступ к ним ограничен). После загрузки сертификатов права пользователя mosquitto будут восстановлены.
Перезапустите systemd.
Создайте ещё одно тестовое сообщение с помощью mosquitto_pub, добавив несколько опций для SSL:
Если настройка выполнена правильно, во втором терминале появится сообщение «hello again». MQTT-сервер полностью готов к работе.
Для взаимодействия с jаvascript в браузерах в протокол MQTT была добавлена поддержка стандартных веб-сокетов.
Чтобы включить эту функцию, нужно добавить ещё один блок listener в настройки Mosqiutto:
Сохраните и закройте файл. Перезапустите Mosquitto:
Чтобы протестировать эту настройку, используйте открытый MQTT-клиент для браузера (например, mqtt-admin). Откройте mqtt-admin в браузере.
На экране появится окно настроек.
Заполните предложенные поля:
Сервер MQTT установлен, защищен паролем и готов к работе. SSL-сертификат Let’s Encrypt шифрует трафик и автоматически обновляется. Теперь у вас есть надёжная платформа для обмена сообщениями.
С протоколом MQTT хорошо работают следующие программы:
			
		
		
		
		
	Mosquitto – это популярный MQTT-сервер (или брокер). Он прост в установке и настройке и активно поддерживается сообществом.
Данное руководство поможет установить Mosquitto, получить для него сертификат SSL от сервиса Let’s Encrypt и настроить безопасное взаимодействие устройств по MQTT.
1: Установка Mosquitto
yum -y install mosquittoПакет предоставляет простые базовые настройки.
Запуск и автостарт:
systemctl start mosquitto
systemctl enable mosquittoТемы – это метки, которые присваиваются опубликованным заметкам. Они расположены в виде иерархии (например, sensors/outside/temp или sensors/outside/humidity). Упорядочивание тем полностью зависит от ваших потребностей.
Откройте ещё одну сессию терминала, в результате у вас должно быть два терминала. Запустите в новом терминале команду mosquitto_sub, чтобы подписаться
mosquitto_sub -h localhost -t testФлаг –h указывает имя хоста сервера MQTT, -t – тему. После запуска команды на экране не появится вывода, поскольку команда mosquitto_sub ждет получения сообщений. Вернитесь в первый терминал и опубликуйте сообщение:
mosquitto_pub -h localhost -t test -m "hello world"Команда mosquitto_pub использует те же опции, что и mosquitto_sub, однако в этот раз используется дополнительный флаг –m (он позволяет ввести текст сообщения). Нажмите Enter, и вы увидите в другом терминале MQTT-сообщение hello world.
Введите во втором терминале CTRL+C, чтобы остановить mosquitto_sub, но не прерывайте подключения к серверу (оно понадобится позже).
Теперь нужно защитить трафик с помощью SSL-сертификата. Используйте Certbot, новый клиент Let’s Encrypt.
2: Установка Certbot
Установите Certbot:
yum -y install certbotcertbot certonly --standalone --standalone-supported-challenges http-01 -d mqtt.example.comИтак, сертификаты получены, и теперь нужно настроить их автоматическое обновление.
3: Автоматическое обновление сертификата
nano /etc/crontab15 3 * * * certbot renew --noninteractive --post-hook "systemctl restart mosquitto"Флаг —post-hook «systemctl restart mosquitto» перезапустит Mosquitto, чтобы загрузить новый сертификат (только если сертификат был обновлен).
4: Настройка пароля MQTT
Теперь настройте пароль для Mosquitto.
Mosquitto предоставляет утилиту mosquitto_passwd для генерирования файла паролей. Эта команда предложит ввести пароль для указанного пользователя и поместит результат в /etc/mosquitto/passwd.
mosquitto_passwd -c /etc/mosquitto/passwd 8hostmv /etc/mosquitto/mosquitto.conf /etc/mosquitto/mosquitto.conf.baknano /etc/mosquitto/mosquitto.confallow_anonymous false
password_file /etc/mosquitto/passwdПерезапустите Mosquitto:
systemctl restart mosquittoТеперь нужно протестировать новые настройки. Попробуйте опубликовать сообщение без пароля:
mosquitto_pub -h localhost -t "test" -m "hello world"Connection Refused: not authorised.
Error: The connection was refused.mosquitto_sub -h localhost -t test -u "8host" -P "password"Вернитесь в первый терминал и опубликуйте сообщение:
mosquitto_pub -h localhost -t "test" -m "hello world" -u "8host" -P "password"Пока что пароли передаются в незашифрованном виде. Чтобы исправить это, нужно настроить Mosquitto для поддержки SSL-шифрования.
5: Настройка поддержки SSL
Чтобы настроить шифрование, нужно сообщить Mosquitto, где хранятся сертификаты Let’s Encrypt. Откройте конфигурационный файл:
nano /etc/mosquitto/mosquitto.conf. . .
listener 1883 localhost
listener 8883
certfile /etc/letsencrypt/live/mqtt.example.com/cert.pem
cafile /etc/letsencrypt/live/mqtt.example.com/chain.pem
keyfile /etc/letsencrypt/live/mqtt.example.com/privkey.pemСтрока listener 8883 настраивает зашифрованный прослушиватель на порт 8883. Это стандартный порт MQTT + SSL (также называется MQTTS). Следующие три строки, certfile, cafile и keyfile указывают Mosquitto путь к файлам сертификата Let’s Encrypt.
Сохраните и закройте файл.
Прежде чем перезапустить Mosquitto, нужно исправить кое-что в service-файле mosquitto по умолчанию. Откройте его в текстовом редакторе:
nano /etc/systemd/system/multi-user.target.wants/mosquitto.serviceБрокер Mosquitto всё равно будет запущен как пользователь mosquitto, но теперь при первом запуске у него будут права root и он сможет загрузить сертификат Let’s Encrypt (по причинам безопасности доступ к ним ограничен). После загрузки сертификатов права пользователя mosquitto будут восстановлены.
Перезапустите systemd.
systemctl daemon-reloadsystemctl restart mosquittoСоздайте ещё одно тестовое сообщение с помощью mosquitto_pub, добавив несколько опций для SSL:
mosquitto_pub -h mqtt.example.com -t test -m "hello again" -p 8883 --cafile /etc/ssl/certs/ca-bundle.crt -u "8host" -P "password"Если настройка выполнена правильно, во втором терминале появится сообщение «hello again». MQTT-сервер полностью готов к работе.
6: Поддержка веб-сокетов (опционально)
Для взаимодействия с jаvascript в браузерах в протокол MQTT была добавлена поддержка стандартных веб-сокетов.
Чтобы включить эту функцию, нужно добавить ещё один блок listener в настройки Mosqiutto:
nano /etc/mosquitto/conf.d/default.conf. . .
listener 8083
protocol websockets
certfile /etc/letsencrypt/live/mqtt.example.com/cert.pem
cafile /etc/letsencrypt/live/mqtt.example.com/chain.pem
keyfile /etc/letsencrypt/live/mqtt.example.com/privkey.pemСохраните и закройте файл. Перезапустите Mosquitto:
systemctl restart mosquittoЧтобы протестировать эту настройку, используйте открытый MQTT-клиент для браузера (например, mqtt-admin). Откройте mqtt-admin в браузере.
На экране появится окно настроек.
Заполните предложенные поля:
- Protocol: wss (что значит websocket secure).
- Host: домен сервера Mosquitto (например, mqtt.example.com).
- Port: 8083.
- User: имя пользователя Mosquitto (в данном случае 8host).
- Password: пароль.
- ClientId: можно оставить по умолчанию (mqtt-admin).
- Topic: test
- Payload: введите любое сообщение
Заключение
Сервер MQTT установлен, защищен паролем и готов к работе. SSL-сертификат Let’s Encrypt шифрует трафик и автоматически обновляется. Теперь у вас есть надёжная платформа для обмена сообщениями.
С протоколом MQTT хорошо работают следующие программы:
- OwnTracks – открытое приложение геолокации, которое можно установить на телефон. Полученные данные можно переносить на карту, на их основе можно создавать предупреждения и настроить запуск компонентов интернета вещей.
- Node-RED – графический веб-интерфейс для настройки интернета вещей. Инструмент позволяет перенаправлять вывод одной ноды на ввод другой, фильтровать данные, применять разные протоколы и базы данных и многое другое.
- ESP8266 – недорогой wifi микроконтроллер с поддержкой MQTT. С его помощью вы можете следить за температурой, атмосферным давлением и т.п.
 
