INSTALARE MOSQUITTO BROKER

Instalarea Mosquitto Broker

apt update
apt install -y mosquitto mosquitto-clients
systemctl enable mosquitto.service

Verificare:

mosquitto -v

Securizarea Mosquito

a. Configurarea parolei

Mosquitto generează un fișier cu parolă cu utilitarul mosquitto_passwd. După introducerea comenzii se generează o parolă pentru utilizatorul elvis și se plasează rezultatele în /etc/mosquitto/passwd.

mosquitto_passwd -c /etc/mosquitto/passwd elvis

Se generează un nou fișier de configurare pentru Mosquitto prin care toate conexiunile vor necesita autentificare:

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

Se introduc următoarele rânduri:

listener 1883
allow_anonymous false
password_file /etc/mosquitto/passwd

Înregistrarea allow_anonymous false va dezactiva toate conexiunile neautentificate, iar înregistrarea password_file spune Mosquitto unde să caute informații despre utilizator și parolă. Se salvează şi se iese din fişier (Ctrl+o şo Ctrl+x).
Se reporneşte Mosquitto:

systemctl restart mosquitto

Se poate testa prin publicarea unui mesaj fără parolă:

mosquitto_pub -h localhost -t "test" -m "salut lume"

Mesajul este respins:

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

Se deschide o noua fereastră a terminalului, se subscrie la topicul „test” folosind de data aceasta numele de utilizator și parola:

mosquitto_sub -h localhost -t test -u "elvis" -P "parola"

Terminalul va rămane deschis pentru aşteptarea mesajelor de testare.
Se publică un nou mesaj cu celălalt terminal folosind numele de utilizator și parola:

mosquitto_pub -h localhost -t "test" -m "Hello world" -u "elvis" -P "parola"

Mesajul se „Hello world” se afişează în terminalul deschis anterior. Parolele sunt transmise necriptat.

b. Configurarea SSL

Pentru a activa criptarea SSL se indică locaţia certificatelor Let’s Encrypt în fișierul de configurare generat anterior:

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

Se introduc următoarele linii la finalul fișierului:

. . .
listener 1883 localhost

listener 8883
certfile /etc/letsencrypt/live/silviamarin.ro/cert.pem
cafile /etc/letsencrypt/live/silviamarin.ro/chain.pem
keyfile /etc/letsencrypt/live/silviamarin.ro/privkey.pem

S-au adăugat două blocuri la configurație. Primul bloc localhost listener 1883, impune ca toate conexiunile fără parolă pe portul 1883 să se facă numai pe localhost făcându-l inaccesibil din exterior. Cererile externe pe portul 1883 vor fi oricum blocate de firewall.
listener 8883 configurează criptarea conexiunilor pe portul 8883 (portul standard pentru MQTTS).
Se salvează şi se iese din fişier (Ctrl+o şi Ctrl+x).
Se reporneşte Mosquitto:

systemctl restart mosquitto

Se actualizează firewall-ul pentru a permite conexiunile la portul 8883 şi blocarea portului 1883:

ufw allow 8883
ufw deny 1883

Se poate testa din nou folosind mosquitto_pub, cu opțiunile specifice pentru SSL:

mosquitto_pub -h silviamarin.ro -t test -m "Hello again" -p 8883 --capath /etc/ssl/certs/ -u "elvis" -P "parola"

În terminalul deschis trebuie să apară mesajul „Hello again”

Bridge intre doua brokere:

Ipoteza in care broker-ul 1 (elvismarin.eu) trebuie sa primeasca mesajele de la broker-ul 2 (marinmihai.go.ro):

Se editeaza fisierul de configurare al broker-ului 1:

nano /etc/mosquitto/mosquitto.conf

Se introduc liniile:

connection SERVER
address marinmihai.go.ro:1883
remote_username elvis
remote_password Cocosata123@
#topic # out 0
#topic # in 0
topic # both 0

Se reporneste Mosquitto:

systemctl restart mosquitto