MQTT сервер: различия между версиями
Admin (обсуждение | вклад) |
Admin (обсуждение | вклад) |
||
Строка 130: | Строка 130: | ||
=== 3. Создайте файл паролей === | === 3. Создайте файл паролей === | ||
Создайте файл <code>/etc/mosquitto/passwords.txt</code> и добавьте в него пользователей и их зашифрованные пароли: | Создайте файл <code>/etc/mosquitto/passwords.txt</code> и добавьте в него пользователей и их зашифрованные пароли: | ||
< | <pre># Пример: | ||
# user1:supersecretpassword | |||
# user2:anotherpassword</pre> | |||
Используйте утилиту <code>mosquitto_passwd</code> для создания хэшированных паролей: | Используйте утилиту <code>mosquitto_passwd</code> для создания хэшированных паролей: | ||
< | <pre>mosquitto_passwd -c /etc/mosquitto/passwords.txt username</pre> | ||
=== 4. Создайте файл с правами доступа (ACL) === | === 4. Создайте файл с правами доступа (ACL) === |
Версия от 20:49, 14 сентября 2025
- MQTT-брокер без шифрования mosquitto-nossl
- MQTT-брокер с шифрованием mosquitto-ssl
- Настройка аутентификации клиентов
Для настройки MQTT-сервера на роутере с OpenWRT нужно установить пакеты mosquitto-ssl или mosquitto-nossl
и mosquitto-client
через SSH или LuCI. После установки настройте mosquitto
, запустите службу и настройте правила фаервола для доступа из вашей локальной сети, чтобы устройства могли подключаться к брокеру на порту 1883 / 8883 по протоколу TCP.
MQTT-брокер без шифрования mosquitto-nossl
1. Установка MQTT-брокера (mosquitto-nossl
)
- Через SSH:
- Подключитесь к роутеру по SSH.
- Выполните команду для установки пакетов:
opkg update opkg install mosquitto-nossl mosquitto-client
- Через LuCI (веб-интерфейс):
- Перейдите в раздел "System" > "Software".
- Нажмите "Update lists" для обновления списка пакетов.
- Найдите пакеты
mosquitto-nossl
иmosquitto-client
в списке и установите их.
2. Настройка и запуск сервиса mosquitto
Запустите службу.
/etc/init.d/mosquitto enable /etc/init.d/mosquitto start
- Включите автозапуск при загрузке роутера: В LuCI, в разделе "System" > "Startup", убедитесь, что служба
mosquitto
включена и будет запускаться при загрузке.
3. Настройка фаервола (Firewall)
- Создайте правило: В LuCI, перейдите в "Network" > "Firewall".
- Добавьте правило: для порта 1883 (TCP) на вашей локальной сети (lan):
- Action:
accept
(разрешить). - Protocol:
TCP
. - Source zone:
lan
(или зона, куда подключены ваши клиенты). - Destination zone:
Device (input)
(для получения входящих соединений). - Destination port:
1883
.
- Action:
Пример использования:
- 1. Подключите устройства: Ваши устройства (например, с датчиками и ESP32) настройте на подключение к IP-адресу вашего OpenWRT-роутера по порту 1883.
- 2. Публикация данных: Одно устройство публикует данные (например, температуру) в определенную тему (topic) MQTT, например,
/sensors/temperature
. - 3. Подписка на данные: Другое устройство или веб-сервис подписывается на эту тему, и когда данные публикуются, брокер Mosquitto доставляет их подписчикам.
Таким образом, ваш OpenWRT роутер будет выступать в роли центрального MQTT-брокера для вашего умного дома или IoT-проекта, обеспечивая обмен сообщениями между устройствами.
MQTT-брокер с шифрованием mosquitto-ssl
https://www.onetransistor.eu/2019/05/mosquitto-mqtt-tls-certificate.html
Для настройки сертификатов для Mosquitto в OpenWrt на порту 8883, вы должны создать или получить файлы сертификатов (например, certfile
, cafile
, keyfile
), а затем указать их пути в конфигурационном файле Mosquitto (обычно /etc/mosquitto/mosquitto.conf
) с помощью директив listener 8883
, certfile
, cafile
и keyfile
. После этого вам нужно убедиться, что брандмауэр разрешает входящие соединения на порт 8883 и перезапустить службу Mosquitto.
1. Получите или создайте сертификаты
Вам понадобятся:
- Сертификат сервера (
certfile
): Сам SSL-сертификат для вашего брокера Mosquitto. - Ключ сервера (
keyfile
): Приватный ключ, соответствующий сертификату сервера. - Сертификат корневого центра сертификации (
cafile
): Сертификат или список сертификатов доверенных центров сертификации, которые будут использоваться для проверки клиентских сертификатов (если вы их используете для аутентификации клиентов). Если вы не используете клиентскую аутентификацию, этот файл может быть не нужен, но его все равно стоит настроить для проверки подлинности сервера клиентами.
2. Отредактируйте конфигурационный файл Mosquitto
Найдите или создайте конфигурационный файл Mosquitto (обычно /etc/mosquitto/mosquitto.conf
) и добавьте следующие строки:
# Включает прослушиватель на порту 8883 для защищенных соединений MQTTS listener 8883 # Путь к сертификату сервера certfile /etc/mosquitto/certs/server.crt # Путь к приватному ключу сервера keyfile /etc/mosquitto/certs/server.key # Путь к файлу с доверенными корневыми сертификатами (используется для проверки клиентских сертификатов, если они есть) cafile /etc/mosquitto/certs/ca.crt
Важно: Укажите правильные пути к вашим файлам сертификатов и ключей в системе OpenWrt.
3. Откройте порт в брандмауэре
Убедитесь, что порт 8883 открыт в брандмауэре OpenWrt (обычно в /etc/config/firewall
). Добавьте правило, разрешающее входящие TCP-соединения на порт 8883:
Код
config rule
option name 'Allow-MQTT-SSL'
option src 'wan' # или 'lan', в зависимости от того, откуда принимаются соединения
option dest_port '8883'
option proto 'tcp'
option target 'ACCEPT'
4. Перезапустите Mosquitto
После внесения изменений в конфигурацию и брандмауэр перезапустите службу Mosquitto, чтобы они применились:
Код
/etc/init.d/mosquitto restart
Теперь ваш Mosquitto-брокер должен быть настроен на прослушивание SSL-соединений на порту 8883 с использованием ваших сертификатов.
Настройка аутентификации клиентов
Для настройки аутентификации Mosquitto на OpenWrt необходимо установить пакет mosquitto-ssl
и создать файл конфигурации mosquitto.conf
, добавив в него параметры для управления пользователями, их правами и сертификатами TLS/SSL для шифрования трафика. Затем в директории /etc/mosquitto/
создаются файлы с паролями password_file
и списком подписчиков acl_file
, а также настраиваются сертификаты.
1. Установите пакет Mosquitto с поддержкой SSL
Установите пакет mosquitto-ssl
, который содержит поддержку шифрования и аутентификации:
opkg update
opkg install mosquitto-ssl
2. Создайте файл конфигурации Mosquitto
Создайте файл /etc/mosquitto/mosquitto.conf
и добавьте в него следующие основные параметры для аутентификации:
# Порт для MQTT без шифрования (опционально, если не нужен) # port 1883 # Порт для MQTT с шифрованием (SSL/TLS) listener 8883 # Путь к файлу паролей для аутентификации пользователей password_file /etc/mosquitto/passwords.txt # Путь к файлу с правами доступа (список подписчиков) acl_file /etc/mosquitto/acl_file.txt # Путь к директории с сертификатами cafile /etc/mosquitto/certs/ca.crt # Сертификат и закрытый ключ для сервера certfile /etc/mosquitto/certs/server.crt keyfile /etc/mosquitto/certs/server.key # Использовать аутентификацию allow_anonymous false # Включить TLS/SSL tls_version tlsv1.2
3. Создайте файл паролей
Создайте файл /etc/mosquitto/passwords.txt
и добавьте в него пользователей и их зашифрованные пароли:
# Пример: # user1:supersecretpassword # user2:anotherpassword
Используйте утилиту mosquitto_passwd
для создания хэшированных паролей:
mosquitto_passwd -c /etc/mosquitto/passwords.txt username
4. Создайте файл с правами доступа (ACL)
Создайте файл /etc/mosquitto/acl_file.txt
для управления правами доступа пользователей. Формат файла:
# Для пользователя user1 разрешить публикацию на топик sensors/#
user user1
topic write sensors/#
# Для пользователя user2 разрешить подписку на топик logs/#
user user2
topic read logs/#
5. Настройте TLS/SSL
Создайте директорию /etc/mosquitto/certs/
и поместите туда сертификаты: ca.crt: Сертификат корневого центра сертификации (CA), server.crt: Сертификат сервера, server.key: Закрытый ключ сервера.
6. Перезапустите Mosquitto
Перезапустите службу Mosquitto, чтобы применить новые настройки:
/etc/init.d/mosquitto restart
Дополнительные шаги:
- Проверьте конфигурацию: Перед перезапуском убедитесь, что все пути и файлы указаны корректно.
- Тестирование: Используйте клиент MQTT, такой как
mosquitto_pub
илиmosquitto_sub
, для проверки работы аутентификации:
mosquitto_pub -h <your_openwrt_ip> -t "test" -m "Hello" -p 8883 --cafile /etc/mosquitto/certs/ca.crt -u "user1" -P "password"