Openfire
出自 Wikipedia
- Openfire(之前称为 Wildfire 和 Jive Messenger)是一个用于可扩展消息处理和存在协议 (XMPP) 的即时消息 (IM) 和群聊服务器。
- 它使用 Java 编写,并根据 Apache License 2.0 获得许可。
在局域网本地 PC 上安装
安装
确保计划运行 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 套接字一起工作。安装两者。
/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 证书错误(不可能为不同域使用单独的证书)