安全性
YedMQ 提供多层安全架构,以确保消息传输、客户端访问和系统管理的安全性。
传输安全 (TLS/SSL)
YedMQ 支持加密连接,以防止窃听和中间人攻击。
MQTT over TLS
您可以通过在 yedmq.toml 中配置 tcp_tls 监听器来启用安全的 MQTT 连接(默认端口 8883):
[listener.tcp_tls]
external = "0.0.0.0:8883"
cert_file = "/path/to/cert.pem"
key_file = "/path/to/key.pem"
MQTT over WSS
对于 Web 应用程序,YedMQ 支持安全的 WebSocket(默认端口 8084):
[listener.wss]
external = "0.0.0.0:8084"
cert_file = "/path/to/cert.pem"
key_file = "/path/to/key.pem"
身份验证与授权
YedMQ 使用灵活的基于插件的系统进行身份验证和授权。
默认策略
如果没有加载安全插件,或者插件未显式处理请求,YedMQ 将遵循 yedmq.toml 中定义的默认策略:
[mqtt]
default_authentication = "allow" # 选项: "allow", "deny"
default_authorization = "allow" # 选项: "allow", "deny"
- allow: 默认允许访问。
- deny: 除非插件明确允许,否则拒绝访问。
基于插件的身份验证
身份验证过程在连接阶段验证客户端的身份。安全插件可以拦截连接请求并验证:
- 用户名和密码
- 客户端 ID
- 客户端证书
- IP 地址
验证通过后,插件还可以将客户端分配给特定的租户 ID,以确保数据隔离。
基于插件的授权 (ACL)
授权控制已通过身份验证的客户端可以执行哪些操作。YedMQ 通过插件支持访问控制列表 (ACL),用于:
- 发布 (Publish):在特定主题上发送消息的权限。
- 订阅 (Subscribe):从特定主题接收消息的权限。
插件可以实现复杂的逻辑,例如查询数据库(MySQL、PostgreSQL、Redis)或检查本地策略文件来确定权限。
管理 API 安全
YedMQ REST API 受到 Basic Authentication 的保护。您必须在 yedmq.toml 文件中定义授权用户才能访问管理功能:
[listener.api.auth]
users = [
{ username = "admin", password = "your_secure_password" }
]
所有对 /api/v1/ 端点的请求都必须包含带有有效凭据的 Authorization 标头。
租户隔离
YedMQ 的安全性与其多租户架构紧密结合。每个租户都是一个完全隔离的环境:
- 来自不同租户的客户端无法通信。
- 主题按租户划分命名空间。
- 一个租户中的安全漏洞不会影响其他租户的数据完整性。
有关如何配置租户的更多详细信息,请参阅多租户文档。