Mosquito ubuntu что это

Обновлено: 03.07.2024

Примечание для «Чайников»:

Для выполнения некоторых команд в терминале могут понадобятся права администратора. Для этого просто наберите перед командой sudo :

Для обновления вашей системы (обновление пакетов), выполните:

apt-get update && apt-get upgrade -y

Устанавливаем MQTT брокера и клиента Mosquitto:

apt install mosquitto mosquitto-clients -y

Настроим для Mosquitto подписку по логину и паролю (пример для логина «huny»).

mosquitto_passwd -c /etc/mosquitto/passwd huny

Далее, по запросу, нужно будет ввести два раза ваш пароль для Mosquitto.

Связка логин-пароль будет храниться по следующему пути — /etc/mosquitto/passwd

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

Закроем файл, нажав CTRL + X

Запретим анонимные подключения к Mosquitto. Открываем файл default.conf:

Файл должен быть пустой, вставляем туда этот текст:

Сохраняем и закрываем файл, нажав CTRL + X, Y, а затем ENTER.

Перезагружаем Mosquitto чтобы применить изменения:

systemctl restart mosquitto

На этом этапе MQTT брокер Mosquitto у нас успешно запущен и защищён паролем.

UPD1: Добавление / удаление пользователей в MQTT брокер (Mosquitto)

Для примера добавим пользователя с логином huny2 и паролем parol2:

mosquitto_passwd -b /etc/mosquitto/passwd huny2 parol2

Проверяем что добавился, открыв файл паролей.

Закрываем файл, нажав CTRL + X

Перезагружаем Mosquitto чтобы применить изменения:

systemctl restart mosquitto

Удалить пользователя huny2:

mosquitto_passwd -D /etc/mosquitto/passwd huny2

Проверяем, что действвительно удалён, открыв файл паролей:

Закрываем файл, нажав CTRL + X

Перезагружаем Mosquitto чтобы применить изменения:

systemctl restart mosquitto

UPD2: Изменим порт MQTT брокера Mosquitto c 1883 на 8883 (пример), а 1883 привяжем к localhost (недоступен извне).

Открываем файл default.conf:

Добавляем туда следующее:

listener 1883 localhost

Сохраняем и закрываем файл, нажав CTRL + X, Y, а затем ENTER.

Перезагружаем Mosquitto чтобы применить изменения:

systemctl restart mosquitto

UPD3: Управление состоянием Mosquitto:

Посмотреть текущий статус:

systemctl status mosquitto

systemctl status mosquitto.service

Изменение статуса текущего сеанса:

systemctl start mosquitto

systemctl stop mosquitto

systemctl start mosquitto.service

systemctl stop mosquitto.service

Для изменения состояния при запуске (не влияет на текущее состояние):

systemctl enable mosquitto

systemctl disable mosquitto

systemctl enable mosquitto.service

systemctl disable mosquitto.service

Данный MQTT брокер можно установить, например на Ubuntu 20.04 на бесплатном VPS сервере от Oracle:

Mosquitto – это популярный MQTT-сервер (или брокер). Он прост в установке и настройке и активно поддерживается сообществом.

Требования

1: Установка Mosquitto

В репозитории Ubuntu 16.04 можно найти сравнительно недавнюю версию Mosquitto. Чтобы установить Mosquitto, введите:

sudo apt-get install mosquitto mosquitto-clients

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

Темы – это метки, которые присваиваются опубликованным заметкам. Они расположены в виде иерархии (например, sensors/outside/temp или sensors/outside/humidity). Упорядочивание тем полностью зависит от ваших потребностей.

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

mosquitto_sub -h localhost -t test

mosquitto_pub -h localhost -t test -m "hello world"

Введите во втором терминале CTRL+C, чтобы остановить mosquitto_sub, но не прерывайте подключения к серверу (оно понадобится позже).

2: Установка Certbot

Вместо него мы используем официальный клиент из PPA Ubuntu, где можно найти более новые версии программ.

sudo add-apt-repository ppa:certbot/certbot

Нажмите Enter, чтобы продолжить. После этого обновите индекс пакетов.

sudo apt-get update

sudo apt-get install certbot

3: Запуск Certbot

4: Автоматическое обновление сертификата

Чтобы ежедневно запускать команду для проверки и обновления сертификата, используйте cron. Откройте crontab в редакторе:

Выберите текстовый редактор. На экране появится crontab по умолчанию. Вставьте следующую строку в конец файла:

. . .
15 3 * * * certbot renew --noninteractive --post-hook "systemctl restart mosquitto"

Часть строки «15 3 * * *» значит, что команду нужно запускать в 3:15 утра каждый день. Команда renew будет проверять все существующие сертификаты и обновлять их по мере необходимости (если до окончания срока действия остается меньше 30 дней). Флаг –noninteractive запускает процесс в немом режиме.

5: Настройка пароля MQTT

Теперь настройте пароль для Mosquitto.

Mosquitto предоставляет утилиту mosquitto_passwd для генерирования файла паролей. Эта команда предложит ввести пароль для указанного пользователя и поместит результат в /etc/mosquitto/passwd.

sudo mosquitto_passwd -c /etc/mosquitto/passwd 8host

Откройте конфигурационный файл Mosquitto и добавьте информацию о новом файле паролей:

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

На экране появится пустой файл. Введите:

allow_anonymous false
password_file /etc/mosquitto/passwd

Строка allow_anonymous false блокирует доступ анонимных пользователей. Строка password_file указывает путь к файлу паролей. Сохраните и закройте файл.

sudo systemctl restart mosquitto

mosquitto_pub -h localhost -t "test" -m "hello world"

Connection Refused: not authorised.
Error: The connection was refused.

Перейдите во второй терминал и подпишитесь на тему test.

mosquitto_sub -h localhost -t test -u "8host" -P "password"

mosquitto_pub -h localhost -t "test" -m "hello world" -u "8host" -P "password"

6: Настройка поддержки SSL

Процесс mosquitto запускается не через root, а через пользователя mosquitto из соображений безопасности. Но для чтения сертификатов SSL нужны права root.

Чтобы не изменять владельца файлов, добавьте сертификаты в группу mosquitto:

Команда chgrp -R обновит группу указанного каталога и всех файлов в нём. Однако Certbot, обновляя сертификаты, будет создавать новые файлы, которые будут принадлежать root, а при перезапуске Mosquitto будет возникать ошибка.

Убедитесь, что изменения вступили в силу:

В каталоге должен быть установлен бит SGID.

drwxr-sr-x 2 root mosquitto 4096 Oct 5 17:48 .

В привилегиях (последовательности drwxr-sr-x) есть символ s. Каталог должен принадлежать группе mosquitto.

Попробуйте также запросить права группы mosquitto на сертификаты.

-rw-r--r-- 1 root mosquitto 1809 Oct 1 16:42 cert1.pem

Если все установлено верно, можно обновить конфигурации Mosquitto. Откройте конфигурационный файл:

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

Добавьте в него:

Теперь файл содержит два отдельных блока listener. Первый, listener 1883 localhost, обновляет прослушиватель MQTT
на порте 1883 (это стандартный нешифрованный порт MQTT). Часть строки localhost привязывает этот порт к интерфейсу локального хоста, потому к нему не будет внешнего доступа (в любом случае, внешние запросы заблокировал бы брандмауэр).

Сохраните и закройте файл. Перезапустите Mosquitto:

sudo systemctl restart mosquitto

Откройте порт 8883 в брандмауэре.

sudo ufw allow 8883
Rule added

mosquitto_pub -h mqtt.example.com -t test -m "hello again" -p 8883 --capath /etc/ssl/certs/ -u "8host" -P "password"

7: Поддержка веб-сокетов (опционально)

Для взаимодействия с JavaScript в браузерах в протокол MQTT была добавлена поддержка стандартных веб-сокетов.

Чтобы включить эту функцию, нужно добавить ещё один блок listener в настройки Mosqiutto:

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

Добавьте в конец файла:

Этот блок почти такой же, как предыдущие, он отличается толлько номером порта и строкой protocol websockets. У MQTT нет стандартного порта для поддержки веб-сокетов, обычно для этого используется 8083.

Сохраните и закройте файл. Перезапустите сервер:

sudo systemctl restart mosquitto

Откройте этот порт в брандмауэре:

sudo ufw allow 8083

Чтобы протестировать эту настройку, используйте открытый MQTT-клиент для браузера (например, mqtt-admin). Откройте mqtt-admin в браузере.

На экране появится окно настроек.

Заполните предложенные поля:

  • Protocol: wss (что значит websocket secure).
  • Host: домен сервера Mosquitto.
  • Port: 8083.
  • User: имя пользователя Mosquitto (в данном случае 8host).
  • Password: пароль.
  • ClientId: можно оставить по умолчанию (mqtt-admin).

Нажмите Save Settings, после чего mqtt-admin подключится к серверу Mosquitto. В следующем окне укажите:

Заключение

Mosquitto – это популярный MQTT-сервер (на языке MQTT это называется брокер). Его несложно установить и настроить, а еще он активно поддерживается сообществом.

Этот мануал поможет установить Mosquitto, настроить поддержку SSL и безопасное взаимодействие устройств по протоколу MQTT.

Требования

1: Установка Mosquitto

В репозитории Debian 10 можно найти относительно новую версию Mosquitto.

Для начала обновите индекс пакетов:

sudo apt update

Чтобы установить Mosquitto, введите:

sudo apt install mosquitto mosquitto-clients

По умолчанию в Debian сервис Mosquitto запускается сразу после установки. Давайте проверим стандартные настройки программы. Для этого нужно подписаться на тему с помощью одного из клиентов Mosquitto.

Откройте новую сессию терминала, в результате у вас должно быть два терминала. Запустите в новом терминале команду mosquitto_sub, чтобы подписаться на тему:

mosquitto_sub -h localhost -t test

mosquitto_pub -h localhost -t test -m "hello world"

Введите во втором терминале CTRL+C, чтобы остановить mosquitto_sub, но не прерывайте подключения (оно понадобится нам позже).

Теперь нужно настроить парольную аутентификацию.

2: Настройка пароля MQTT

Mosquitto предоставляет утилиту mosquitto_passwd для создания файла паролей. Эта команда предложит ввести пароль для указанного пользователя и поместит его в файл /etc/mosquitto/passwd.

sudo mosquitto_passwd -c /etc/mosquitto/passwd 8host

Откройте конфигурации Mosquitto и добавьте в них информацию о новом файле:

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

На экране появится пустой файл. Введите в него:

allow_anonymous false
password_file /etc/mosquitto/passwd

В конце файла нужно обязательно оставить пустую строку.

Строка allow_anonymous false блокирует анонимных пользователей. Строка password_file задает путь к файлу паролей. Сохраните и закройте файл.

Теперь нужно перезапустить Mosquitto и проверить новые настройки:

sudo 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"

3: Настройка поддержки SSL

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

Добавьте в конец файла такие строки, оставив две строки, что мы добавили ранее.

Теперь файл содержит два отдельных блока listener. Первый, listener 1883 localhost, обновляет прослушиватель MQTT по порту 1883 (стандартный нешифрованный порт MQTT). Часть localhost привязывает этот порт к интерфейсу локального хоста, а значит, к нему не будет внешнего доступа (так или иначе, внешние запросы заблокировал бы брандмауэр).

Сохраните и закройте файл. Перезапустите Mosquitto:

sudo systemctl restart mosquitto

Откройте порт 8883 в брандмауэре.

sudo ufw allow 8883
Rule added
Rule added (v6)

mosquitto_pub -h mqtt.example.com -t test -m "hello again" -p 8883 --capath /etc/ssl/certs/ -u "8host" -P "password"

Если вы хотите расширить функции MQTT поддержкой веб-сокетов, следуйте инструкциям раздела 4.

4: Поддержка веб-сокетов (опционально)

Для взаимодействия с JavaScript в браузерах протокол MQTT предоставляет поддержку стандартных веб-сокетов. Если эта функция вам не нужна, можете просто не включать ее.

Чтобы включить ее, нужно добавить новый блок listener в настройки Mosqiutto:

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

Добавьте в конец файла:

Этот блок почти такой же, как предыдущие блоки, но в нем указан другой номер порта и есть строка protocol websockets. У MQTT нет стандартного порта для поддержки веб-сокетов, но обычно для этого используется 8083.

Сохраните и закройте файл. Перезапустите сервер:

sudo systemctl restart mosquitto

Откройте порт 8083 в брандмауэре:

sudo ufw allow 8083

Чтобы протестировать новые настройки, используйте открытый MQTT-клиент для браузера (например, Eclipse Paho JavaScript Client). Откройте клиент Paho JavaScript Client в браузере.

На экране появится окно настроек.

Заполните эту форму:

В остальных полях можно оставить значения по умолчанию.

Заключение

С протоколом MQTT хорошо работают следующие программы:

    – открытое приложение для отслеживания геолокации, которое можно установить на телефон. Полученные данные можно переносить на карту, а на их основе создавать предупреждения и настраивать запуск компонентов интернета вещей. – браузерный графический интерфейс для настройки интернета вещей. Инструмент позволяет перенаправлять вывод нод на ввод других нод в сети, фильтровать данные, применять разные протоколы и базы данных и многое другое. – недорогой wifi микроконтроллер с поддержкой MQTT. С его помощью вы можете следить за температурой, атмосферным давлением и т.п.

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

Решил я тут поизучать MQTT и ESP, но вот столкнулся с такой штукой при запуске mosquitto на win10. Стартует он отлично, но не пингуется в локалке. Пишет Starting in local only mode и ничего не могу с этим поделать. Тут много продвинутых, может подскажет кто, гугл уже выкурил. Но не понимаю че нужно дописать в конфиге, чтобы и с других компов подключиться тем же MQTT fx

Локал моде означает внутренний лупбэк компа. Не цепляется оно на интерфейсы и наружу не смотрит. Пили конфиги.

Посмотрел сейчас на своем армбиане - вообще пустой дефолтный конфиг. И работает, по всей локалке видно. А ты как проверяешь, с помощью mosquitto_sub?

Первая ссылка в гугле


Как стать грамотным разработчиком встраиваемых систем?

Доброго времени суток, в начале этого года я написал пост как жить чуть больше чем на МРОТ и тут же настал коронавирус. Через некоторое время меня сократили, и чет стало вообще грустно. Не знал куда податься, хотел попробовать себя в web разработчиках, но обстоятельства сложились так, что я стал делать несложные проекты на ардуино, а теперь и на esp32, благо я понимаю в схемотехнике и моделировании, но был полным нулем в программировании (да и сейчас не далеко ушел). Но мне понравилось это направление и в будущем хочу стать серьезным разработчиком, не только на атмегах, esp и stm, но вообще на любых микроконтроллерных системах. И вот тут я опять столкнулся с отсутствием информации, в универе нас этому не учили и я понимаю, что могу не осознавать, что какие то вещи надо учить уже сейчас, например FreeRTOS, работа с аппаратной частью микроконтроллеров, взаимодействие программно с ними, высшая математика вдруг нужна оказалась и углубиться в нее надо. Просто поверхностное знание C++ и Phyton не позволит что то серьезное создавать. Сам С++ это тоже не просто синтаксис, я знаю что в нем есть очень мощные инструменты, которыми те же ардуинщики не пользуются. Время у меня есть, минимум год, есть база, есть желание и заказы в этом направлении, очень простые, но на хлеб хватит. Хочу делать серьезные и крутые штуки. Может подскажите подходящие книги, может зарубежные каналы или даже курсы, если надо летом в Москву поеду. А вот поступать 3й раз в вуз точно не хочу, это бесполезно.

Читайте также: