Ejabberd. 不同的端口 - 不同的访问

Ejabberd. 不同的端口 - 不同的访问

两个端口上都有连接...在 5288 上,用户通过浏览器的 Web 套接字进行连接,在 5222 上通过常规客户端进行连接...当没有访问限制时,一切都会连接,一切正常...如果我在客户端端口 5222 上仅向管理员添加访问权限,则 5288 上的 Web 套接字开始流动“服务服务拒绝访问。 SASL 绑定失败。” ...问题是,是否可以通过端口划分访问权限?我在哪里可以扭转它?

listen:
  -
    port: 5288
    module: ejabberd_http
    request_handlers:
      "/ ws": ejabberd_http_ws
    web_admin: true
  -
    port: 5222
    module: ejabberd_c2s
# access:
# - allow: admin

答案1

过了一段时间...在服务器故障星系中...

我将使用 ejabberd,因此...我花了一些时间学习 Erlang。如果我理解正确的话,那么可能有人认为“http”和“c2s”模块的“access”属性是通用的。此外,“ejabberd_http”模块根本没有此属性。读取配置时,始终只采用第一次读取“ejabberd_c2s”的第一个“access”。但是,正如我在问题中所写,这不是我的情况。我需要为“http”和“c2s”设置单独的访问权限。要解决问题:

  1. 仅出于顺序考虑,我创建了一个单独的文件“ejabberd_http_config.erl”(“ejabberd_c2s_config.erl”的副本),并更改了函数“get_c2s_limits/0”:
...
get_http_limits() ->
    HttpListen = ejabberd_config:get_option(listen, []),
    case lists:keysearch(ejabberd_http, 2, HttpListen) of
    false -> [];
    {value, {_Port, ejabberd_http, Opts}} ->
        select_opts_values(Opts)
    end.
...
  1. 在“ejabberd_http.erl”函数中的“listen_options/0”函数中添加了元组“{access, all}”。
  2. 在“ejabberd_http_ws.erl”中的函数“init/1”中将行“Opts = ejabberd_c2s_config:get_c2s_limits()++SOpts, ”更正为“Opts = ejabberd_http_config:get_http_limits()++SOpts, ”。

然后我简单地编译了这 3 个文件,并将替换后的模块上传到服务器。重新启动服务器,然后就好了。现在您可以分别为“http”和“c2s”设置访问权限。现在 Gajim(端口 5222)仅在管理员登录下连接,同时 websocket(端口 5288)可用于所有连接(默认为“access: all”,除非明确指定)。

相关内容