Openfire

出自 ArchWiki

本条目或章节需要语言、wiki 语法或风格改进。参见 Help:Style 以供参考。

原因:页面不符合典型的页面格式(在 Talk:Openfire 中讨论)

出自 Wikipedia

Openfire(之前称为 Wildfire 和 Jive Messenger)是一个用于可扩展消息处理和存在协议 (XMPP) 的即时消息 (IM) 和群聊服务器。
它使用 Java 编写,并根据 Apache License 2.0 获得许可。

在局域网本地 PC 上安装

本条目或章节正在考虑移除。

原因:本节与“远程服务器”上的相同,但实际上不会起作用,因为由于 NAT,没有外部 XMPP 服务器能够通过 LAN 上的防火墙建立 s2s 连接(在 Talk:Openfire 中讨论)

安装

确保计划运行 Openfire 服务器的 PC 是安全的/位于防火墙之后 - 一旦启动,任何有权访问端口 9090 和 9091 的人都可以访问管理界面。

对于 PC 上的本地服务器,在大多数情况下,Openfire 的集成数据库就足够了。如果预计有异常大的流量并且 PC 缺少 RAM,则可以使用 MySQL 数据库代替(参见#在远程创建数据库)。

安装 openfire 并启动 openfire.service

在 Web 浏览器中打开 127.0.0.1:9090 以完成设置过程,然后以 admin 身份登录并查看设置。

在远程服务器上安装

在远程创建数据库

警告: 稍后更改数据库相关设置可能需要部分或完全重新配置,即使已正确迁移也是如此。

Openfire 可以创建自己的平面文件数据库(它是 mysql 命令列表,执行并保存在 RAM 中),这应该被视为一种替代方案,因为 java 程序不支持开箱即用的 unix 套接字。检查 TCP/IP 是否已禁用

$ grep -n skip-networking /etc/mysql/my.cnf
50:skip-networking

(注释掉该选项/使用 bind-address = 127.0.0.1 来允许环回 TCP/IP,或者选择 #添加 Unix 套接字支持

需要安装一个可用的 MySQL 服务器,以便为 Openfire 创建一个外部数据库,如下所示

mysql
> CREATE DATABASE openfire_db;
> CREATE USER 'openfire_usr'@'localhost';
> GRANT ALL PRIVILEGES ON openfire_db.* TO 'openfire_usr'@'localhost' IDENTIFIED BY 'password';
> quit;

在远程安装和启动 Openfire

安装 openfire 软件包。

默认情况下,Openfire 管理界面将监听您的服务器的端口 9090 和 9091。如果端口未正确防火墙,则添加 <inteface>127.0.0.1</inteface>" 可能会(未经测试)用于临时保护服务器。

/etc/openfire/openfire.xml
    <adminConsole>
        <!-- Disable either port by setting the value to -1 -->
        <port>9090</port>
        <securePort>9091</securePort>
        <inteface>127.0.0.1</inteface>
    </adminConsole>

启动 远程服务器上的 openfire.service。使用 curl 测试管理界面是否可以在本地访问

$ curl -v 127.0.0.1:9090 && echo Yay, it works!

配置(从 PC)

客户端此时不应可以访问服务器

$ curl -v example.com:9090 && echo Oh no, it works!

从您的 PC 启动到您的服务器的 ssh 隧道

$ ssh -L -N 9090:localhost:9090 yourserver.example.com -p22

现在连接到远程 Web 界面应该可以工作了 - 使用 Web 浏览器访问 127.0.0.1:9090,这将启动设置并引导完成该过程。

用于设置的数据库

jdbc:mysql://127.0.0.1:3306/openfire_db?rewriteBatchedStatements=true

(使用之前创建的用户名/密码)

设置完成后,使用用户名 admin 登录(仅“admin”。而不是之前的 Web 表单建议的“admin 的电子邮件地址”)。

特别关注的默认设置

默认情况下,Openfire 配置为“准备就绪”。在服务器暴露于外部世界之前,应检查以下设置以确保这确实是实例应该执行/允许的操作。

  • 服务器 > 服务器设置 > 注册与登录
    • 每个人都可以通过支持它的应用程序自动创建新用户帐户
    • 允许无需帐户的匿名登录
  • 服务器 > 服务器设置 > 离线消息
    • 每个用户最多可以存储 100kb 的数据
  • 服务器 > 服务器设置 > 文件传输设置
    • Openfire 充当文件传输代理

配置后的远程服务器

可以在管理界面的索引页上或使用 netstat -tulpen | grep java 找到端口列表。假设没有启用的组件需要 UDP(如 jingle media proxy?)并且您不希望将管理 Web 界面暴露给外部世界,则以下 iptables 规则应该足以使 Openfire 工作

$ openfire_ports=(5222:5223 7070 7443 5269 5275:5276 5262:5263 7777 5229);
$ for port in $openfire_ports; do 
    echo iptables -A INPUT -p tcp --dport $port -j ACCEPT; done;
iptables -A INPUT -p tcp --dport 5222:5223 -j ACCEPT
iptables -A INPUT -p tcp --dport 7070 -j ACCEPT
iptables -A INPUT -p tcp --dport 7443 -j ACCEPT
iptables -A INPUT -p tcp --dport 5269 -j ACCEPT
iptables -A INPUT -p tcp --dport 5275:5276 -j ACCEPT
iptables -A INPUT -p tcp --dport 5262:5263 -j ACCEPT
iptables -A INPUT -p tcp --dport 7777 -j ACCEPT
iptables -A INPUT -p tcp --dport 5229 -j ACCEPT

技巧和窍门

添加 Unix 套接字支持

通过 unix 套接字连接到数据库与 java 应用程序需要一个带有 socketFactory 实现的 jdbc 驱动程序。[MariaDB] Connector/J 自 1.4 版本起支持通过套接字进行身份验证,并且可以通过 mariadb-jdbcAUR 安装,这也需要 jnaAUR (Java Native Access) 才能与 unix 套接字一起工作。安装两者。

本条目或章节的真实性存疑。

原因: 这个 systemd 服务覆盖似乎没有达到我预期的效果,所以请使用下一段中的解决方法,除非您知道如何使其工作:(在 Talk:Openfire 中讨论)
/etc/systemd/system/openfire.service.d/override.conf
[Service]
#override ExecStart
ExecStart=
# added the 2 AUR packages to class path
ExecStart=/usr/bin/java -server -DopenfireHome=/usr/share/openfire -Dopenfire.lib.dir=/usr/lib/openfire -cp "/usr/lib/openfire/startup.jar:/usr/share/java/mariadb-jdbc/mariadb-java-client.jar:/usr/share/java/jna.jar" -jar /usr/lib/openfire/startup.jar

相反,这目前有效(但有点难看)

# ln /usr/share/java/mariadb-jdbc/mariadb-java-client.jar /usr/lib/openfire/
# ln /usr/share/java/jna.jar /usr/lib/openfire/

如果已使用 TCP/IP 连接到同一数据库完成了 openfire 设置,请通过更改 xml 配置来切换到新驱动程序

/etc/openfire/openfire.xml
      <driver>org.mariadb.jdbc.Driver</driver>  
      <serverURL>jdbc:mariadb://127.0.0.1:3306/openfire_db?localSocket=/run/mysqld/mysqld.sock&writeBatchedStatements=true</serverURL>

当使用设置界面时,选择“MySQK”并将驱动程序和 serverURL 的值分别输入到 Web 表单的“JDBC 驱动程序类”和“数据库 URL”字段中。

重启 openfire.service - 可能需要之后再次启动设置界面 (#配置(从 PC))。

使用多个域

Openfire 不支持像 prosody 那样的多域/虚拟主机,但它可以与为多个域提供身份验证的 LDAP 服务器一起使用。

来自不同域的用户然后可以正常登录和通信,但这很混乱;副作用可能包括但不限于

  • 未列出的用户
  • 需要手动创建用户
  • 来自其他域的用户显示为默认域的成员
  • 来自其他域的用户与来自其他域的同名用户冲突
  • SSL 证书错误(不可能为不同域使用单独的证书)