Bảo mật MQTT: TLS, Authentication, ACL

Các bạn thân mến, trong các phần trước của series MQTT trong công nghiệp: PLCSCADA Gateway, chúng ta đã lần lượt tìm hiểu từ khái niệm nền tảng (Phần 1), cơ chế hoạt động publish/subscribe (Phần 2), phân tích chi tiết ba mức QoS, cơ chế đảm bảo truyền dữ liệu (Phần 3) cho đến cách xây dựng hệ thống thu thập dữ liệu hoàn chỉnh PLC – Gateway – SCADA thông qua MQTT (Phần 4).

Sau khi hệ thống đã được hình thành, sẽ không ít bạn đặt vấn đề tiếp theo là: “Làm sao để đảm bảo dữ liệu MQTT luôn an toàn khi truyền qua mạng nội bộ hoặc Internet?” Đây cũng là lý do BKAII sẽ cùng các bạn bước vào Phần 5 – Bảo mật MQTT, nơi tập trung vào các cơ chế bảo vệ cốt lõi gồm: TLS/SSL, chứng chỉ CA, xác thực username/password, token, phân quyền Access Control List (ACL) và các biện pháp giảm thiểu rủi ro tấn công mạng. Phần này đóng vai trò then chốt trước khi chúng ta tiếp tục sang các chủ đề nâng cao hơn như hiệu năng truyền tải, tối ưu tải hệ thống và thiết kế kiến trúc MQTT cho nhà máy lớn.

1. Bảo mật lớp truyền tải – TLS/SSL

Vì sao cần TLS?
MQTT truyền dữ liệu dạng plain text, nếu không mã hóa thì attacker có thể dễ dàng sniffing gói tin và lấy toàn bộ giá trị cảm biến, thông tin đăng nhập hoặc lệnh điều khiển.

Sử dụng TLS (Transport Layer Security) mang lại các lợi ích:

  • Mã hóa toàn bộ payload
  • Ngăn chặn tấn công MITM
  • Đảm bảo tính toàn vẹn dữ liệu
  • Xác thực hai chiều giữa Client và Broker

Các port MQTT sử dụng:

Kết nốiPort mặc định
MQTT không mã hóa 1883
MQTT với TLS 8883

Để triển khai TLS, cần chuẩn bị các chứng chỉ sau:

  • CA Certificate (Root CA): chứng chỉ gốc tạo sự tin cậy giữa client và broker.
  • Server Certificate: cài đặt trên MQTT broker.
  • Client Certificate (tùy chọn): dùng cho xác thực hai chiều Mutual TLS.

Lưu ý khi triển khai TLS: sử dụng certificate 2048–4096 bit, không dùng chứng chỉ hết hạn, lưu private key trong gateway ở dạng mã hóa, ưu tiên Mutual TLS cho ứng dụng công nghiệp.

2. Authentication – Xác thực tài khoản

Bên cạnh TLS, MQTT broker cần xác thực danh tính client để tránh truy cập trái phép.

a. Username / Password

Phương pháp đơn giản nhất, được sử dụng rộng rãi trong hệ thống nội bộ hoặc khi đã có TLS bảo vệ.

  • Không dùng mật khẩu mặc định
  • Không truyền password khi chưa bật TLS
  • Sử dụng password được băm theo SHA256/512

b. Xác thực bằng Token / JWT

Nhiều broker như EMQX, HiveMQ hỗ trợ JWT, giúp tăng bảo mật nhờ expiry time và không cần lưu mật khẩu thực tế.

3. Access Control List (ACL) – Phân quyền truy cập topic

ACL là lớp bảo mật tối quan trọng vì nhiều cuộc tấn công xảy ra khi client được phép publish/subscribe sai topic.

ACL cho phép:

  • Giới hạn quyền publish theo thiết bị
  • Giới hạn quyền subscribe theo dữ liệu
  • Quy định mức R, W hoặc RW
  • Ngăn wildcard không mong muốn

Ví dụ file ACL:

# PLC1 chỉ được gửi dữ liệu
user PLC1
topic write sensors/plc1/#

# Gateway chỉ được đọc dữ liệu từ PLC
user Gateway01
topic read sensors/+/data

# SCADA có toàn quyền
user SCADA01
topic readwrite #

Lỗi phổ biến: cho user được subscribe wildcard (#), dùng chung một tài khoản cho nhiều thiết bị hoặc phân quyền không tách theo từng topic.

4. Giảm rủi ro tấn công mạng trong hệ thống MQTT

4.1. Tách mạng OT – IT

  • MQTT broker đặt trong DMZ
  • Thiết bị OT kết nối qua VPN hoặc firewall

4.2. Hạn chế kết nối không cần thiết

  • Tắt anonymous login
  • Giới hạn số kết nối tối đa mỗi client
  • Timeout session thiết bị không hoạt động

4.3. Sử dụng Firewall và IDS/IPS

  • Chỉ mở các port cần thiết
  • Giám sát flooding, brute-force

4.4. Ký số payload

Tăng tính toàn vẹn dữ liệu bằng cách ký số payload trước khi gửi.

4.5. Bảo vệ Broker

  • Xử lý QoS phù hợp, tránh lạm dụng QoS 2
  • Tối ưu Keep Alive và Session Expiry
  • Bật TLS 1.2/1.3, tắt SSL cũ

5. Mô hình triển khai MQTT Security trong công nghiệp

PLC/Device ──TLS──► MQTT Broker (DMZ) ──► SCADA / Cloud
          └─ Username/Password
          └─ Client Certificate (tùy chọn)

Broker:
✓ TLS 1.2/1.3
✓ ACL phân quyền theo topic
✓ Tắt anonymous login
✓ IDS/IPS + Firewall
✓ Token-based authentication

Kết luận

Bảo mật MQTT không chỉ là bật TLS hay đặt mật khẩu mạnh. Đó là sự kết hợp giữa mã hóa, xác thực, phân quyền và bảo vệ hạ tầng mạng. Với hệ thống công nghiệp, bạn nên:

  • Bật TLS bắt buộc
  • Phân quyền ACL theo từng thiết bị
  • Dùng tài khoản riêng cho mỗi client
  • Ưu tiên Mutual TLS cho hệ thống lớn
  • Giám sát broker liên tục

Khi triển khai đúng, MQTT sẽ vừa nhanh – nhẹ – realtime, vừa đảm bảo an toàn tuyệt đối cho hệ thống IIoT/SCADA trong nhà máy.


 
 

Số lượng người đang truy cập...

Không thể hiển thị dữ liệu người dùng trực tuyến vào lúc này.