Giới thiệu

  • Mosquitto là một server MQTT thông dụng được sử dụng rất phổ biến hiện nay, từ các dự án nhỏ cho đến các công ty lớn đều đang dùng broker này. Nó được một cộng đồng lớn sử dụng và hỗ trợ, giúp cho nó ngày càng phổ biến và ổn định hơn.
  • MQTT là một protocal giao tiếp máy- đến – máy ,  được thiết kế để cung cấp các giao tiếp truyền/ nhận cho các thiết bị IoT. Nó được dùng trên rất nhiều ứng dụng khác nhau có các đặc điểm chung là có nhu cầu truyền/ nhận dữ liệu với các thiết bị khác thông qua giao tiếp internet.
  • Trong hướng dẫn này, chúng ta sẽ tiến hành cài đặt broker Mosquitto, ngoài ra cũng có nhiều broker khác cũng hỗ trợ MQTT, tuy nhiên broker này được cộng đồng sử dụng nhiều nên có nhiều cập nhật và fix lỗi.
  • Nếu muốn production cho các ứng dụng của bạn, bạn cần bảo mật các giao tiếp của bạn thì bạn cần mã hóa chúng, xác thực người dùng để có thể tham gia giao tiếp. Trong loạt bài viết về MQTT Broker Authentication và Authorize mình sẽ cung cấp các hướng dẫn chi tiết.

Bài viết liên quan:

[Bảo mật cho MQTT] Phần 2: Xác thực người dùng sử dụng private và public key( mã hóa TLS)

Yêu cầu

Trước khi bắt đầu bạn cần những yếu tố sau:

  • Một máy tính server  chạy ubuntu thật hoặc máy ảo
  • Một tên miền đã trỏ tới địa chỉ IP của máy server

Lưu ý: Cấu hình trên là trong trường hợp bạn muốn test trên môi trường thực tế cần giao tiếp qua internet. Tuy nhiên trong giai đoạn thử nghiệm hoặc làm quen thì bạn có thể dùng một máy tính ubuntu thông thường và test chạy trong mạng nội bộ trước nhé.

Bước 1 — Cài đặt Mosquitto

Bạn có thế cài Mosquitto từ source code hoặc thực hiện cài packet từ ubuntu nhé. Để tiết kiệm thời gian thì mình sẽ dùng package ubuntu. Bạn đăng nhập tài khoản user và chạy dòng lệnh sau:

sudo apt-get install mosquitto mosquitto-clients

Theo mặc định thì sau khi cài mosquitto server sẽ tự chạy, ta sẽ dùng mosquitto client mà ta vừa cài để kiểm tra xem broker đã được cài đúng chưa nhé. Bạn mở một terminal mới và chạy lệnh sau để subscribe:

mosquitto_sub -h localhost -t test

Mở thêm 1 terminal mới để publish mesage

mosquitto_pub -h localhost -t test -m 'hello world'

Sau khi thực hiện dòng lệnh trên thì kiểm tra mesage “Hello World ” có xuất hiện bên cửa sổ nhận không nhé, nếu có xuất hiện thì mosquitton broker đã hoạt động.

Bước 2 – Cài đặt MQTT Password

Theo mặc định mosquitto không bật chức năng kiểm tra mật khẩu khi thực hiện publish hoặc subscribe. Mosquito đã tạo ra một file password đặc biệt có tên: mosquitto_passwd . Lệnh này sẽ yêu cầu bạn nhập password cho một username cụ thể và lưu thông tin vào file /etc/mosquitto/passwd.

Thêm user mới vào file trên ta dùng lệnh sau:

sudo mosquitto_passwd  /etc/mosquitto/passwd  [tên người dùng]

Bây giờ ta sẽ tạo ra 1 file cấu hình mới và thông báo cho mosquitto hãy sử dụng file cấu hình này.

sudo nano /etc/mosquitto/conf.d/default.conf

Một cửa sổ mới hiện lên và bạn nhập những thông tin sau vào file

allow_anonymous false
password_file /etc/mosquitto/passwd

Restart lại mosquitto và thử publish lại message

sudo systemctl restart mosquitto
mosquitto_pub -h localhost -t test -m 'hello world'

Message sẽ bị loại bỏ, bạn sẽ thấy kết quả thông báo như sau:

Output
Connection Refused: not authorised.
Error: The connection was refused.

Trước khi thực hiện lại publish ta cần subscribe với thông tin username và password như sau:

mosquitto_sub -h localhost -t test -u "thanhle" -P "123456"

Thực hiện publish lại với thông tin username và password

mosquitto_pub -h localhost -t "test" -m "hello world" -u "thanhle" -P "123456"

Bạn sẽ thấy message sẽ được nhận được phía Subscribe.

Tổng kết

Nếu đến đây đã đáp ứng nhu cầu sử dụng của bạn, nghĩa là trong một mạng nội bộ, bạn đã có thể xác thực người dùng để có thể gửi và nhận message qua MQTT.

Trong bài viết tiếp theo mình sẽ hướng dẫn các bạn cách giao tiếp qua mạng internet. Vẫn sử dụng phương pháp xác thực người dùng bằng username và password. Tuy nhiên có thêm phương thức mã hóa SSL để bảo mật thông tin truyền đi trên môi trường internet.

Xem thêm:

[Bảo mật cho MQTT] Phần 2: Xác thực người dùng sử dụng private và public key