Thứ hai, 16/07/2018 | 00:00 GMT+7

Cách cài đặt và bảo mật Mosquitto MQTT Messaging Broker trên Ubuntu 18.04 [Quickstart]

MQTT là một giao thức nhắn tin giữa máy và máy, được thiết kế để cung cấp giao tiếp đăng ký / xuất bản nhẹ cho các thiết bị “Internet of Things”. Mosquitto là một server MQTT phổ biến (hay nhà broker , theo cách nói của MQTT) có sự hỗ trợ cộng đồng tuyệt vời và dễ cài đặt và cấu hình.

Trong hướng dẫn bắt đầu nhanh cô đọng này, ta sẽ cài đặt và cấu hình Mosquitto, đồng thời sử dụng certificate Let's Encrypt SSL đảm bảo lưu lượng MQTT của ta . Nếu bạn cần trình bày sâu hơn về bất kỳ bước nào, vui lòng xem lại các hướng dẫn sau:

Yêu cầu

Trước khi bắt đầu hướng dẫn này, bạn cần :

  • Server Ubuntu 18.04 với user không root, hỗ trợ sudo và firewall cơ bản được cài đặt , như chi tiết trong hướng dẫn cài đặt server Ubuntu 18.04 này
  • Một domain trỏ đến server của bạn. Hướng dẫn này sẽ sử dụng trình giữ chỗ mqtt.example.com trong suốt
  • Cổng 80 phải không được sử dụng trên server của bạn. Nếu bạn đang cài đặt Mosquitto trên máy có web server chiếm cổng này, bạn cần sử dụng một phương pháp khác để tìm nạp certificate , chẳng hạn như chế độ webroot của Certbot.

Bước 1 - Cài đặt phần mềm

Đầu tiên, ta sẽ cài đặt một repository tùy chỉnh để tải version Certbot mới nhất, ứng dụng Let's Encrypt:

  • sudo add-apt-repository ppa:certbot/certbot

Nhấn ENTER để chấp nhận, sau đó cài đặt gói phần mềm cho Mosquitto và Certbot:

  • sudo apt install certbot mosquitto mosquitto-clients

Tiếp theo, ta sẽ tìm nạp certificate SSL của bạn .

Bước 2 - Download certificate SSL

Mở cổng 80 trong firewall của bạn:

  • sudo ufw allow 80

Sau đó chạy Certbot để tìm nạp certificate . Đảm bảo thay thế domain server của bạn tại đây:

  • sudo certbot certonly --standalone --preferred-challenges http -d mqtt.example.com

Bạn sẽ được yêu cầu nhập địa chỉ email và đồng ý với các điều khoản dịch vụ. Sau khi làm như vậy, bạn sẽ thấy một thông báo cho biết quá trình đã thành công và nơi lưu trữ các certificate của bạn.

Tiếp theo, ta sẽ cấu hình Mosquitto để sử dụng các certificate này.

Bước 3 - Cấu hình Mosquitto

Đầu tiên, ta sẽ tạo một file password mà Mosquitto sẽ sử dụng để xác thực các kết nối. Sử dụng mosquitto_passwd để thực hiện việc này, đảm bảo thay thế tên user ưa thích của bạn :

  • sudo mosquitto_passwd -c /etc/mosquitto/passwd your-username

Bạn sẽ được yêu cầu nhập password hai lần.

Bây giờ, hãy mở file cấu hình mới cho Mosquitto:

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

Thao tác này sẽ mở một file trống. Dán vào phần sau:

/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 

Đảm bảo thay thế domain bạn đã sử dụng ở Bước 2 cho mqtt.example.com . Lưu file khi bạn hoàn tất.

Tệp này thực hiện như sau:

  • Tắt thông tin đăng nhập ẩn danh
  • Sử dụng file password của ta để kích hoạt xác thực password
  • Cài đặt trình nghe không an toàn trên cổng 1883 chỉ dành cho server cục bộ
  • Cài đặt trình nghe an toàn trên cổng 8883
  • Cài đặt trình nghe dựa trên websocket an toàn trên cổng 8083

Khởi động lại Mosquitto để nhận các thay đổi cấu hình:

  • sudo systemctl restart mosquitto

Kiểm tra đảm bảo dịch vụ đang chạy lại:

  • 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 └─6705 /usr/sbin/mosquitto -c /etc/mosquitto/mosquitto.conf

Trạng thái phải active (running) . Nếu không, hãy kiểm tra file cấu hình của bạn và khởi động lại. Một số thông tin khác có thể có trong file log của Mosquitto:

  • sudo tail /var/log/mosquitto/mosquitto.log

Nếu tất cả đều ổn, hãy sử dụng ufw để cho phép hai cổng mới thông qua firewall :

  • sudo ufw allow 8883
  • sudo ufw allow 8083

Bây giờ Mosquitto đã được cài đặt , ta sẽ cấu hình Certbot để khởi động lại Mosquitto sau khi gia hạn certificate của ta .

Bước 4 - Cấu hình Gia hạn Certbot

Certbot sẽ tự động gia hạn certificate SSL của ta trước khi chúng hết hạn, nhưng nó cần được yêu cầu khởi động lại dịch vụ Mosquitto sau khi làm như vậy.

Mở file cấu hình gia hạn Certbot cho domain của bạn:

  • sudo nano /etc/letsencrypt/renewal/mqtt.example.com.conf

Thêm tùy chọn renew_hook sau vào dòng cuối cùng:

/etc/letsencrypt/renewal/mqtt.example.com.conf
renew_hook = systemctl restart mosquitto 

Lưu file , sau đó chạy Certbot khô đảm bảo cú pháp ổn:

  • sudo certbot renew --dry-run

Nếu bạn không thấy lỗi, bạn đã hoàn tất. Hãy thử nghiệm server MQTT của ta tiếp theo.

Bước 5 - Kiểm tra Mosquitto

Ta đã cài đặt một số ứng dụng MQTT dòng lệnh ở Bước 1. Ta có thể đăng ký kiểm tra chủ đề trên trình nghe localhost như sau:

  • mosquitto_sub -h localhost -t test -u "your-user" -P "your-password"

Và ta có thể xuất bản với mosquitto_pub :

  • mosquitto_pub -h localhost -t test -m "hello world" -u "your-user" -P "your-password"

Để đăng ký bằng trình nghe bảo mật trên cổng 8883, hãy làm như sau:

  • mosquitto_sub -h mqtt.example.com -t test -p 8883 --capath /etc/ssl/certs/ -u "your-username" -P "your-password"

Và đây là cách bạn xuất bản cho người nghe an toàn:

  • mosquitto_pub -h mqtt.example.com -t test -m "hello world" -p 8883 --capath /etc/ssl/certs/ -u "your-username" -P "your-password"

Lưu ý ta đang sử dụng tên server đầy đủ thay vì server localhost . Vì certificate SSL của ta được cấp cho mqtt.example.com , nếu ta cố gắng kết nối an toàn với localhost ta sẽ gặp lỗi cho biết tên server không trùng với tên server certificate .

Để kiểm tra chức năng websocket, ta sẽ sử dụng một ứng dụng client MQTT dựa trên trình duyệt. Mở tiện ích client javascript Eclipse Paho trong trình duyệt của bạn và điền vào thông tin kết nối như sau:

  • Server lưu trữ là domain cho server Mosquitto của bạn, mqtt.example.com
  • Cổng8083
  • ClientId có thể được để giá trị ngẫu nhiên mặc định
  • Đường dẫn có thể được để giá trị mặc định là / ws
  • Tên user là tên user Mosquitto của bạn từ Bước 3
  • Mật khẩu là password bạn đã chọn ở Bước 3

Các trường còn lại có thể được để giá trị mặc định của chúng.

Sau khi nhấn Connect , client sẽ kết nối với server của bạn. Bạn có thể xuất bản và đăng ký bằng các ngăn Đăng kýXuất bản Thông báo bên dưới ngăn Kết nối .

Kết luận

Hiện ta đã cài đặt và thử nghiệm một server MQTT an toàn, được bảo vệ bằng password và được mã hóa SSL. Đây có thể đóng role là một nền tảng nhắn tin mạnh mẽ và an toàn cho IoT, tự động hóa gia đình hoặc các dự án khác của bạn.


Tags:

Các tin liên quan

Cách bật SFTP mà không cần quyền truy cập Shell trên Ubuntu 18.04
2018-07-13
Cách cài đặt Ruby on Rails với rbenv trên Ubuntu 18.04
2018-07-13
Cách cài đặt Git trên Ubuntu 18.04 [Quickstart]
2018-07-12
Cách cài đặt và bảo mật Mosquitto MQTT Messaging Broker trên Ubuntu 18.04
2018-07-12
Cách sử dụng Chế độ độc lập của Certbot để truy xuất chứng chỉ SSL Let's Encrypt trên Ubuntu 18.04
2018-07-11
Cách cài đặt WordPress với LEMP trên Ubuntu 18.04
2018-07-11
Cách sử dụng LVM để quản lý thiết bị lưu trữ trên Ubuntu 18.04
2018-07-11
Cách thiết lập đồng bộ hóa thời gian trên Ubuntu 18.04
2018-07-10
Cách cài đặt Hadoop ở chế độ độc lập trên Ubuntu 18.04
2018-07-10
Cách cài đặt và cấu hình GitLab trên Ubuntu 18.04
2018-07-09