Skip to content

性能与安全加固

本文档提供生产环境部署 TMQTT 时的性能调优建议和安全加固清单,帮助你构建稳定、安全的生产系统。


性能优化

操作系统层面

优化项建议值说明
文件描述符上限1,048,576每个 MQTT 连接占用一个文件描述符,大规模连接场景必须调高
TCP 缓冲区根据网络条件调整TMQTT 默认使用系统默认值,高吞吐场景可适当调大
TCP 保活60 秒及时检测断开的连接,释放资源
关闭 Nagle 算法启用(默认已启用)减少小包延迟

TMQTT 配置

配置项建议值说明
listener.tcp.max_connections按实际规模设置防止连接数超出系统承载能力
session.max_inflight32-128根据消息并发需求调整,越大并发确认越多但内存占用越高
session.max_packet_size按需设置限制单条消息大小,防止恶意超大消息
auth.rate_limit.max_connections_per_sec50-100限制每秒新建连接数,防止连接风暴
auth.rate_limit.max_publish_per_sec500-1000限制单客户端发布速率,防止洪泛攻击

工作线程数

performance.worker_threads 控制 Tokio 运行时线程数。默认值 0 表示等于 CPU 核心数,一般无需修改。

io_uring 后端(Linux)

在 Linux 上启用 io-uring Feature 后,TMQTT 可使用 Linux io_uring 高性能网络后端,在大规模连接场景下可获得显著的性能提升。

bash
cargo build --release --features io-uring

注意:io_uring 仅在 Linux 5.1+ 内核上可用。


安全加固清单

在生产环境部署前,建议逐项检查以下安全措施:

网络安全

  • [ ] 仅开放必要端口(1883/8883/8083),不对外暴露管理端口(8080/9090)
  • [ ] 启用 TLS 加密通信,禁用明文 TCP 连接
  • [ ] 配置防火墙规则,管理 API 仅限内网访问
  • [ ] 使用强 TLS 版本(TLS 1.2+),避免使用弱密码套件

认证与授权

  • [ ] 关闭匿名连接(anonymous_allow = false
  • [ ] 配置至少一种认证方式(密码/JWT/mTLS)
  • [ ] 配置 ACL 规则,限制客户端只能访问必要主题
  • [ ] 设置合理的连接速率和发布速率限制

配置安全

  • [ ] 为管理 API 配置 auth_token
  • [ ] 确保配置文件权限受限(仅运行用户可读)
  • [ ] 敏感信息(密码、Token)不要硬编码在配置文件中

运行安全

  • [ ] 使用非 root 用户运行 TMQTT 进程
  • [ ] 配置 systemd 自动重启策略
  • [ ] 启用持久化存储(RocksDB),防止数据丢失
  • [ ] 定期备份数据目录(如 /var/lib/tmqtt

监控与告警

  • [ ] 启用 Prometheus 指标导出
  • [ ] 配置 Grafana 仪表盘
  • [ ] 设置关键指标告警(连接数异常增长、认证失败率高、消息丢弃等)
  • [ ] 日志接入集中式日志系统(ELK/Loki)

安全事件响应

检测认证暴力破解

监控 tmqtt_auth_failure_total 指标,如果短时间内某 IP 的认证失败次数异常增高,可能正在遭受暴力破解攻击。

响应

  1. 确认 rate_limit.max_connections_per_sec 已配置
  2. 在防火墙层面对可疑 IP 临时封禁
  3. 检查日志确认攻击来源

检测消息洪泛

监控 messages_received_total 的增长速率,异常突增可能表示有客户端在洪泛发送消息。

响应

  1. 确认 rate_limit.max_publish_per_sec 已配置
  2. 通过管理 API 踢出可疑客户端:DELETE /api/v1/sessions/{client_id}
  3. 检查 ACL 规则是否限制了该客户端的主题范围

备份与恢复

数据备份

使用 RocksDB 持久化存储时,需要定期备份以下数据:

  • 数据目录(storage.path 配置,默认 ./data
  • 配置文件(config.toml、密码文件、ACL 规则文件)
  • TLS 证书和密钥文件

备份方式

RocksDB 支持在线备份,无需停止 TMQTT 进程。可以使用文件系统快照或 rsync 等方式。

恢复

将备份的数据目录和配置文件恢复到对应位置,启动 TMQTT 即可。持久会话和离线消息会自动从 RocksDB 中加载。

Copyright (c) 2026 桃子 TaoZi.Pub https://taozi.pub | MIT License