👋 Giới thiệu
Chào các bạn, mình là Quân. Nếu bạn đã từng làm các dự án IoT nhỏ với các vi điều khiển như ESP8266 hay ESP32 để đo nhiệt độ và độ ẩm, thì chắc hẳn bạn đã nghe đến giao thức MQTT. Trong bài viết này, mình sẽ giới thiệu về giao thức MQTT và hướng dẫn cách triển khai một MQTT Broker dựa trên Mosquitto.
📄 Giao thức MQTT là gì?
MQTT (Message Queuing Telemetry Transport) là một giao thức nhắn tin nhẹ, thiết kế để truyền tải thông điệp giữa các thiết bị, đặc biệt trong môi trường băng thông thấp và độ trễ thấp. MQTT thường được áp dụng trong các ứng dụng Internet of Things (IoT) và hệ thống nhúng.
MQTT Broker là gì?
MQTT Broker là thành phần trung tâm trong hệ thống sử dụng giao thức MQTT, giữ vai trò trung gian giữa các thiết bị hoặc ứng dụng (client) trong mô hình publish/subscribe. Một số điểm quan trọng về MQTT Broker bao gồm:
- Quản lý chủ đề (Topic): Broker duy trì danh sách chủ đề và client đã đăng ký.
- Chất lượng dịch vụ (QoS): Hỗ trợ nhiều mức QoS để đảm bảo độ tin cậy của thông điệp.
- Lưu trữ thông điệp (Retain): Lưu trữ thông điệp cuối cùng gửi đến một chủ đề cho client mới đăng ký.
- Bảo mật: Hỗ trợ các cơ chế bảo mật như SSL/TLS.
Mosquitto Broker là phần mềm mã nguồn mở, nhẹ, hiệu quả, hoạt động trên nhiều nền tảng và hỗ trợ đầy đủ các tính năng của giao thức MQTT, thường được dùng trong các dự án IoT.
💻️ Hướng dẫn Cài đặt Mosquitto Broker
Bước 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
Bước 2: Thêm Mosquitto PPA
$ sudo add-apt-repository ppa:mosquitto-dev/mosquitto-ppa -y
Bước 3: Cài đặt Mosquitto Broker và Mosquitto Clients
$ sudo apt install mosquitto mosquitto-clients -y
Bước 4: Kiểm tra trạng thái và phiên bản Mosquitto
$ sudo systemctl status mosquitto
$ mosquitto -v
1722240285: mosquitto version 2.0.15 starting
...
🛠️ Cấu hình Mosquitto
Theo mặc định, Mosquitto cho phép kết nối anonymous. Để tăng cường bảo mật, thực hiện như sau:
I. Tạo file lưu mật khẩu quản trị MQTT
- Tạo file mật khẩu và thêm người dùng mới:
$ sudo mosquitto_passwd -c /etc/mosquitto/passwd <tên_người_dùng>
Mật khẩu: <mật_khẩu>
Nhập lại mật khẩu: <mật_khẩu>
- Thiết lập quyền sở hữu cho file mật khẩu:
$ sudo chown mosquitto:mosquitto /etc/mosquitto/passwd
- Tạo file cấu hình bổ sung:
$ sudo nano /etc/mosquitto/conf.d/default.conf
- Thêm vào file các dòng sau:
listener 1883
allow_anonymous false
password_file /etc/mosquitto/passwd
- Liên kết file cấu hình vào Mosquitto: Thêm dòng này vào file /etc/mosquitto/mosquitto.conf:
include_dir /etc/mosquitto/conf.d
- Kiểm tra cấu hình Mosquitto:
⚠️ Nếu Mosquitto đang chạy, dừng dịch vụ:
$ sudo systemctl stop mosquitto.service
- Chạy Mosquitto broker bằng tay:
$ mosquitto -c /etc/mosquitto/mosquitto.conf -v
- Khởi động lại Mosquitto:
$ sudo systemctl restart mosquitto
$ journalctl -u mosquitto -f
II. Sử dụng tệp ACL (Access Control List)
- Tạo file ACL mới:
$ sudo nano /etc/mosquitto/acls
Cấu trúc tệp ACL:
user <tên_người_dùng>
topic [read|write|readwrite|deny] <topic>
- Thêm thông tin vào file ACL:
user admin
topic readwrite #
user user1
topic readwrite temperature
user user2
topic write actuators/#
- Liên kết file ACL vào Mosquitto: Thêm dòng sau vào cuối file /etc/mosquitto/conf.d/default.conf:
acl_file /etc/mosquitto/acls
- Khởi động lại Mosquitto:
$ sudo systemctl restart mosquitto.service
- Kiểm tra tính năng phân quyền:
Thêm người dùng mới và kiểm tra quyến truy cập.
Client sẽ không biết về quyền hạn của các chủ đề cho đến khi thử nghiệm gửi/nhận tin nhắn.
👉️ Để tìm hiểu thêm về các phương thức xác thực và ủy quyền, bạn có thể tham khảo Mosquitto Go Auth, một plugin hữu ích cho Mosquitto MQTT Broker.
💡 Tổng kết
Cảm ơn bạn đã đọc bài viết. Phần tiếp theo sẽ đề cập đến cách tích hợp Mosquitto Go Auth với cơ sở dữ liệu MySQL và đưa máy chủ MQTT của bạn lên Internet. Hãy cùng chờ đón nhé! Nếu bạn có câu hỏi hoặc góp ý nào, hãy để lại bình luận, mình sẽ rất vui khi được giải đáp.
source: viblo