跳到主要内容

安全性

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 的安全性与其多租户架构紧密结合。每个租户都是一个完全隔离的环境:

  • 来自不同租户的客户端无法通信。
  • 主题按租户划分命名空间。
  • 一个租户中的安全漏洞不会影响其他租户的数据完整性。

有关如何配置租户的更多详细信息,请参阅多租户文档。