Как установить mqtt сервер mosquito на windows

Сервер MQTT в вашем кармане: Mosquitto на Orange Pi Zero

Мне больше всего не нравится первая буква слова «Интернет вещей» — Интернет. Не вижу причин, по которым при построении «умного дома» внутренняя связь должна зависеть от внешнего интернет-сервиса — или интернет-соединения вообще. Основой для связи (и не только) компонентов IoT является протокол MQTT. Поэтому я решил создать свой собственный MQTT-сервер на базе Orange Pi Zero, миниатюрного компьютера ARM.

Что такое Orange Pi Zero

Я предполагаю, что вы знакомы с Raspberry Pi, небольшим и дешевым компьютером с процессором ARM, который может работать под управлением Linux или других операционных систем. Серия Orange Pi чем-то похожа. Я буду использовать модель Orange Pi Zero, самую маленькую и дешевую модель, она стоит около десяти долларов.

Его аппаратные характеристики просто захватывают дух: процессор Allwinner H2 с четырьмя ядрами ARM Cortex-A7, 256 или 512 МБ DDR3 SDRAM, один порт USB 2.0, один порт MicroUSB для питания, RJ45 Ethernet 10/100M, слот для карты MicroSD и Wi-Fi . В отличие от старших моделей (и например Raspberry Pi), у него нет разъемов для вывода звука или графики. Они доступны на специальной плате расширения, но в целом этот компьютер больше для безголовых приложений.

Он у меня тут уже несколько лет, я даже коробку для него спроектировал, попробовал, но так и не понял, что с ним делать. Я думаю, что это будет идеально для сервера MQTT.

Что такое MQTT?

MQTT (MQ Telemetry Transport) — это протокол связи, который используется в сетях IoT и не только там. Исторически он был создан в 1999 году для нужд оборудования для мониторинга нефтепроводов в условиях пустыни. Он может обрабатывать медленное соединение с высокой задержкой (например, спутник), это очень простой протокол с минимальными накладными расходами. Вот почему он популярен для Интернета вещей.

Существует много MQTTброкеры (серверы) и клиенты. Я буду использовать Mosquitto — простой кроссплатформенный брокер с открытым исходным кодом.

Основные настройки Armbian

Действия в этом разделе не имеют ничего общего с Mosquitt или MQTT. Это общая процедура настройки и базовой безопасности практически любого сервера на Linux.

Подготовка SD-карты

Я буду использовать Armbian в качестве операционной системы, которая является ARM-клоном Debian. Он поддерживается, и платы Orange Pi официально поддерживаются. Поэтому я скачал текущий образ Armbian Buster с веб-сайта Armbian.

Изображение должно быть загружено на карту MicroSD размером не менее 2 ГБ. Я использую для этого утилиту Rufus, но для работы с образами дисков можно использовать что угодно, популярные Win32DiskImager или кроссплатформенный balenaEtcher.

Первая загрузка и вход в систему

Первая загрузка занимает некоторое время, потому что она увеличивает разделы, генерирует ключи SSH и другие вещи, так что наберитесь терпения. Узнайте, какой IP-адрес ваш DHCP-сервер назначил клиенту. Я напрямую настроил для него резервирование DHCP и направил его на DNS-имя, скажем, mqtt.example.com.

Подключиться с помощью команды SSH, включенной в текущую версию Windows 10, или с помощью другого клиента SSH:

Читайте также:  Как включить голосовое приветствие на windows 10

При первом подключении вам будет предложено подтвердить ключ SSH сервера. Если в будущем она изменится, вас предупредят — обычно это предвещает что-то зловещее.

Пароль root по умолчанию — 1234, и вы должны изменить его после первого входа в систему:

В то же время вам будет предложено создать обычного пользователя без прав администратора, что не обязательно, но является хорошей идеей, поэтому я настоятельно рекомендую это сделать:

Завершите сеанс SSH с помощью команды выхода и снова войдите в систему, на этот раз как вновь созданный пользователь (здесь Altair):

Ключевые настройки входа

Вход с паролями неудобен и небезопасен. Гораздо лучше сгенерировать ключи SSH и войти с ними. Если у вас его еще нет, создайте его (на клиенте, а не на сервере) с помощью команды ssh-keygen. Найдите сгенерированные ключи в %USERPROFILE%\.ssh и немедленно создайте их резервную копию.

На сервере используйте следующие команды для создания файла

Скопируйте содержимое файла %USERPROFILE%\.ssh\id_rsa.pub в файл. Это должно выглядеть примерно так:

Нажмите Ctrl+S , чтобы сохранить файл, и нажмите Ctrl+X , чтобы выйти из редактора Nano. Используйте следующие команды, чтобы установить права доступа к этим файлам, чтобы только вы могли получить к ним доступ:

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

Внимание! Не забудьте пароль для входа! Вы сможете использовать его для входа с консоли (не по сети), и он понадобится для команды sudo .

Базовая конфигурация

Запустите утилиту конфигурации Armbian Config с помощью следующей команды:

В Системе SSH отключите логин root и вход с паролем, включите только вход с ключом:

Вы можете установить часовой пояс в разделе Личные . По умолчанию используется UTC , возможно, вам нужно Европа/Прага . OPi Zero не имеет резервной копии часов реального времени и получает время через NTP из сети.

Вероятно, вы также захотите изменить имя сервера (имя хоста) с OrangePizero по умолчанию.

Обновите систему с помощью следующей команды:

Ожидайте, что это займет некоторое время в зависимости от скорости сети, количества обновлений и скорости SD-карты.

Настройки брандмауэра

С точки зрения безопасности рекомендуется настроить брандмауэр так, чтобы он отвергал все подключения извне, за исключением явно разрешенных. Для этого мы будем использовать инструмент UFW (несложный брандмауэр).

Это не стандартная часть установки, поэтому сначала нам нужно установить ее:

Затем включите OpenSSH и активируйте брандмауэр. Поколения администраторов могли бы говорить о том, как неразумно настраивать правила брандмауэра по сети, но у нас нет выбора. Поэтому на вопрос, действительно ли вы хотите включить UFW, отвечайте y :

Комар

В этом разделе мы установим и защитим брокера MQTT Mosquitto.

Установка и тестирование функциональности

Установите Mosquitto с помощью следующей команды:

Подпишитесь на тестовую тему с помощью следующей команды. Команда, кажется, ничего не делает и остается «висящей». Он ожидает входящих сообщений.

Откройте второе SSH-соединение с тем же сервером и введите в нем следующую команду:

Сообщение отправлено Привет, мир! появится в первом окне. Там вы можете выйти из mosquitto_sub, нажав Ctrl+C и закрыть второе окно.

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

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

Читайте также:  Как вернуть компьютер к заводским настройкам windows 10 леново

Используйте следующие команды для создания файла конфигурации с пользователями и создайте пользователя-разработчика с паролем pass.word123 :

Далее создайте файл /etc/mosquitto/conf.d/default.conf и откройте его в редакторе Nano:

В нем введите следующее содержимое для отключения анонимных подключений и укажите, из какого файла следует брать пользователей и пароли:

Нажмите Ctrl+S , чтобы сохранить файл, и нажмите Ctrl+X , чтобы выйти из редактора Nano. Перезапустите с помощью следующей командыКомар:

Если теперь вы хотите читать или отправлять сообщения, вы должны добавить параметры -u и -P (с учетом регистра) к командам mosquitto_sub и mosquitto_pub, чтобы указать имя пользователя и пароль, например:

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

Получение сертификата TLS от Let’s Encrypt

Аутентификация с использованием запроса HTTP

Если бы порт 80 нашего сервера MQTT был напрямую доступен извне, я бы использовал инструмент CertBot от Electronic Frontier Foundation:

После этого я бы еще поставил cron (диспетчер задач по расписанию), чтобы он каждый день в пять утра обновлял сертификаты, для которых он нужен. Я бы использовал sudo crontab -e, чтобы начать редактирование списка задач и добавить следующие строки в конец файла:

Аутентификация с использованием запроса DNS

Если вызов HTTP не может быть использован, необходимо выполнить проверку с использованием DNS. Это может быть простым или сложным, в зависимости от того, какие DNS-серверы вы используете. У меня есть свои домены с CloudFlare, API которого поддерживается в CertBot. К сожалению, CertBot требует слишком высоких разрешений для CloudFlare, потому что он работает с их старым API. Вот почему я использую другой клиент под названием Lego.

Сначала вам нужно получить токены API от Cloudflare. Нам понадобится два: один для перечисления зон, а другой для работы с DNS-записями в определенной зоне.

Вы можете создавать токены в своем профиле в разделе API Tokens. Начните с нажатия кнопки Создать токен :

.

Назовите токен MQTT-ListZones и установите права Zone/Zone/Read для всех зон и нажмите Перейти к сводке :

Нажмите Создать токен и обратите внимание на сгенерированный токен — это первый и последний раз, когда вы его видите. Таким же образом сгенерируйте токен с именем MQTT-EditDNS и установите ему права Zone/DNS/Edit для конкретной зоны (домена), которой вы хотите управлять:

К сожалению, в репозитории есть историческая версия, поэтому необходимо установить текущий бинарный файл вручную. На странице релизов найдите адрес дистрибутива текущего релиза для архитектуры linux_armv7. На момент написания этой статьи это версия 3.3.0. Затем измените приведенные ниже команды соответствующим образом, чтобы загрузить и установить Lego по пути /opt/lego/lego :

Вы запрашиваете выдачу сертификата с помощью следующей команды:

Измените его, указав свои значения:

  • Токен MQTT-ListZones используется вместо xxxxx.
  • Токен MQTT-EditDNS вместо yyyyy.
  • Вместо mqtt.example.com указывается имя вашего сервера.
  • Вместо [email protected] указан ваш адрес электронной почты.

Сгенерированный закрытый ключ и открытый ключ (сертификат) будут храниться в /etc/lego/certificates

Сертификат действителен в течение 90 дней и должен регулярно обновляться. Это можно сделать с помощью cron. Запустите sudo crontab -e, чтобы отредактировать его файл конфигурации и добавить в конец следующую строку:

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

Читайте также:  Как активировать скрытые папки windows 10

Нажмите Ctrl+S , чтобы сохранить файл, и нажмите Ctrl+X , чтобы выйти из редактора Nano.

Настройка конечной точки TLS

У нас есть сертификаты, теперь нам просто нужно организовать их использование Mosquitto. Отредактируйте его файл конфигурации с помощью следующей команды:

Добавьте следующие строки в конец файла на случай, если выони использовали CertBot и вызов HTTP:

Если вы использовали Lego и вызов DNS, добавьте следующие строки:

Конечно, скорректируйте путь к файлу в соответствии с именем вашего сервера. Если вы хотите запустить только зашифрованный интерфейс, вы можете опустить часть прослушивателя 1883 .

Чтобы изменения вступили в силу, необходимо перезапустить Mosquitto с помощью следующей команды:

Чтобы получить доступ к конечной точке извне, необходимо включить порт 8883 на брандмауэре с помощью следующей команды:

Тестирование функциональности TLS

Осталось только проверить, все ли работает успешно. Вы можете сделать это с любого компьютера, на котором установлен клиент Mosquitto (включая сам сервер). В команды mosquitto_pub и mosquitto_sub необходимо добавить только аргументы -p (номер порта, 8883) и —capath (путь к списку доверенных сертификатов, обычно —/etc/ssl/certs).

Команда для подписки:

Команда для публикации:

Вывод

Теперь у вас есть работающий сервер MQTT, работающий на десятидолларовом компьютере, защищенный сертификатами TLS, именами пользователей и паролями.

Разве ты не знаешь, для чего нужна такая штука? Не знаете, как лучше выставить права, чтобы всем было не все? Подробнее о создании «Лань вещей» я расскажу в нескольких последовательных лекциях на мероприятии TechFurMeet 2020, которое пройдет в начале февраля. Что это за событие, я писал об этом год назад.

Готовится следующий год TechFurMeet, но программа уже достаточно насыщена. Мои темы будут:

  • Odroid GO — платформа с открытым исходным кодом для портативной игровой консоли в стиле ретро и как создавать для нее собственные программы.
  • Слишком упорядоченный мир, или Вселенная не играет в кости — рассказ о генерации случайных чисел с возможностью построения собственных электронных костей.
  • .NET Core для всех — введение вПлатформа .NET Core для начинающих.
  • Цифровые вывески и киоски с использованием Raspberry Pi . Я планирую установить на сайте киоск для селфи с очень интересными аксессуарами.
  • OpenSCAD 2019.05: Что нового? — Долгожданная новая версия OpenSCAD принесла ряд новшеств, о которых пойдет речь. Все участники TFM получат доступ к нашей системе электронного обучения для обучения 3D-моделированию в OpenSCAD.
  • Интранет вещей . Что меня больше всего беспокоит в IoT, так это Интернет. Как сделать умный дом, не выходя из безопасности внутренней сети?

Традиционным гостем будет Штепан Бечински , который расскажет о новом принтере Prusa Mini и о том, как следить за тем, чтобы забаненный вами человек не перемещался с помощью платформы BigClown IoT. Другие пункты программы находятся в стадии переговоров.

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

Что-то не так со статьей? Хотите что-нибудь добавить?

Здесь вы не найдете комментариев, но если в статье есть ошибка или вы хотите добавить к ней что-то существенное, вы можете открыть новый выпуск на GitHub или предложить изменить текст и отправить мне пулл запрос.

Там же вы найдете историю всех версий статьи, если в нее были внесены какие-либо изменения или модификации.

Передайте:

  • Авторское право © Михал Альтаир Валашек, 2003-2022
  • При поддержке XML4web на страницах GitHub
  • ​ RSS: все
Поделиться с друзьями
ОС советы