- vừa được xem lúc

Triển khai Mosquitto Broker trên Ubuntu Server 22.04 và tích hợp cơ chế xác thực ủy quyền (Part 1)

0 0 5

Người đăng: Phạm Anh Quân

Theo Viblo Asia

👋Hi, mình là Quân. Chắc hẳn, nhiều bạn ở đây đã từng làm các dự án nhỏ trên các mạch vi điêu khiển (như ESP8266, ESP32,...) để đo nhiệt độ, đổ ẩm và gửi dữ liệu tới web, app để hiển thị thông qua giao thức MQTT. Do đó, mình viết bài viết này để giới thiệu chung về giao thức MQTT và chia sẻ cách để tự triển khai một Mqtt Broker dựa trên mosquitto.

📄 MQTT Protocol là gì?

MQTT (Message Queuing Telemetry Transport) là một giao thức nhắn tin nhẹ, được thiết kế để truyền tải các thông điệp giữa các thiết bị với băng thông thấp và độ trễ thấp. MQTT thường được sử dụng trong các ứng dụng Internet of Things (IoT) và các hệ thống nhúng.

MQTT Broker là một thành phần trung tâm trong hệ thống sử dụng giao thức MQTT . Nó đóng vai trò là người trung gian giữa các thiết bị hoặc ứng dụng (client) trong mô hình publish/subscribe. Dưới đây là một số điểm chính về MQTT Broker:

  • Quản lý chủ đề (Topic): Broker duy trì một danh sách các chủ đề và các client đã đăng ký vào các chủ đề đó. Khi một thông điệp được gửi đến một chủ đề, broker sẽ chuyển tiếp thông điệp đó đến tất cả các client đã đăng ký vào chủ đề này.
  • Chất lượng dịch vụ (QoS): Broker hỗ trợ các mức QoS khác nhau để đảm bảo mức độ tin cậy của việc truyền thông điệp. Các mức QoS bao gồm:
    • QoS 0: Thông điệp được gửi một lần và không có xác nhận.
    • QoS 1: Thông điệp được gửi ít nhất một lần và yêu cầu xác nhận từ người nhận.
    • QoS 2: Thông điệp được gửi chính xác một lần và yêu cầu xác nhận từ người nhận.
  • Lưu trữ thông điệp (Retain): Broker có thể lưu trữ thông điệp cuối cùng được gửi đến một chủ đề. Khi một client mới đăng ký vào chủ đề đó, broker sẽ ngay lập tức gửi thông điệp được lưu trữ này đến client mới.
  • Bảo mật: MQTT Broker có thể hỗ trợ các cơ chế bảo mật như SSL/TLS để mã hóa dữ liệu truyền tải và xác thực người dùng, đảm bảo rằng chỉ các client được ủy quyền mới có thể kết nối và truyền thông điệp.

Mosquitto Broker là một phần mềm mã nguồn mở, nhẹ và hiệu quả, được thiết kế để hoạt động trên nhiều nền tảng khác nhau và hỗ trợ đầy đủ các tính năng của giao thức MQTT. Mosquitto thường được sử dụng trong các dự án IoT để thu thập và truyền tải dữ liệu từ các cảm biến và thiết bị khác nhau đến một máy chủ trung tâm hoặc giữa các thiết bị với nhau.

image.png

💻️ Cài đặt Mosquitto Broker

  1. Cài đặt các gói yêu cầu:
$ sudo apt-get update
$ sudo apt-get install curl gnupg2 wget git apt-transport-https ca-certificates -y
  1. Thêm Mosquitto PPA:
$ sudo add-apt-repository ppa:mosquitto-dev/mosquitto-ppa -y
  1. Cài đặt Mosquitto Broker và Mosquitto Clients
$ sudo apt install mosquitto mosquitto-clients -y
  1. Kiểm tra trạng thái và version Mosquitto:
$ sudo systemctl status mosquitto

$ mosquitto -v
1722240285: mosquitto version 2.0.15 starting
...

🛠️ Cấu hình Mosquitto

Theo mặc định, Mosquitto được cấu hình cho phép các kết nối anonymous. Để cài đặt bảo mật, bạn làm như sau:

  • Cách 1: sử dụng file để lưu mật khẩu quản trị MQTT:
  1. Chạy lệnh cmd để tạo file lưu mật khẩu và thêm người dùng mới :
$ sudo mosquitto_passwd -c /etc/mosquitto/passwd <your_username>
Password: <your_password>
Reenter password: <your_password>
  1. Đặt quyền sở hữu cho tệp mật khẩu:
$ sudo chown mosquitto:mosquitto /etc/mosquitto/passwd
  1. Tạo file cấu hình:
$ sudo nano /etc/mosquitto/conf.d/default.conf
  1. Thêm các dòng sau:
listener 1883
password_file /etc/mosquitto/passwd

Trong đó, Mosquitto Broker sẽ lắng nghe các kết nối MQTT ở port 1883, và tệp mật khẩu "/etc/mosquitto/passwd" dùng để xác thực người dùng.

  1. Liên kết file cấu hình trên tới mosquitto:

Thêm lệnh sau vào file "/etc/mosquitto/mosquitto.conf"

include_dir /etc/mosquitto/conf.d
  1. Kiểm tra cấu hình mosquitto :

⚠️Nếu hệ thống đã chạy dịch vụ "mosquitto.service", hãy dừng dịch vụ bằng lệnh:

$ sudo systemctl stop mosquitto.service

Chạy mosquitto broker bằng tay:

$ mosquitto -c /etc/mosquitto/mosquitto.conf

image.png

  1. 💪Sau khi kiểm trả cấu hình hoàn tất, Khởi động lại Mosquitto:
$ sudo systemctl restart mosquitto
$ journalctl -u mosquitto -f # hiển thị Log gần nhất
  1. Kiểm tra Mosquitto với mosquitto-clients

Tạo một cửa sổ CMD và đăng kí topic:

$ mosquitto_sub -u <your_username> -P <your_password> -v -t "test_topic"

Tạo một cửa sổ khác để xuất bản tin nhắn trong topic "hello/topic":

$ mosquitto_pub -u <your_username> -P <your_password> -t 'test_topic' -m 'hello MQTT'

Nếu bạn chạy Mosquitto trên một port khác, sử dụng thêm tham số -p để cấu hình port:

$ mosquitto_sub -p <your_port> -u admin -P <your_password> -v -t "hello/topic"

Kết quả: image.png

👉️Bên cạnh đó, để tìm hiểu về các phương thức xác thực và ủy quyền cho mosquitto server, các bạn có thể tham khảo thêm tại đây.

  • Cách 2 (nâng cao): Sử dụng mosquitto authentication plugin:

Mosquitto Go Auth là một plugin xác thực và ủy quyền cho Mosquitto MQTT Broker, được viết bằng ngôn ngữ lập trình Go. Plugin này cho phép bạn sử dụng nhiều phương thức xác thực và ủy quyền, đồng thời hỗ trợ nhiều loại cơ sở dữ liệu (MySQL, MongoDB,...) khác nhau để kiểm soát quyền truy cập vào Mosquitto broker. Phần này khá dài nên mình sẽ trình bày trong bài viết tiếp theo nhé.

💡 Tổng kết

Cảm ơn các bạn đã theo dõi bài viết của mình. Phần tiếp theo của bài viết này, mình sẽ hướng dẫn các bạn tích hợp mosquitto-go-auth sử dụng cơ sở dữ liệu MySQL vào Mosquitto Broker. Đồng thời đừa máy chủ MQTT của bạn từ local lên internet. Mời các bạn cùng đón xem tại đây nhé 😀.

🔗 Nguồn tham khảo

Bình luận

Bài viết tương tự

- vừa được xem lúc

Mô hình quan hệ - thực thể (Entity – Relationship Model)

Mô hình quan hệ thực thể (Entity Relationship model - E-R) được CHEN giới thiệu vào năm 1976 là một mô hình được sử dụng rộng rãi trong các bản thiết kế cơ sở dữ liệu ở mức khái niệm, được xây dựng dựa trên việc nhận thức thế giới thực thông qua tập các đối tượng được gọi là các thực thể và các mối

0 0 128

- vừa được xem lúc

[Embulk #1] Công cụ giúp giảm nỗi đau chuyển đổi dữ liệu

Embulk là gì. Embulk là một công cụ open source có chức năng cơ bản là load các record từ database này và import sang database khác.

0 0 51

- vừa được xem lúc

Window Functions trong MySQL, Nâng cao và cực kì hữu dụng (Phần II).

Chào mọi người, lại là mình đây, ở phần trước mình đã giới thiệu với mọi người về Window Functions Phần I. Nếu chưa rõ nó là gì thì mọi người nên đọc lại trước nha, để nắm được định nghĩa và các key words, tránh mắt chữ O mồm chứ A vì phần này mình chủ yếu sẽ thực hành với các Window Functions.

0 0 103

- vừa được xem lúc

Window Functions trong MySQL, Nâng cao và cực kì hữu dụng (Phần I).

Chào mọi người, mình mới tìm hiểu đc topic Window Functions cá nhân mình cảm thấy khá là hay và mình đánh giá nó là phần nâng cao. Vì ít người biết nên Window Functions thấy rất ít khi sử dụng, thay vì đó là những câu subquery dài dằng dặc như tin nhắn nhắn cho crush, và người khác đọc hiểu được câu

0 0 918

- vừa được xem lúc

Disable và Enable trigger trong Oracle

Origin post: https://www.tranthanhdeveloper.com/2020/12/disable-va-enable-trigger-trong-oracle.html.

0 0 38

- vừa được xem lúc

Lưu trữ dữ liệu với Data Store

. Data Store là một trong những componet của bộ thư viện Android JetPack, nó là một sự lựa chọn hoàn hảo để thay thế cho SharedPreferences để lưu trữ dữ liệu đơn giản dưới dạng key-value. Chúng ta cùng làm một so sánh nhỏ để thấy sự tối ưu của Data Store với SharedPreferences nhé.

0 0 68