0

假设我在 RDBMS 数据库中有 10,000 个用户名,这些用户名将使用 Ejabberd 或 MongooseIM 等 XMPP 聊天服务,我将手动将它们放入数据库中。现在,上述 10,000 个用户名中的每 1000 个用户名在其 JID 用户名中都有固定前缀,例如:

1-1000 个用户名以 aa__ 开头(例如 - aa10001、aa10002 等)

1001-2000 个用户名以 bb__ 开头(例如 - bb10001、bb10002、...)

2000-3000 个用户名以 cc__ 开头(例如 - cc10001、cc10002、...)

等等......总共10个不同的前缀用户名

现在我只希望这 10 个不同的对不能知道其他前缀用户名对,并且不能向其他对发送任何类型的节(如消息、存在、IQ)(具有不同的前缀)

可能性:

  1. 如果我可以在阻止策略中使用一些正则表达式,那么这将比阻止个人更好。

  2. 我知道您可能会建议为每对使用不同的虚拟主机。但是管理这么多虚拟主机可能很困难,因为在上面的示例中,10K 只是更大图景的一个小示例。

如果您不清楚问题,请告诉我?

4

1 回答 1

1

我只是希望这 10 个不同的对不能知道其他前缀用户名对,并且不能向其他对(具有不同的前缀)发送任何类型的节(如消息、存在、IQ)

首先,玩 mod_filter。查看其示例配置,您可能可以使用它完成您想要的操作: https ://github.com/processone/ejabberd-contrib/tree/master/mod_filter

也许您可以根据用户名模式(“aa*”或类似的东西)定义 ACL,这样您就可以在一个虚拟主机中拥有所有用户。

如果唯一的解决方案需要为每个用户组提供一个虚拟主机,一些想法:

现在,上述 10,000 个用户名中的每 1000 个用户名在其 JID 用户名中都有固定前缀,例如:

正如您所提到的,您可以在 ejabberd 中为每个用户组定义一个虚拟主机:10001@aa.example.com... 或者为了不更改现有用户名:aa10001@aa.example.com...

也许如果我可以以某种易于管理的方式使用虚拟主机(经常添加新对)而不为每个添加新数据库,那将是有史以来最好的解决方案

是的,如果您像这样配置 ejabberd 并在创建数据库时使用 apropiate *.sql 文件,您可以将所有虚拟主机放在一个数据库中:

new_sql_schema: true

我可以在不停止服务器的情况下在配置中动态添加虚拟主机吗?

是的,它应该可以工作(这是最近的功能)。根据需要编辑 ejabberd.yml,然后重新加载:

$ ejabberdctl reload_config
于 2019-03-27T10:17:41.150 回答