安全认证
TMQTT 提供多层次的安全防护机制,包括身份认证、访问控制和速率限制。默认安全策略较为严格(匿名连接默认关闭),确保生产环境开箱即安全。
认证方式总览
TMQTT 支持以下认证方式,可根据场景单独使用或组合使用:
| 认证方式 | 适用场景 | 复杂度 |
|---|---|---|
| 用户名/密码 | 设备端简单认证,适合内部网络 | 低 |
| JWT Token | 无状态认证,适合开放平台和微服务 | 中 |
| mTLS 证书 | 高安全场景,如金融、医疗 | 高 |
| 链式认证 | 多种方式并存,按顺序尝试 | — |
匿名连接
配置项 auth.anonymous_allow 控制是否允许没有用户名密码的客户端连接。
- 默认值:
false(拒绝匿名连接) - 开发环境:可以设为
true方便调试 - 生产环境:务必保持
false,所有客户端必须通过认证才能连接
用户名密码认证
最基础的认证方式,客户端连接时提供用户名和密码,TMQTT 与本地密码文件比对。
密码文件格式:每行一条记录,格式为 用户名:Argon2id哈希值。
Argon2id 是目前推荐的密码哈希算法,能有效抵抗暴力破解。可以使用 TMQTT 提供的工具或第三方工具生成哈希值。
启用方式:在配置文件中指定密码文件路径:
[auth.password_file]
path = "/etc/tmqtt/passwd"JWT Token 认证
适合需要无状态认证的场景,客户端在连接时携带 JWT Token 作为密码,TMQTT 使用预配置的公钥验证签名。
支持的算法:RS256(RSA)和 ES256(椭圆曲线)
校验内容:
- 签名合法性
- Token 过期时间(可配置是否校验)
- Audience 受众声明(可配置期望的 audience 列表,防止其他系统签发的 Token 被复用)
启用方式:
[auth.jwt]
algorithm = "RS256"
public_key = "/etc/tmqtt/jwt.pub"
expiry_check = true
audience = ["tmqtt-broker"]证书认证(mTLS)
最高安全级别的认证方式。客户端连接时必须提供由可信 CA 签发的客户端证书,TMQTT 通过验证证书链确认客户端身份。
启用方式:在 TLS 监听配置中开启 mTLS:
[listener.tls]
bind = "0.0.0.0:8883"
cert = "/etc/tmqtt/server.crt"
key = "/etc/tmqtt/server.key"
ca_cert = "/etc/tmqtt/ca.crt"
mtls = true证书中的 Common Name(CN)字段可以作为客户端身份标识使用。
链式认证(多种方式组合)
TMQTT 支持同时配置多种认证方式,连接时会按顺序依次尝试,任一方式通过即认证成功。
例如,同时配置密码文件和 JWT,则客户端可以用密码登录,也可以用 JWT Token 登录。两种方式都接受,灵活适配不同客户端。
访问控制(ACL)
认证解决"你是谁"的问题,ACL 解决"你能做什么"的问题。TMQTT 支持基于配置文件的细粒度访问控制。
控制粒度:
- 可以按用户名或客户端 ID 设置规则
- 发布(Publish)和订阅(Subscribe)权限分开控制
- 支持主题通配符(
+和#) - 支持
{client_id}变量替换(客户端只能操作与自己 ID 相关的主题)
默认策略:无匹配规则时拒绝访问(安全优先)
热加载:修改 ACL 规则文件后,TMQTT 会自动检测并重新加载,无需重启服务。
速率限制
防止恶意客户端通过大量连接或消息洪泛攻击消耗 Broker 资源。
连接速率限制:限制每个 IP 地址每秒新建连接数。超过限制的连接会被直接拒绝。
发布速率限制:限制每个连接每秒发布的消息数量。超过限制的消息会被拒绝。
配置示例:
[auth.rate_limit]
max_connections_per_sec = 50
max_publish_per_sec = 500安全最佳实践
- 关闭匿名连接(
anonymous_allow = false) - 至少配置一种认证方式
- 启用 TLS 加密通信
- 配置 ACL 限制客户端只能访问必要主题
- 设置合理的速率限制
- 为管理 API 配置鉴权 Token
完整的安全加固清单请参见 性能与安全加固。
Copyright (c) 2026 桃子 TaoZi.Pub https://taozi.pub | MIT License