نصبMosquitto MQTT بر روی Ubuntu 18.04 (راه‌اندازی سریع)

supermod 17 مهر 1397 ۰ دیدگاه

در این مقاله قصد داریم تا با نحوه‌ی نصبMosquitto MQTT بر روی Ubuntu 18.04 (راه‌اندازی سریع) آشنا شویم. اما پیش از شروع با مفاهیم و پیش‌نیازهای نصب آشنا خواهیم شد.

Mosquitto MQTT چیست؟

MQTT یک پروتکل پیام‌رسانی ماشین به ماشین بوده که برای ارائه‌ی ارتباطات بین دستگاه‌ها از طریق اینترنت مورد استفاده قرار می‌گیرد. Mosquitto یک سرویس محبوب از MQTT بوده که از پشتیبانی ارتباطی بسیار مناسبی برخوردار بوده و نصب و پیکربندی آن هم بسیار ساده است.

در این راه‌اندازی سریع ما نصب Mosquitto را آموزش داده و از گواهینامه SSL رایگان Let’s Encrypt جهت افزایش امنیت ترافیک MQTT استفاده می‌کنیم.

پیش‌نیازها:

پیش از شروع مراحل نصب، باید موارد زیر را رعایت کنید:

  • یک سرور Ubunto 18.04 با یک کاربر غیر روت با دسترسی Sudo و فایروال اولیه.
  • یک نام دامنه که به سرور شما اشاره کند.
  • پورت ۸۰ باید در سرور شما بدون استفاده باشد. چنان‌چه Mosquitto را بر روی وب ‌سروری نصب می‌کنید که این پورت را اشغال می‌کند، باید از روش‌های دیگری برای نصب استفاده کنید.

مرحله اول: نصب نرم‌افزار

در ابتدا مخزن نرم‌افزار را نصب می‌کنیم تا بتوانیم آخرین نسخه از Certbot (کلاینت Let’s Encrypt) را داشته باشیم:

sudo add-apt-repository ppa:certbot/certbot

دکمه Enter را برای تایید فشار دهید، سپس پکیج‌های نرم‌افزار را برای Mosquitto و Certbot نصب کنید:

sudo apt install certbot mosquitto mosquitto-clients

مرحله دوم: دانلود گواهینامه SSL

پورت ۸۰ را در فایروال خود باز کنید:

sudo ufw allow 80

سپس Certbot را راه‌اندازی کنید. اطمینان حاصل کنید که نام دامنه سرورتان را در این مرحله باید جایگزین کنید:

sudo certbot certonly –standalone –preferred-challenges http -d

mqtt.example.com

اکنون شما می‌توانید یک آدرس ایمیل را وارد کنید. پس از انجام این کار، پیغامی را مشاهده خواهید کرد که به شما می‌گوید که فرایند به‌درستی انجام شده و گواهینامه‌های شما ذخیره شده‌اند.

در مرحله بعدی Mosquitto را پیکربندی می‌کنیم تا بتوانیم از این گواهینامه‌ها استفاده کنیم.

مرحله سوم: پیکربندی 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 کرده و از آن خارج شوید.

این فایل موارد زیر را انجام می‌دهد:

  • ورودی‌های ناشناس را غیر فعال می‌کند.
  • از فایل پسورد برای فعال کردن هویت پسورد استفاده می‌کند.
  • یک سرویس‌دهنده‌ی نا امن در پورت ۱۸۸۳ را فقط برای localhost راه‌اندازی می‌کند.
  • یک سرویس‌دهنده‌ی امن را در پورت ۸۸۸۳ راه‌اندازی می‌کند.
  • یک سرویس‌دهنده‌ی امن مبتنی بر وب‌سایت را در پورت ۸۰۸۳ راه‌اندازی می‌کند.

اکنون 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

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 را نصب کردیم. اکنون به روش زیر می‌توانیم بررسی‌های لازم را انجام دهیم:

“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 بر روی لینک زیر کلیک کنید:

گواهینامه SSL

فناوران شبکه سینداد (دانش بنیان)

سینداد یعنی هدیه‌ی سیمرغ، یا فرزند سیمرغ؛ به عبارتی یعنی خود سیمرغ، با همه ی شگفتی هایش، اما جوانتر و سرزنده تر. و این چیزی است که ما سعی می کنیم در سینداد باشیم. از سال ۱۳۸۵ دانش مان را به صورت خدماتی در حوزه ی هاستینگ، شبکه و تولید نرم افزار در اختیار مشتریان مان قرار داده ایم و به این افتخار می کنیم که تک تک آنها تا به امروز همراه ما مانده اند. باور داریم که سینداد صرفاً یک شرکت نیست، بلکه نوعی باور است به ارائه ی شگفت انگیز از هر چیز.