GNU/Linux >> Znalost Linux >  >> Ubuntu

Jak nainstalovat a zabezpečit Mosquitto MQTT Messaging Broker na Ubuntu 20.04

Mosquitto je zprostředkovatel zpráv s otevřeným zdrojovým kódem, který využívá přenos telemetrie ve frontě zpráv (MQTT ) Protokol. Protokol je navržen tak, aby poskytoval nenáročnou komunikaci s internetem věcí (IoT ) zařízení. Běžně se používá pro GPS sledování vozidel, domácí automatizaci, environmentální senzory a rozsáhlý sběr dat.

Protokol MQTT běží nad modelem TCP/IP. Vzhledem k tomu, že je lehký, jeho malá kódová stopa vám umožňuje vytvářet aplikace pro zařízení s minimálními prostředky. Spoléhá na model publikování/odběru. V tomto modelu se klient připojuje k serveru Mosquitto, který funguje jako zprostředkovatel pro zasílání informací dalším klientům přihlášeným k odběru kanálu.

V tomto tutoriálu nainstalujete Mosquitto a nastavíte brokera, aby používal SSL k ochraně komunikace.

Předpoklady

  • Server Ubuntu 20.04 s uživatelem bez oprávnění root s právy sudo.
  • Název domény (myqtt.example.com ) ukázal na váš server.

Krok 1 – Instalace Mosquitto serveru a klienta

Ubuntu se dodává se starší verzí Mosquitto 1.6. Chcete-li nainstalovat nejnovější verzi, přidejte oficiální úložiště Mosquitto.

$ sudo add-apt-repository ppa:mosquitto-dev/mosquitto-ppa

Nainstalujte server Mosquitto a klienta.

$ sudo apt install mosquitto mosquitto-clients

Zkontrolujte stav serveru.

$ sudo systemctl status komára? mosquitto.service - Mosquitto MQTT Broker Načteno:načteno (/lib/systemd/system/mosquitto.service; povoleno; přednastaveno dodavatelem:povoleno) Aktivní:aktivní (běží) od Út 2022-01-25 09:18:40 UTC; Před 25s Dokumenty:muž:mosquitto.conf(5) muž:mosquitto(8) Hlavní PID:119694 (komár) Úkoly:1 (limit:2274) Paměť:1.0M CGroup:/system.slice/mosquitto.service ??119694 /usr/sbin/mosquitto -c /etc/mosquitto/mosquitto.confJan 25 09:18:39  systemd[1]:Spouštění Mosquitto MQTT Broker...Jan 25 09:18:40  systemd[1 ]:Spuštěn Mosquitto MQTT Broker.

Krok 2 – Konfigurace ověřování hesla MQTT

Mosquitto přichází s nástrojem pro generování souboru s hesly s názvem mosquitto_passwd . Mosquitto ukládá všechny konfigurace do /etc/mosquitto adresář.

Spusťte následující příkaz pro vygenerování zašifrovaného souboru s hesly na /etc/mosquitto/passwd pro uživatelské jméno username . Zadejte heslo dle vlastního výběru.

$ sudo mosquitto_passwd -c /etc/mosquitto/passwd uživatelské jménoHeslo:Znovu zadejte heslo:

Dále vytvořte default.conf soubor pod /etc/mosquitto/conf.d adresář a otevřete jej pro úpravy.

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

Vložte následující řádky a zadejte umístění souboru s hesly. Pokud pole posluchače vynecháte, připojí se vždy anonymně, bez ohledu na konfiguraci.

listener 1883password_file /etc/mosquitto/passwd

Uložte soubor stisknutím Ctrl + X a zadáním Y až budete vyzváni.

Restartujte server Mosquitto, abyste provedli změnu.

$ sudo systemctl restart mosquitto

Krok 3 – Test Mosquitto klienta

V závislosti na případu použití můžete klienta Mosquitto použít k odesílání a přijímání zpráv na různá témata. Klient je buď předplatitel, nebo vydavatel.

Dalším krokem je přihlášení k odběru tématu. V protokolu MQTT téma odkazuje na řetězec používaný serverem/brokerem k filtrování zpráv pro připojené klienty. Zde je několik ukázkových témat, která můžete použít v aplikaci pro automatizaci domácnosti.

  • domov/světla/obývací pokoj
  • domov/světla/kuchyň
  • home/lights/master_bedroom
  • domov/světla/dětská_ložnice

Chcete-li se přihlásit k odběru tématu, spusťte mosquitto_sub -t příkaz následovaný tématem. Chcete-li se například přihlásit k odběru home/lights/kitchen topic, spusťte následující příkaz.

$ mosquitto_sub -u uživatelské jméno -P VAŠE_HESLO -t "domov/světla/kuchyň"

Nezavírejte stávající okno. Otevřete nové okno terminálu a publikujte zprávu do home/lights/kitchen topic pomocí následujícího příkazu.

$ mosquitto_pub -u username -P YOUR_PASSWORD -m "ON" -t "home/lights/kuchyň"

Vraťte se do prvního okna terminálu a obdržíte ON užitečné zatížení.

ZAPNUTO

Dále odešlete OFF zpráva na stejné téma z druhého terminálu.

$ mosquitto_pub -u username -P YOUR_PASSWORD -m "OFF" -t "home/lights/kuchyň"

První terminál zobrazí nově publikovanou zprávu.

ZAPNUTO

Pokud se pokusíte odeslat neověřený komentář, selže. Zkuste například následující příkaz.

$ mosquitto_sub -t "home/lights/sitting_room"Chyba připojení:Připojení odmítnuto:není autorizováno.

Nedoporučuje se to, ale musíte přidat následující řádek do /etc/mosquitto/conf.d/default.conf soubor, pokud chcete spouštět příkazy bez ověření.

allow_anonymous true

Krok 4 – Instalace protokolu SSL

Pro instalaci SSL certifikátu pomocí Let's Encrypt si musíme stáhnout nástroj Certbot. K tomu použijeme instalační program balíčku Snapd.

Nainstalujte instalační program Snap.

$ sudo apt install snapd

Ujistěte se, že vaše verze Snapd je aktuální.

$ instalační jádro sudo snap $ jádro obnovení sudo snap

Nainstalujte Certbot.

$ instalace sudo snap --classic certbot

Pomocí následujícího příkazu zajistěte spuštění příkazu Certbot vytvořením symbolického odkazu na /usr/bin adresář.

$ sudo ln -s /snap/bin/certbot /usr/bin/certbot

Vygenerujte certifikát SSL.

$ sudo certbot certonly --standalone --agree-tos --no-eff-email --staple-ocsp --preferred-challenges http -m [e-mail chráněný] -d mqtt.example.com

Výše uvedený příkaz stáhne certifikát do /etc/letsencrypt/live/mqtt.example.com adresář na vašem serveru.

Vytvořte skupinu Diffie-Hellman certifikát.

$ sudo openssl dhparam -out /etc/ssl/certs/dhparam.pem 2048

Vytvořte webový kořenový adresář výzvy pro automatické obnovení Let's Encrypt.

$ sudo mkdir -p /var/lib/letsencrypt

Vytvořte úlohu Cron pro obnovení SSL. Poběží každý den, aby se zkontroloval certifikát a v případě potřeby se obnoví. Nejprve vytvořte soubor /etc/cron.daily/certbot-renew a otevřete jej pro úpravy.

$ sudo nano /etc/cron.daily/certbot-renew

Vložte následující kód.

#!/bin/shcertbot renew --cert-name mqtt.example.com --webroot -w /var/lib/letsencrypt/

Uložte soubor stisknutím Ctrl + X a zadáním Y až budete vyzváni.

Změňte oprávnění k souboru úlohy, aby byl spustitelný.

$ sudo chmod +x /etc/cron.daily/certbot-renew

Krok 5 – Konfigurace protokolu MQTT SSL

Nyní, když máme připravené certifikáty SSL, musíme k nim poskytnout přístup Mosquitto. K tomu potřebujeme zkopírovat certifikáty na místo, odkud k nim Mosquitto může přistupovat.

$ sudo cp /etc/letsencrypt/live/mqtt.example.com/fullchain.pem /etc/mosquitto/certs/server.pem$ sudo cp /etc/letsencrypt/live/mqtt.example.com/privkey. pem /etc/mosquitto/certs/server.key

Změňte vlastnictví /etc/mosquitto/certs do adresáře mosquitto uživatel vytvořený během instalace.

$ sudo chown mosquitto:/etc/mosquitto/certs

Dalším krokem k povolení šifrování SSL pro Mosquitto je zadat umístění certifikátů SSL. Otevřete konfigurační soubor pro úpravy.

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

Vložte následující kód na konec souboru.

. . .listener 8883certfile /etc/mosquitto/certs/server.pemcafile /etc/ssl/certs/ISRG_Root_X1.pemkeyfile /etc/mosquitto/certs/server.keydhparamfile /etc/ssl/certs/dhparam>. 

Uložte soubor stisknutím Ctrl + X a zadáním Y po výzvě. Nezapomeňte na konci souboru zanechat konec nového řádku.

listener 8883 část nastaví šifrovaný posluchač. Je to standardní port pro MQTT + SSL, označovaný jako MQTTS. Další čtyři řádky určují umístění souborů SSL.

Restartujte Mosquitto pro aktualizaci nastavení.

$ sudo systemctl restart mosquitto

Budete muset aktualizovat bránu firewall, abyste umožnili připojení k portu 8883.

$ sudo ufw allow 8883

Dále musíme otestovat funkčnost pomocí mosquitto_pub příkaz.

$ mosquitto_pub -h mqtt.example.com -t "domov/světla/kuchyň" -m "ahoj" -p 8883 --capath /etc/ssl/certs/ -u uživatelské jméno -P VAŠE_HESLO

Jak vidíte, zahrnuli jsme některé další parametry, včetně čísla portu a cesty k certifikátům SSL. Kdykoli budete potřebovat použít SSL, budete muset vždy zadat celý název hostitele, tj. mqtt.example.com místo localhost jinak by došlo k chybě.

Budete také muset přidat --capath směrnice pokaždé. Říká klientovi Mosquitto, aby hledal kořenové certifikáty nainstalované operačním systémem.

Krok 6 – Konfigurace obnovení SSL

Certbot automaticky obnoví váš certifikát před vypršením jeho platnosti. Ale je třeba říct, že má zkopírovat obnovené certifikáty do /etc/mosquitto/certs adresář a restartujte službu Mosquitto.

Uděláme to vytvořením skriptu shellu. Vytvořte soubor mosquitto-copy.sh v /etc/letsencrypt/renewal-hooks/deploy adresář.

$ sudo nano /etc/letsencrypt/renewal-hooks/deploy/mosquitto-copy.sh

Vložte do něj následující kód. Nahraďte hodnotu MY_DOMAIN proměnná s vaší doménou. ${RENEWED_LINEAGE} proměnná ukazuje na /etc/letsencrypt/live/mqtt.example.com adresář během obnovy.

# Nastavení domény, pro kterou bude tento skript spouštěn proMY_DOMAIN=mqtt.example.com# Nastavte adresář, do kterého budou certifikáty zkopírovány.CERTIFICATE_DIR=/etc/mosquitto/certsif [ "${RENEWED_DOMAINS}" ="${ MOJE_DOMÉNA“ ]; potom # Zkopírujte nový certifikát do adresáře Mosquitto cp ${RENEWED_LINEAGE}/fullchain.pem ${CERTIFICATE_DIR}/server.pem cp ${RENEWED_LINEAGE}/privkey.pem ${CERTIFICATE_DIR}/server.key # Nastavit vlastnictví na Mosquittochown:${CERTIFICATE_DIR}/server.pem ${CERTIFICATE_DIR}/server.key # Ujistěte se, že oprávnění jsou omezující chmod 0600 ${CERTIFICATE_DIR}/server.pem ${CERTIFICATE_DIR}/server.key # Řekněte Mosquitto, aby znovu načetl certifikáty a konfiguraci pkill -x komár

Uložte soubor stisknutím Ctrl + X a zadáním Y až budete vyzváni.

Nastavte soubor jako spustitelný.

$ sudo chmod +x /etc/letsencrypt/renewal-hooks/deploy/mosquitto-copy.sh

Tento skript bude automaticky spuštěn při každém úspěšném obnovení certifikátu.

Pokud používáte Mosquitto a webový server, jako je Nginx, musíte dát Certbotovi pokyn, aby server před obnovením zastavil a po dokončení jej znovu spustil. Chcete-li to provést, otevřete soubor etc/letsencrypt/renewal/mqtt.example.com.conf .

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

Přidejte následující řádky na konec souboru. Změňte příkazy podle webového serveru, který používáte.

pre_hook =systemctl stop nginxpost_hook =systemctl start nginx

Uložte soubor stisknutím Ctrl + X a zadáním Y až budete vyzváni.

Pro ověření spusťte zkušební cyklus Certbot.

$ sudo certbot renew --dry-run

Pokud nevidíte žádné chyby, znamená to, že je vše nastaveno.

Krok 7 – Konfigurace Websockets

Mosquitto můžete nakonfigurovat tak, aby používal protokol MQTT z prohlížečů pomocí Javascriptu pomocí funkce Websockets. Chcete-li to povolit, otevřete konfigurační soubor.

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

Vložte následující řádky na konec souboru.

. . .listener 8083protocol websocketscertfile /etc/mosquitto/certs/server.pemcafile /etc/ssl/certs/ISRG_Root_X1.pemkeyfile /etc/mosquitto/certs/server.keydhparamfile /etc/sdsl/certs>sdhm. 

Uložte soubor stisknutím Ctrl + X a zadáním Y až budete vyzváni.

Pokud si všimnete, je to stejný blok jako ten, který jsme použili pro povolení SSL, s výjimkou pole čísla portu a protokolu. 8083 je nejběžnější port používaný MQTT pro komunikaci pomocí WebSockets.

Restartujte službu Mosquitto.

$ sudo systemctl restart mosquitto

Otevřete port 8083.

$ sudo ufw allow 8083

K testování funkčnosti WebSockets musíme použít klienta MQTT založeného na prohlížeči. K dispozici je mnoho klientů, ale pro náš účel použijeme klienta HiveMQ Websocket. Spusťte klienta ve svém prohlížeči a uvidíte následující.

Jak je znázorněno na obrázku výše, vyplňte pole podle obrázku.

  • Hostitelem by měla být doména vašeho serveru Mosquitto, mqtt.example.com.
  • Port by měl být 8083.
  • Pole ClientID lze ponechat tak, jak je.
  • Uživatelské jméno by mělo být vaše uživatelské jméno Mosquitto.
  • Heslo by mělo být heslo, které jste vytvořili výše.
  • Zkontrolujte SSL krabice.

Stiskněte tlačítko Připojit a klient HiveMQ bude připojen k vašemu serveru Mosquitto.

Po připojení zadejte home/lights/kitchen jako téma zadejte libovolnou zprávu a stiskněte Publikovat .

Zpráva se zobrazí ve vašem mosquitto_sub okno terminálu potvrzující úspěšné připojení.

To ukazuje, že implementace Websockets je úspěšná.

Závěr

Tím je naše nastavení zabezpečeného, ​​heslem chráněného a SSL šifrovaného serveru MQTT na počítači založeném na Ubuntu 20.04 uzavřeno. Pokud máte nějaké dotazy, napište je do komentářů níže.


Ubuntu
  1. Jak nainstalovat a zabezpečit phpMyAdmin na Ubuntu

  2. Jak nainstalovat a zabezpečit Redis na Ubuntu 20.04

  3. Jak nainstalovat a zabezpečit Redis na Ubuntu 18.04

  1. Jak nainstalovat Node.js &NPM na Ubuntu 18.04 a 20.04

  2. Jak nainstalovat PHP 7.4 a 8.0 na Ubuntu 18.04 nebo 20.04

  3. Jak nainstalovat Anaconda na Ubuntu 18.04 a 20.04

  1. Jak nainstalovat a zabezpečit phpMyAdmin pomocí Apache na Ubuntu 18.04

  2. Jak nainstalovat a zabezpečit Redis na Ubuntu 18.04 LTS

  3. Jak nainstalovat a zabezpečit phpMyAdmin na Ubuntu 18.04 LTS