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