در این مقاله قصد داریم تا با نحوهی نصبMosquitto MQTT بر روی Ubuntu 18.04 (راهاندازی سریع) آشنا شویم. اما پیش از شروع با مفاهیم و پیشنیازهای نصب آشنا خواهیم شد.
MQTT یک پروتکل پیامرسانی ماشین به ماشین بوده که برای ارائهی ارتباطات بین دستگاهها از طریق اینترنت مورد استفاده قرار میگیرد. Mosquitto یک سرویس محبوب از MQTT بوده که از پشتیبانی ارتباطی بسیار مناسبی برخوردار بوده و نصب و پیکربندی آن هم بسیار ساده است.
در این راهاندازی سریع ما نصب Mosquitto را آموزش داده و از گواهینامه SSL رایگان Let’s Encrypt جهت افزایش امنیت ترافیک MQTT استفاده میکنیم.
پیش از شروع مراحل نصب، باید موارد زیر را رعایت کنید:
در ابتدا مخزن نرمافزار را نصب میکنیم تا بتوانیم آخرین نسخه از Certbot (کلاینت Let’s Encrypt) را داشته باشیم:
sudo add-apt-repository ppa:certbot/certbot
دکمه Enter را برای تایید فشار دهید، سپس پکیجهای نرمافزار را برای Mosquitto و Certbot نصب کنید:
sudo apt install certbot mosquitto mosquitto-clients
پورت ۸۰ را در فایروال خود باز کنید:
sudo ufw allow 80
سپس Certbot را راهاندازی کنید. اطمینان حاصل کنید که نام دامنه سرورتان را در این مرحله باید جایگزین کنید:
sudo certbot certonly –standalone –preferred-challenges http -d
mqtt.example.com
اکنون شما میتوانید یک آدرس ایمیل را وارد کنید. پس از انجام این کار، پیغامی را مشاهده خواهید کرد که به شما میگوید که فرایند بهدرستی انجام شده و گواهینامههای شما ذخیره شدهاند.
در مرحله بعدی Mosquitto را پیکربندی میکنیم تا بتوانیم از این گواهینامهها استفاده کنیم.
در ابتدا یک فایل پسورد میسازیم که Mosquitto بتواند از آن جهت تائید ارتباطات استفاده کند. برای این کار از دستور mosquitto_passwd استفاده کنید. توجه داشته باشید که باید نام کاربری خود را جایگزین کنید:
sudo mosquitto_passwd -c /etc/mosquitto/passwd your-username
پسورد خود را ۲ مرتبه وارد کنید. اکنون یک فایل پیکربندی جدید برای Mosquitto باز کنید:
sudo nano /etc/mosquitto/conf.d/default.conf
فایل باز شده خالی است. محتویات زیر را در آن کپی کنید:
/etc/mosquitto/conf.d/default.conf
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
مطمئن شوید که نام دامنهای که در مرحله دوم استفاده کردهاید را با mqtt.example.com جایگزین کنید. سپس فایل را save کرده و از آن خارج شوید.
این فایل موارد زیر را انجام میدهد:
اکنون Mosquitto را ریستارت کنید تا تغییرات در پیکربندی لحاظ شوند:
sudo systemctl restart mosquitto
مجدداً امتحان کنید تا مطمئن شوید که سرویس راهندازی میشود:
sudo systemctl status 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
└─۶۷۰۵ /usr/sbin/mosquitto -c /etc/mosquitto/mosquitto.conf
وضعیت باید بهصورت active (running) باشد. اگر اینگونه نیست، فایل پیکربندی را مجدداً چک کرده و ریستارت کنید. برخی از اطلاعات ممکن است در فایل Mosquitto موجود باشند:
sudo tail /var/log/mosquitto/mosquitto.log
چنانچه همه موارد صحیح هستند، از ufw استفاده کنید تا دو پورت جدید به فایروال متصل شوند:
sudo ufw allow 8883
sudo ufw allow 8083
اکنون Mosquitto بهصورت کامل نصب شده و ما میتوانیم Certbot را پیکربندی کنیم.
Certbot بهصورت اتوماتیک گواهیهای SSL ما را قبل از منقضی شدن تمدید خواهد کرد؛ اما باید به آن فرمان بدهیم که سرویس Mosquitto را نیز ریستارت کند.
فایل پیکربندی مجدد Certbot را برای نام دامنهی خود باز کنید:
sudo nano /etc/letsencrypt/renewal/mqtt.example.com.conf
در خط آخر فرمان renew_hook را اضافه کنید:
etc/letsencrypt/renewal/mqtt.example.com.conf/
renew_hook = systemctl restart mosquitto
فایل را ذخیره کرده و آن را ببندید، سپس Certbot را راهاندازی کنید تا مطمئن شوید سینتکس بهدرستی عمل میکند:
sudo certbot renew –dry-run
اگر خطایی مشاهده نکردید، عملیات بهدرستی انجام شده است.
ما برخی از دستورات کلاینت Mosquitto را نصب کردیم. اکنون به روش زیر میتوانیم بررسیهای لازم را انجام دهیم:
“mosquitto_sub -h localhost -t test -u “your-user” -P “your-password
و با mosquitto_pub میتوانیم آن را انتشار دهیم:
“mosquitto_pub -h localhost -t test -m “hello world” -u “your-user” -P “your-password
برای اشتراکگذاری با سرویسدهندهی ایمن در پورت ۸۸۸۳، بهصورت زیر عمل کنید:
“mosquitto_sub -h mqtt.example.com -t test -p 8883 –capath /etc/ssl/certs/ -u “your-username” -P “your-password
و اینگونه به سرویسدهندهی ایمن انتشار دهید:
“mosquitto_pub -h mqtt.example.com -t test -m “hello world” -p 8883 –capath /etc/ssl/certs/ -u “your-username” -P “your-password
توجه داشته باشید که ما از نام هاست کامل بهجای localhost استفاده میکنیم. از آنجایی که گواهی SSL ما برای mqtt.example.com صادر شده است، اگر بخواهیم ارتباطی امن را برای localhost داشته باشیم با خطایی مواجه خواهیم شد که به ما میگوید نام هاست شما با نام هاست گواهینامه مطابقت ندارد.
بهجای استفاده از گواهینامه SSL رایگان Let’s Encrypt، میتوانید گواهینامه SSL رسمی را از شرکت سینداد خریداری کنید. گواهینامه SSL رسمی مزایای بسیار زیادی نسبت به گواهینامههای رایگان دارد. جهت خرید گواهینامه SSL بر روی لینک زیر کلیک کنید:
سینداد یعنی هدیهی سیمرغ، یا فرزند سیمرغ؛ به عبارتی یعنی خود سیمرغ، با همه ی شگفتی هایش، اما جوانتر و سرزنده تر. و این چیزی است که ما سعی می کنیم در سینداد باشیم. از سال ۱۳۸۵ دانش مان را به صورت خدماتی در حوزه ی هاستینگ، شبکه و تولید نرم افزار در اختیار مشتریان مان قرار داده ایم و به این افتخار می کنیم که تک تک آنها تا به امروز همراه ما مانده اند. باور داریم که سینداد صرفاً یک شرکت نیست، بلکه نوعی باور است به ارائه ی شگفت انگیز از هر چیز.