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:
- Cách sử dụng Chế độ độc lập của Certbot để lấy certificate SSL của Let's Encrypt
- Cách cài đặt và bảo mật nhà broker nhắn tin MQTT Mosquitto
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.comtrong 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:
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:
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ổng là 8083
- 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ý và 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.
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.042018-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 và bảo mật Mosquitto MQTT Messaging Broker trên Ubuntu 18.04
2018-07-12
Cách cài đặt Git trên Ubuntu 18.04 [Quickstart]
2018-07-12
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 cài đặt WordPress với LEMP trên Ubuntu 18.04
2018-07-11
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 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
 

