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 身份验证会更好。
我正在使用 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 身份验证会更好。