Eclipse Mosquitto là một chương trình môi giới tin nhắn mã nguồn mở và miễn phí của giao thức MQTT. Mosquitto triển khai MQTT phiên bản 3.1.0, 3.1.1 và phiên bản 5.0. Mosquitto là một chương trình môi giới tin nhắn nhẹ phù hợp với nhiều loại triển khai và sử dụng.
Mosquitto là một chương trình môi giới tin nhắn sử dụng mô hình xuất bản/đăng ký để phân phối tin nhắn. Nó sử dụng băng thông thấp và dễ triển khai, có nghĩa là phù hợp để triển khai cho các thiết bị nhỏ và IoT (Internet vạn vật), thiết bị di động, máy tính nhúng và bộ vi điều khiển.
Trong hướng dẫn này, chúng tôi sẽ hướng dẫn quy trình cài đặt và cấu hình Mosquitto MQTT Message Broker trên máy chủ Debian 11, thiết lập xác thực, Bảo mật Mosquitto thông qua chứng chỉ SSL/TLS và cũng kích hoạt WebSockets trên Mosquitto.
Trong bước này, bạn sẽ xem xét quy trình cài đặt máy chủ và máy khách Mosquitto trên máy chủ Debian. Bạn cũng sẽ xem qua cách sử dụng cơ bản của dòng lệnh Mosquitto (mosquitto_sub và mosquitto_pub) để xác minh cài đặt máy chủ Mosquitto.
Đầu tiên, hãy cập nhật và làm mới chỉ mục gói Debian của bạn thông qua lệnh apt bên dưới.
Tìm kiếm gói 'mosquitto' bằng lệnh apt sau lệnh.
Bạn sẽ thấy một số gói Mosquitto có sẵn theo mặc định trên kho lưu trữ Debian, bao gồm ứng dụng máy chủ và máy khách Mosquitto.
data:image/svg+xml,%3Csvg%20xmlns=%22http://www.w3.org/2000/svg%22%20width=%22605%22%20height=%22553%22%3E%3C/svg%3E
Bây giờ hãy chạy lệnh apt bên dưới để cài đặt các gói Mosquitto. Khi được nhắc, hãy nhập y để xác nhận và nhấn ENTER để tiếp tục.
data:image/svg+xml,%3Csvg%20xmlns=%22http://www.w3.org/2000/svg%22%20width=%22750%22%20height=%22268%22%3E%3C/svg%3E
Sau khi Mosquitto được cài đặt, hãy xác minh dịch vụ Mosquitto thông qua systemctl sau lệnh.
Sau đó, bạn sẽ thấy dịch vụ Mosquitto được bật và sẽ tự động chạy khi khởi động. Và trạng thái hiện tại của dịch vụ Mosquitto đang chạy.
data:image/svg+xml,%3Csvg%20xmlns=%22http://www.w3.org/2000/svg%22%20width=%22750%22%20height=%22313%22%3E%3C/svg%3E
Bây giờ máy chủ Mosquitto đang chạy, tiếp theo bạn sẽ xác minh Mosquitto thông qua dòng lệnh máy khách 'mosquitto_sub' và 'mosquitto-pub'.
Nói một cách đơn giản, 'mosquitto_sub' là công cụ dòng lệnh để nhận tin nhắn (Người đăng ký) từ 'mosquitto_pub' (Nhà xuất bản).
Chạy lệnh sau Lệnh 'mosqitto_sub' để nhận một số tin nhắn về chủ đề 'test'.
Tiếp theo, mở phiên thiết bị đầu cuối mới của máy chủ của bạn và chạy lệnh 'mosquitto_pub' sau để gửi một số tin nhắn đến chủ đề 'test'
Sau đó, bạn sẽ thấy các tin nhắn được xuất bản thông qua 'mosquitto_pub' trên máy thu 'mosquitto_sub', điều này có nghĩa là máy chủ và máy khách Mosquitto đã cài đặt thành công.
data:image/svg+xml,%3Csvg%20xmlns=%22http://www.w3.org/2000/svg%22%20width=%22750%22%20height=%22231%22%3E%3C/svg%3E
Chạy lệnh sau để tạo người dùng và mật khẩu Mosquitto mới. Bản demo này sử dụng người dùng 'alice' và mật khẩu sẽ được tạo và băm trong tệp '/etc/mosquitto/.passwd'.
Nhập mật khẩu cho người dùng Mosquitto 'alice' và lặp lại mật khẩu.
Sau khi tạo tên người dùng/mật khẩu, hãy tạo cấu hình Mosquitto mới '/etc/mosquitto/conf.d/auth.conf' bằng trình chỉnh sửa nano sau lệnh.
Thêm cấu hình sau vào tệp. Lệnh này sẽ chạy Mosquitto trên cổng '1883', vô hiệu hóa quyền truy cập ẩn danh và xác định tệp mật khẩu thành '/etc/mosquitto/.passwd'.
Lưu tệp và thoát khỏi trình chỉnh sửa khi bạn hoàn tất.
Tiếp theo, khởi động lại dịch vụ Mosquitto để áp dụng các thay đổi mới. Máy chủ Mosquitto hiện đang chạy với xác thực được bật.
data:image/svg+xml,%3Csvg%20xmlns=%22http://www.w3.org/2000/svg%22%20width=%22750%22%20height=%22278%22%3E%3C/svg%3E
Để xác minh máy chủ Mosquitto xác thực, bạn có thể sử dụng 'mosquitto_sub' và 'mosquitto_pub' lệnh.
Khi bạn không cung cấp tên người dùng/mật khẩu trong quá trình pub/sub, bạn sẽ bị từ chối và kết nối sẽ bị từ chối. Tuy nhiên, nếu bạn đã cung cấp tên người dùng/mật khẩu để xác thực và bạn có thông tin xác thực chính xác, bạn sẽ có thể gửi và nhận tin nhắn qua Mosquitto Subscriber and Publisher.
Chạy lệnh sau để xác minh Pub và Sub trên Mosquitto mà không cần xác thực.
Sau đó, bạn sẽ thấy rằng nếu không có xác thực, cả hai kết nối đến máy chủ Mosquitto sẽ bị từ chối vì không được phép và bạn sẽ không thể gửi và nhận tin nhắn.
data:image/svg+xml,%3Csvg%20xmlns=%22http://www.w3.org/2000/svg%22%20width=%22750%22%20height=%22258%22%3E%3C/svg%3E
Tiếp theo, chạy lệnh sau để xác minh Pub và Sub của Mosquitto bằng tên người dùng và mật khẩu.
Khi thông tin đăng nhập Mosquitto chính xác, bạn sẽ được kết nối với cả Mosquitto Subscriber và Publisher và bạn có thể gửi và nhận tin nhắn qua Dòng lệnh Mosquitto.
data:image/svg+xml,%3Csvg%20xmlns=%22http://www.w3.org/2000/svg%22%20width=%22750%22%20height=%22192%22%3E%3C/svg%3E
Với máy chủ Mosquitto đang chạy và xác thực được bật, giờ đây bạn sẽ có một môi giới tin nhắn an toàn. Tuy nhiên, để có thêm tính bảo mật, bạn cũng có thể thêm quyền thông qua chứng chỉ SSL/TLS vào kết nối và truyền dữ liệu Mosquitto cục bộ của mình.
Trước khi bắt đầu, hãy đảm bảo rằng bạn đã tạo chứng chỉ SSL/TLS cho môi trường cục bộ của mình.
Để bắt đầu, hãy chạy lệnh openssl sau để tạo chứng chỉ dhparam. Điều này sẽ tạo chứng chỉ DHPARAM thành '/etc/mosquitto/certs/dhparam.pem'.
data:image/svg+xml,%3Csvg%20xmlns=%22http://www.w3.org/2000/svg%22%20width=%22750%22%20height=%22140%22%3E%3C/svg%3E
Bây giờ hãy thay đổi quyền sở hữu thư mục chứng chỉ Mosquitto thành người dùng 'mosquitto' thông qua lệnh chmod bên dưới.
Tiếp theo, tạo cấu hình bổ sung mới '/etc/mosquitto/conf.d/ssl.conf' bằng lệnh nano editor sau. Với điều này, bạn sẽ kích hoạt kết nối an toàn trên máy chủ Mosquitto thông qua chứng chỉ SSL/TLS.
Thêm cấu hình sau vào tệp. Thao tác này sẽ chạy Mosquitto trên cổng '8883' với TLS được bật ở trên cùng. Vì vậy, hãy đảm bảo thay đổi đường dẫn của chứng chỉ SSL/TLS.
Lưu tệp và thoát khỏi trình chỉnh sửa khi bạn hoàn tất.
Bây giờ hãy chạy lệnh systemctl sau để khởi động lại dịch vụ Mosquitto và áp dụng các thay đổi mới. Bây giờ máy chủ Mosquitto sẽ chạy với TLS bảo mật được bật.
Với SSL/TLS được bật, sau đó bạn sẽ xác minh cấu hình bằng cách gửi tin nhắn đến Mosquitte Subscriber qua kết nối bảo mật.
Chạy lệnh 'mosquitto_sub' sau để mở Mosquitte Subscriber trên thiết bị đầu cuối hiện tại của bạn phiên.
Tiếp theo, mở một phiên mới, kết nối với máy chủ, sau đó chạy lệnh sau để gửi tin nhắn đến máy chủ Mosquitto. Với thao tác này, bạn sẽ kết nối với máy chủ Mosquitto 'msqt.howtoforge.local' thông qua kết nối SSL/TLS chạy trên cổng '8883'.
Bây giờ bạn sẽ nhận được thông báo trên shell Mosquitto Subscriber. Mosquitto Producer gửi tin nhắn đến Mosquitto Subscriber thông qua kết nối SSL/TLS an toàn chạy trên cổng 8883.
data:image/svg+xml,%3Csvg%20xmlns=%22http://www.w3.org/2000/svg%22%20width=%22750%22%20height=%22280%22%3E%3C/svg%3E
WebSocket là một giao thức truyền thông có trạng thái cung cấp kênh song công toàn phần liên tục giữa máy chủ và máy khách bằng cách sử dụng lại cùng một kết nối đã được mở khi bắt đầu truyền thông (trong quá trình bắt tay mở).
Để bắt đầu, hãy tạo cấu hình mới '/etc/mosquitto/conf.d/websockets.conf' bằng lệnh trình chỉnh sửa nano sau.
Thêm cấu hình sau vào tệp. Thao tác này sẽ bật giao thức WebSockets và bảo mật giao thức này thông qua chứng chỉ SSL/TLS. WebSockets sẽ chạy trên cổng 8083.
Lưu tệp và thoát khỏi trình chỉnh sửa khi bạn hoàn tất.
Tiếp theo, chạy lệnh systemctl sau để khởi động lại dịch vụ Mosquitto và áp dụng các thay đổi mới. Máy chủ Mosquitto hiện sẽ chạy với WebSockets được bật trên kết nối SSL/TLS an toàn.
Để xác minh cấu hình WebSockets, bạn có thể kết nối với Mosquitto thông qua một công cụ của bên thứ ba như 'MQTT Explorer' có sẵn cho các hệ điều hành chính như Linux, Windows và macOS.
Dưới đây là MQTT Explorer với kết nối WebSockets.
data:image/svg+xml,%3Csvg%20xmlns=%22http://www.w3.org/2000/svg%22%20width=%22750%22%20height=%22387%22%3E%3C/svg%3E
Khi kết nối, bạn sẽ thấy bảng điều khiển sau.
data:image/svg+xml,%3Csvg%20xmlns=%22http://www.w3.org/2000/svg%22%20width=%22750%22%20height=%22436%22%3E%3C/svg%3E
Từ đây, giờ đây bạn có thể tận dụng cài đặt Mosquitto bằng cách tạo Cụm Mosquitto có tính khả dụng cao hoặc thiết lập bảng điều khiển quản trị Mosquitto thông qua Trung tâm quản lý Cedalo.
Mosquitto là một chương trình môi giới tin nhắn sử dụng mô hình xuất bản/đăng ký để phân phối tin nhắn. Nó sử dụng băng thông thấp và dễ triển khai, có nghĩa là phù hợp để triển khai cho các thiết bị nhỏ và IoT (Internet vạn vật), thiết bị di động, máy tính nhúng và bộ vi điều khiển.
Trong hướng dẫn này, chúng tôi sẽ hướng dẫn quy trình cài đặt và cấu hình Mosquitto MQTT Message Broker trên máy chủ Debian 11, thiết lập xác thực, Bảo mật Mosquitto thông qua chứng chỉ SSL/TLS và cũng kích hoạt WebSockets trên Mosquitto.
Điều kiện tiên quyết
Để bắt đầu, bạn phải có các yêu cầu sau để hoàn thành hướng dẫn này:- Máy chủ Debian 11 - Bản demo này sử dụng máy chủ Debian có tên máy chủ là 'mosquitto-server'.
- Người dùng không phải root có quyền root/quản trị viên.
Cài đặt máy chủ và máy khách Mosquitto
Mosquitto là một MQTT Message mã nguồn mở Broker có sẵn và có thể được cài đặt trên nhiều nền tảng như Windows, Linux, BSD và macOS. Đối với bản phân phối Debian Linux, Mosquitto có sẵn trên kho lưu trữ Debian mặc định, cho phép bạn dễ dàng cài đặt nó thông qua APT.Trong bước này, bạn sẽ xem xét quy trình cài đặt máy chủ và máy khách Mosquitto trên máy chủ Debian. Bạn cũng sẽ xem qua cách sử dụng cơ bản của dòng lệnh Mosquitto (mosquitto_sub và mosquitto_pub) để xác minh cài đặt máy chủ Mosquitto.
Đầu tiên, hãy cập nhật và làm mới chỉ mục gói Debian của bạn thông qua lệnh apt bên dưới.
Mã:
sudo apt update
Mã:
sudo apt search mosquitto
data:image/svg+xml,%3Csvg%20xmlns=%22http://www.w3.org/2000/svg%22%20width=%22605%22%20height=%22553%22%3E%3C/svg%3E
Bây giờ hãy chạy lệnh apt bên dưới để cài đặt các gói Mosquitto. Khi được nhắc, hãy nhập y để xác nhận và nhấn ENTER để tiếp tục.
Mã:
sudo apt install mosquitto mosquitto-clients
data:image/svg+xml,%3Csvg%20xmlns=%22http://www.w3.org/2000/svg%22%20width=%22750%22%20height=%22268%22%3E%3C/svg%3E
Sau khi Mosquitto được cài đặt, hãy xác minh dịch vụ Mosquitto thông qua systemctl sau lệnh.
Mã:
sudo systemctl is-enabled mosquitto
sudo systemctl status mosquitto
data:image/svg+xml,%3Csvg%20xmlns=%22http://www.w3.org/2000/svg%22%20width=%22750%22%20height=%22313%22%3E%3C/svg%3E
Bây giờ máy chủ Mosquitto đang chạy, tiếp theo bạn sẽ xác minh Mosquitto thông qua dòng lệnh máy khách 'mosquitto_sub' và 'mosquitto-pub'.
Nói một cách đơn giản, 'mosquitto_sub' là công cụ dòng lệnh để nhận tin nhắn (Người đăng ký) từ 'mosquitto_pub' (Nhà xuất bản).
Chạy lệnh sau Lệnh 'mosqitto_sub' để nhận một số tin nhắn về chủ đề 'test'.
Mã:
sudo mosquitto_sub -h localhost -t test
Mã:
sudo mosquitto_pub -h localhost -t test -m "Hello from terminal 2"
sudo mosquitto_pub -h localhost -t test -m "Hello from terminal 2 - Publisher"
sudo mosquitto_pub -h localhost -t test -m "Hello"
data:image/svg+xml,%3Csvg%20xmlns=%22http://www.w3.org/2000/svg%22%20width=%22750%22%20height=%22231%22%3E%3C/svg%3E
Thiết lập Xác thực trên Mosquitto
Cài đặt Mosquitto mặc định không có xác thực. Để bảo mật việc triển khai (đặc biệt là trong sản xuất), bạn nên bật xác thực trên máy chủ Mosquitto. Bạn có thể tạo và xác định người dùng trên Mosquitto và bảo mật Mosquitto Sub và Pub thông qua xác thực tên người dùng/mật khẩu.Chạy lệnh sau để tạo người dùng và mật khẩu Mosquitto mới. Bản demo này sử dụng người dùng 'alice' và mật khẩu sẽ được tạo và băm trong tệp '/etc/mosquitto/.passwd'.
Mã:
sudo mosquitto_passwd -c /etc/mosquitto/.passwd alice
Sau khi tạo tên người dùng/mật khẩu, hãy tạo cấu hình Mosquitto mới '/etc/mosquitto/conf.d/auth.conf' bằng trình chỉnh sửa nano sau lệnh.
Mã:
sudo nano /etc/mosquitto/conf.d/auth.conf
Mã:
listener 1883
allow_anonymous false
password_file /etc/mosquitto/.passwd
Tiếp theo, khởi động lại dịch vụ Mosquitto để áp dụng các thay đổi mới. Máy chủ Mosquitto hiện đang chạy với xác thực được bật.
Mã:
sudo systemctl restart mosquitto
data:image/svg+xml,%3Csvg%20xmlns=%22http://www.w3.org/2000/svg%22%20width=%22750%22%20height=%22278%22%3E%3C/svg%3E
Để xác minh máy chủ Mosquitto xác thực, bạn có thể sử dụng 'mosquitto_sub' và 'mosquitto_pub' lệnh.
Khi bạn không cung cấp tên người dùng/mật khẩu trong quá trình pub/sub, bạn sẽ bị từ chối và kết nối sẽ bị từ chối. Tuy nhiên, nếu bạn đã cung cấp tên người dùng/mật khẩu để xác thực và bạn có thông tin xác thực chính xác, bạn sẽ có thể gửi và nhận tin nhắn qua Mosquitto Subscriber and Publisher.
Chạy lệnh sau để xác minh Pub và Sub trên Mosquitto mà không cần xác thực.
Mã:
# session - Mosquitto Subscriber
sudo mosquitto_sub -h localhost -t test
# session - Mosquitto Publisher
sudo mosquitto_pub -h localhost -t test -m "Hello again from terminal 2"
data:image/svg+xml,%3Csvg%20xmlns=%22http://www.w3.org/2000/svg%22%20width=%22750%22%20height=%22258%22%3E%3C/svg%3E
Tiếp theo, chạy lệnh sau để xác minh Pub và Sub của Mosquitto bằng tên người dùng và mật khẩu.
Mã:
# session - Mosquitto Subscriber
sudo mosquitto_sub -h localhost -t test -u "alice" -P "p4ssw0rd"
# session - Mosquitto Publisher
sudo mosquitto_pub -h localhost -t "test" -m "Hello - enabled auth" -u "alice" -P "p4ssw0rd"
data:image/svg+xml,%3Csvg%20xmlns=%22http://www.w3.org/2000/svg%22%20width=%22750%22%20height=%22192%22%3E%3C/svg%3E
Với máy chủ Mosquitto đang chạy và xác thực được bật, giờ đây bạn sẽ có một môi giới tin nhắn an toàn. Tuy nhiên, để có thêm tính bảo mật, bạn cũng có thể thêm quyền thông qua chứng chỉ SSL/TLS vào kết nối và truyền dữ liệu Mosquitto cục bộ của mình.
Bảo mật Mosquitto bằng chứng chỉ SSL/TLS
Mặc dù máy chủ Mosquitto được bảo mật thông qua xác thực, nhưng vẫn có một vài bước bạn phải thực hiện để bảo mật việc triển khai Mosquitto. Điều này bao gồm việc triển khai chứng chỉ SSL/TLS sẽ mã hóa việc truyền dữ liệu giữa máy chủ Mosquitto và các ứng dụng.Trước khi bắt đầu, hãy đảm bảo rằng bạn đã tạo chứng chỉ SSL/TLS cho môi trường cục bộ của mình.
Để bắt đầu, hãy chạy lệnh openssl sau để tạo chứng chỉ dhparam. Điều này sẽ tạo chứng chỉ DHPARAM thành '/etc/mosquitto/certs/dhparam.pem'.
Mã:
sudo openssl dhparam -out /etc/mosquitto/certs/dhparam.pem 2048
data:image/svg+xml,%3Csvg%20xmlns=%22http://www.w3.org/2000/svg%22%20width=%22750%22%20height=%22140%22%3E%3C/svg%3E
Bây giờ hãy thay đổi quyền sở hữu thư mục chứng chỉ Mosquitto thành người dùng 'mosquitto' thông qua lệnh chmod bên dưới.
Mã:
sudo chown -R mosquitto: /etc/mosquitto/certs
Mã:
sudo nano /etc/mosquitto/conf.d/ssl.conf
Mã:
listener 8883
certfile /etc/letsencrypt/live/msqt.howtoforge.local/fullchain.pem
cafile /etc/letsencrypt/live/msqt.howtoforge.local/chain.pem
keyfile /etc/letsencrypt/live/msqt.howtoforge.local/privkey.pem
dhparamfile /etc/mosquitto/certs/dhparam.pem
Bây giờ hãy chạy lệnh systemctl sau để khởi động lại dịch vụ Mosquitto và áp dụng các thay đổi mới. Bây giờ máy chủ Mosquitto sẽ chạy với TLS bảo mật được bật.
Mã:
sudo systemctl restart mosquitto
Chạy lệnh 'mosquitto_sub' sau để mở Mosquitte Subscriber trên thiết bị đầu cuối hiện tại của bạn phiên.
Mã:
sudo mosquitto_sub -h localhost -t test -u "alice" -P "p4ssw0rd"
Mã:
sudo mosquitto_pub -h msqt.howtoforge.local -t test -m "hello again - with SSL enabled" -p 8883 --capath /etc/ssl/certs/ -u "alice" -P "p4ssw0rd"
data:image/svg+xml,%3Csvg%20xmlns=%22http://www.w3.org/2000/svg%22%20width=%22750%22%20height=%22280%22%3E%3C/svg%3E
Bật WebSockets trên Mosquitto
Tại thời điểm này, bạn đã cài đặt máy chủ Mosquitto và bảo mật cài đặt bằng cách cho phép xác thực tên người dùng/mật khẩu và kết nối bảo mật SSL/TLS. Sau đó, bạn sẽ tìm hiểu cách bật WebSockets qua MQTT trên máy chủ Mosquitto.WebSocket là một giao thức truyền thông có trạng thái cung cấp kênh song công toàn phần liên tục giữa máy chủ và máy khách bằng cách sử dụng lại cùng một kết nối đã được mở khi bắt đầu truyền thông (trong quá trình bắt tay mở).
Để bắt đầu, hãy tạo cấu hình mới '/etc/mosquitto/conf.d/websockets.conf' bằng lệnh trình chỉnh sửa nano sau.
Mã:
sudo nano /etc/mosquitto/conf.d/websockets.conf
Mã:
listener 8083
protocol websockets
certfile /etc/letsencrypt/live/msqt.howtoforge.local/fullchain.pem
cafile /etc/letsencrypt/live/msqt.howtoforge.local/chain.pem
keyfile /etc/letsencrypt/live/msqt.howtoforge.local/privkey.pem
Tiếp theo, chạy lệnh systemctl sau để khởi động lại dịch vụ Mosquitto và áp dụng các thay đổi mới. Máy chủ Mosquitto hiện sẽ chạy với WebSockets được bật trên kết nối SSL/TLS an toàn.
Mã:
sudo systemctl restart mosquitto
Dưới đây là MQTT Explorer với kết nối WebSockets.
data:image/svg+xml,%3Csvg%20xmlns=%22http://www.w3.org/2000/svg%22%20width=%22750%22%20height=%22387%22%3E%3C/svg%3E
Khi kết nối, bạn sẽ thấy bảng điều khiển sau.
data:image/svg+xml,%3Csvg%20xmlns=%22http://www.w3.org/2000/svg%22%20width=%22750%22%20height=%22436%22%3E%3C/svg%3E
Kết luận
Trong hướng dẫn này, bạn đã tìm hiểu cách cài đặt Mosquitto MQTT Message Broker trên Debian 11 máy chủ. Bạn cũng đã học cách bảo mật máy chủ Mosquitto bằng cách bật xác thực tên người dùng/mật khẩu và bảo mật việc truyền dữ liệu và kết nối Mosquitto thông qua chứng chỉ SSL/TLS. Ngoài ra, bạn đã bật giao thức WebSockets trên máy chủ Mosquitto cho phép bạn thiết lập kết nối giữa Subscriber và Producer theo cách không đồng bộ.Từ đây, giờ đây bạn có thể tận dụng cài đặt Mosquitto bằng cách tạo Cụm Mosquitto có tính khả dụng cao hoặc thiết lập bảng điều khiển quản trị Mosquitto thông qua Trung tâm quản lý Cedalo.