EMQX 配置允许匿名内部连接

EMQX configuration to allow anonymous internal connection

我正在使用 emqx 作为我的传感器网络的 mqtt 代理。这是我想要的配置。 我想允许两个不同的侦听器进行内部和外部连接。

听众 1 外部:0.0.0.0:8883 不允许匿名连接 emqx_auth_http 启用 这个侦听器用于我的 VPC 之外的传感器

听众 2 内部:127.0.0.1:11883 允许匿名连接 此侦听器适用于 运行 在同一台机器 (localhost)

上的一些服务

这是我的配置文件(相关选项)

##--------------------------------------------------------------------
## Authentication/Access Control
##--------------------------------------------------------------------

allow_anonymous = false

##--------------------------------------------------------------------
## Internal Zone
##--------------------------------------------------------------------

zone.internal.allow_anonymous = true


##--------------------------------------------------------------------
## Listeners
##--------------------------------------------------------------------

listener.tcp.external = 0.0.0.0:8883

listener.tcp.external.zone = external


##--------------------------------------------------------------------
## Internal TCP Listener for MQTT Protocol
##--------------------------------------------------------------------

listener.tcp.internal = 127.0.0.1:11883

listener.tcp.internal.zone = internal

侦听器 1 与我的自定义身份验证器 API 配合得很好。

但是 Listener 2(内部侦听器)没有按预期工作。它不允许匿名连接并向我的 API 身份验证器发出身份验证请求。

我做错了什么吗?

感谢您的帮助:)

昨天我在 emqX github 存储库上创建了一个问题。也许您想遵循该问题的解决方案。 https://github.com/emqx/emqx/issues/3225

这不是答案,但我正在努力解决同样的问题。我希望这能引导我们找到解决方案。

根据对这个问题的讨论回答问题https://github.com/emqx/emqx/issues/3225

问题是 HTTP 身份验证插件似乎不支持区域设置。为了达到内部区域认证配置,我们必须 ignore the HTTP auth as mentioned in the documentation.

Authentication succeeded HTTP

Status Code: 200

Ignore this certification HTTP

Status Code: 200 Body: ignore

Authentication failed HTTP

Status Code: other than 200

整理好后,下面的 EMQX 配置就可以工作了。

# Global 
allow_anonymous = false
# external
zone.external.allow_anonymous = false
listener.tcp.external = 0.0.0.0:1883
# internal
zone.internal.allow_anonymous = true
listener.tcp.internal = 127.0.0.1:11883

此设置确保 MQTT 客户端可以:

  • 在 11883 从本地主机匿名连接
  • 从我的 VPC 外部使用 HTTP 身份验证在 1883 上连接,并且
  • 无法从我的 VPC 外部匿名连接

在我看来,如果设置内部区域以允许匿名连接本身绕过 HTTP 身份验证会更好。