Saltar al contenido

Cómo Instalación y seguridad en el mosquitto MQTT mensajería Broker en Ubuntu 18.04 [Inicio rápido]

marzo 4, 2020

 

Introducción

MQTT es un protocolo de mensajería de máquina a máquina, diseñada para proporcionar ligera de publicación / suscripción a “Internet de las cosas” dispositivos. Mosquitto es un popular servidor MQTT (o agente , en MQTT jerga) que tiene un gran apoyo de la comunidad y es fácil de instalar y configurar.

En este condensada inicio rápido tutorial vamos a instalar y configurar mosquitto, y el uso de certificados de cifrado SSL de Let para asegurar nuestro tráfico MQTT. Si necesita más cobertura en profundidad de cualquiera de los pasos, consulte los siguientes tutoriales:

  • cómo usar el modo Certbot independiente para recuperar Vamos certificados SSL Cifrar
  • Cómo Instalación y seguridad en el mosquitto MQTT mensajería Broker

Requisitos previos

Antes de comenzar este tutorial, necesitará:

  • una Ubuntu 18.04 servidor con un no root, el usuario sudo habilitado y firewall básico configurado, como se detalla en este 18,04 servidor de configuración tutorial
  • un nombre de dominio Ubuntu puntas en su servidor. En este tutorial se utilice el marcador de posición a lo largo mqtt.example.com
  • puerto 80 debe estar sin usar en su servidor. Si va a instalar mosquitto en una máquina con un servidor web que ocupa este puerto, tendrá que utilizar un método diferente para traer los certificados, como el modo de Webroot Certbot.

Paso 1 – Instalación del software

En primer lugar vamos a instalar un repositorio de software a medida para obtener la última versión de Certbot, cliente Cifrar del Let:

sudo add-apt-repository ppa:certbot/certbot

  • sudo ppa add-apt-repositorio: certbot / certbot

Presione ENTER para aceptar, a continuación, instalar los paquetes de software para mosquitto y certbot:

sudo apt install certbot mosquitto mosquitto-clients

  • sudo apt instalar certbot mosquitto mosquitto-clientes

a continuación vamos a buscar a nuestro certificado SSL.

Paso 2 – Descarga de un certificado SSL

abrir el puerto 80 en el servidor de seguridad:

sudo ufw allow 80

  • sudo permiten UFW 80

A continuación, ejecute Certbot que obtener el certificado. Asegúrese de sustituir el nombre de dominio de su servidor aquí:

sudo certbot certonly --standalone --preferred-challenges http -d mqtt.example.com

  • sudo certbot certonly –standalone –preferred-desafía http -d mqtt.example.com

Se le pedirá que introduzca una dirección de correo electrónico y de acuerdo con los términos de servicio. Después de hacerlo, debería ver un mensaje que indica que el proceso fue exitoso y donde se almacenan sus certificados.

Vamos a configurar mosquitto utilizar estos certificados siguiente.

Paso 3 – Configuración mosquitto

En primer lugar vamos a crear un archivo de contraseña que mosquitto utilizará para autenticar las conexiones. Uso mosquitto_passwd hacer esto, asegurándose de sustituir su propio nombre de usuario preferido:

sudo mosquitto_passwd -c /etc/mosquitto/passwd your-username

  • sudo mosquitto_passwd -c / etc / mosquitto / passwd su nombre de usuario-

Se le pedirá dos veces para una contraseña.

Ahora abrir un nuevo archivo de configuración para mosquitto:

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

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

Esto abrirá un archivo vacío. Pegar en la siguiente:

allow_anonymous false
password_file /etc/mosquitto/passwd

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

Asegúrese de sustituir el nombre de dominio que utilizó en el paso 2 para mqtt.example.com. Guardar y cerrar el archivo cuando haya terminado.

Este archivo hace lo siguiente:

  • Desactiva el anonimato Entradas al
  • Utiliza nuestro archivo de contraseñas para habilitar la autenticación de contraseña
  • Establece un oyente segura en el puerto 1883 para localhost solamente
  • Establece un oyente seguro en el puerto 8883 Conjuntos
  • un oyente a base de WebSocket seguro en el puerto 8083

Reiniciar mosquitto para recoger los cambios de configuración:

sudo systemctl restart mosquitto

  • sudo systemctl reinicio mosquitto

Compruebe para asegurarse de que el servicio se está ejecutando de nuevo: el estado systemctl

sudo systemctl status mosquitto

  • sudo mosquitto

Output● mosquitto.service - LSB: mosquitto MQTT v3.1 message broker
Loaded: loaded (/etc/init.d/mosquitto; generated)
Active: active (running) since Mon 2018-07-16 15:03:42 UTC; 2min 39s ago
Docs: man:systemd-sysv-generator(8)
Process: 6683 ExecStop=/etc/init.d/mosquitto stop (code=exited, status=0/SUCCESS)
Process: 6699 ExecStart=/etc/init.d/mosquitto start (code=exited, status=0/SUCCESS)
Tasks: 1 (limit: 1152)
CGroup: /system.slice/mosquitto.service
└─6705 /usr/sbin/mosquitto -c /etc/mosquitto/mosquitto.conf

El estado debe estar activo (en ejecución). Si no es así, comprobar su archivo de configuración y reiniciar de nuevo. Algunos más información puede estar disponible en el archivo de registro de mosquitto:

sudo tail /var/log/mosquitto/mosquitto.log

  • sudo cola /var/log/mosquitto/mosquitto.log

Si todo está bien, utilizar UFW para permitir que los dos nuevos puertos a través del firewall:

sudo ufw allow 8883
sudo ufw allow 8083

  • sudo permiten UFW 8883
  • sudo permiten UFW 8083

Ahora que mosquitto está configurado, vamos a configurar Certbot para reiniciar mosquitto después de renovar nuestros certificados.

Paso 4 – Configuración Certbot Renovaciones

Certbot se renovará automáticamente los certificados SSL antes de que caduquen, pero es necesario que se les diga que reiniciar el servicio mosquitto después de hacerlo.

Abrir el archivo de configuración de renovación Certbot para su nombre de dominio:

sudo nano /etc/letsencrypt/renewal/mqtt.example.com.conf

  • sudo nano /etc/letsencrypt/renewal/mqtt.example.com.conf

Añadir la opción renew_hook siguiente en la última línea:

renew_hook = systemctl restart mosquitto

Guardar y cerrar el archivo, a continuación, ejecutar una carrera Certbot seco para asegurarse de que la sintaxis es aceptable:

sudo certbot renew --dry-run

  • sudo certbot renovar—dry ejecutar

Si no ve errores, eso es todo. La prueba de dejar que nuestro servidor MQTT siguiente.

Paso 5 – Pruebas mosquitto

Hemos instalado algunos clientes de línea de comandos MQTT en el paso 1. Podemos suscribir el tema prueba en el oyente localhost así:

mosquitto_sub -h localhost -t test -u "your-user" -P "your-password"

  • mosquitto_sub -h localhost -u -t prueba ” el usuario “-P ‘su contraseña’

Y podemos publicar con mosquitto_pub:

mosquitto_pub -h localhost -t test -m "hello world" -u "your-user" -P "your-password"

  • mosquitto_pub -h localhost -t prueba -m ‘hola mundo’ -u ‘el usuario’ -P” tu- contraseña “

Para suscribirse usando el oyente segura en el puerto 8883, haga lo siguiente:

mosquitto_sub -h mqtt.example.com -t test -p 8883 --capath /etc/ssl/certs/ -u "your-username" -P "your-password"

  • prueba mosquitto_sub -h mqtt.example.com -t -p 8883 –capath / etc / ssl / certs / -u” su nombre de usuario” -P ‘su contraseña’

Y así es como se publica en el oyente asegurada:

mosquitto_pub -h mqtt.example.com -t test -m "hello world" -p 8883 --capath /etc/ssl/certs/ -u "your-username" -P "your-password"

  • mosquitto_pub -h mqtt.example.com -t -m prueba de ‘hola mundo’ -p 8883 – -capath / etc / ssl / certs / -u “tu-nombre de usuario” -P “su contraseña”

Tenga en cuenta que estamos usando el nombre de host completo inst ead de localhost. Debido a que nuestro certificado SSL se emite por mqtt.example.com, si se intenta una conexión segura a localhost obtendremos un error que indica el nombre de host no coincide con el nombre de host certificado.

Para probar la funcionalidad WebSocket, usaremos un público, MQTT cliente basado en navegador. Abra la utilidad de cliente Eclipse Opas Javascript en su navegador y rellene la información de conexión de la siguiente manera:

  • anfitrión es el dominio de su servidor mosquitto, mqtt.example.com
  • Port está
  • 8083

  • ClientId se puede dejar a los valores predeterminados valor aleatorio
  • Path se puede dejar en el valor predeterminado de / WS
  • nombre de usuario es su nombre de usuario mosquitto del Paso 3
  • contraseña es la contraseña que eligió en el paso 3

los campos restantes se pueden dejar a sus valores por defecto.

Después de pulsar Conectar , el cliente se conectará a su servidor. Puede publicar y suscribirse mediante el Suscribirse y Publicar paneles de mensaje por debajo del panel de iones Conectar .

Conclusión

Ahora hemos configurado y probado un servidor seguro, protegido por contraseña y cifrado SSL MQTT. Esto puede servir como una plataforma robusta y segura de mensajería para su IO, domótica, u otros proyectos.