如何在Ubuntu 20.04上安装和配置Prosody XMPP Server

Prosody是用Lua编写的免费开源XMPP服务器。 快速,轻巧。 XMPP是即时消息传递的绝佳协议。 本教程将向您展示如何在Ubuntu 20.04上安装和配置Prosody XMPP服务器。 完成本教程后,您将拥有自己的聊天服务器。

步骤1:在Ubuntu 20.04上安装Prosody

Prosody包含在默认的Ubuntu存储库中。 Prosody团队还维护一个软件包存储库。 如果要获取最新版本,则需要使用以下命令添加Prosody存储库。

echo 'deb https://packages.prosody.im/debian focal main' | sudo tee /etc/apt/sources.list.d/prosody.list

然后运行以下命令下载并导入Prosody公钥,该公钥使APT软件包管理器可以验证从此存储库下载的软件包的完整性。

wget https://prosody.im/files/prosody-debian-packages.key -O- | sudo apt-key add -

接下来,更新本地软件包索引并安装最新版本的Prosody。

sudo apt update

sudo apt install prosody

安装后,Prosody将自动启动。 您可以通过以下方式查看其状态:

systemctl status prosody

输出:

● prosody.service - Prosody XMPP Server
   Loaded: loaded (/lib/systemd/system/prosody.service; enabled; vendor preset: enabled)
   Active: active (running) since Sun 2020-04-19 13:58:40 UTC; 16s ago
     Docs: https://prosody.im/doc
 Main PID: 1894 (lua5.2)
    Tasks: 1 (limit: 1108)
   CGroup: /system.slice/prosody.service
           └─1894 lua5.2 /usr/bin/prosody -F

Apr 19 13:58:40 localhost systemd[1]: Started Prosody XMPP Server.

如果它没有运行,则可以使用以下命令启动它

sudo systemctl start prosody

要在系统启动时启用自动启动,请运行

sudo systemctl enable prosody

步骤2:在防火墙中打开端口

默认情况下,它侦听公用IP地址的TCP端口5269和5222,如以下命令所示。 (如果您的Ubuntu没有netstat命令,则可以使用 sudo apt install net-tools

sudo netstat -lnptu | grep lua

  • 端口5222用于客户端到服务器的连接。
  • 端口5269用于服务器到服务器的连接。

如果已在Ubuntu上启用UFW防火墙,则需要使用以下命令打开上述端口。

sudo ufw allow 5222,5269/tcp

步骤3:配置Prosody XMPP服务器

使用命令行文本编辑器(例如Nano)编辑主配置文件。

sudo nano /etc/prosody/prosody.cfg.lua

module_enabled {...} 部分中,您可以取消注释行以启用特定模块,或注释掉行以禁用特定模块。 每个模块都有一个说明,告诉您其功能。 您可能要启用BOSH模块,该模块代表 定向流 Ø版本 小号同步的 HTTP。 它允许通过HTTP进行XMPP通信。

韵律通过HTTP启用bosh jabber

接下来,在配置文件中向下滚动。 如果要允许从XMPP客户端注册帐户,请设置 allow_registration 真实。 请注意,您必须先知道如何防止滥用。 如果您不熟悉XMPP,则可能不希望允许XMPP客户端自行注册帐户。

allow_registration = true;

韵律仅允许加密通信,如以下两行所示。

c2s_require_encryption = true

s2s_require_encryption = true

但是,我们需要创建一个虚拟主机并安装TLS证书,以便可以对连接进行加密。 默认情况下,Prosody中只有一个虚拟主机:localhost,如以下行所示。

VirtualHost "localhost"

现在我们创建另一个虚拟主机,例如 chat.example.com。 在此文件中添加以下行。

VirtualHost "chat.example.com"

保存并关闭文件。 然后,我们需要从Let’s Encrypt获取并安装受信任的TLS证书。

步骤4:从Let’s Encrypt获得可信的TLS证书

发出以下命令在Ubuntu服务器上安装Let’s Encrypt客户端(certbot)。

sudo apt install certbot

如果尚未运行Web服务器,建议您安装一个(Apache或Nginx),因为使用Web服务器获取和安装TLS证书比使用其他方法更容易。

如果使用Apache Web服务器,则需要安装Apache插件。 (如果您的系统上尚未安装Apache Web服务器,则以下命令将安装它。)

sudo apt install python3-certbot-apache

如果您使用Nginx Web服务器,则安装Nginx插件。 (如果尚未在系统上安装Nginx Web服务器,则以下命令将安装它。)

sudo apt install python3-certbot-nginx

使用Apache Web服务器获取TLS证书

您需要具有一个Apache虚拟主机 chat.example.com 在获取“让我们加密TLS”证书之前。 创建虚拟主机文件:

sudo nano /etc/apache2/sites-available/prosody.conf

然后将以下文本粘贴到文件中。 更换 chat.example.com 您的真实域名。 不要忘记为其设置DNS A记录。

<VirtualHost *:80>        
        ServerName chat.example.com

        DocumentRoot /var/www/prosody
</VirtualHost>

保存并关闭文件。 然后创建webroot目录。

sudo mkdir /var/www/prosody

www-data (Apache用户)作为webroot的所有者。

sudo chown www-data:www-data /var/www/prosody -R

启用此虚拟主机。

sudo a2ensite prosody.conf

重新加载Apache以使更改生效。

sudo systemctl reload apache2

创建并启用虚拟主机后,运行以下命令以获取并安装“让我们加密TLS”证书。

sudo certbot --apache --agree-tos --redirect --hsts --staple-ocsp --email [email protected] -d chat.example.com

用您的实际数据替换红色文本。 您应该看到以下内容,这表示证书已成功获得。 您还可以查看存储证书的目录。

prosody xmpp letsencrypt certbot

使用Nginx Web服务器获取TLS证书

您需要具有Nginx虚拟主机才能 chat.example.com 在获取“让我们加密TLS”证书之前。 创建虚拟主机文件:

sudo nano /etc/nginx/conf.d/prosody.conf

接下来,将以下文本粘贴到文件中。 更换 chat.example.com 您的真实域名。 不要忘记为其设置DNS A记录。

server {
      listen 80;
      listen [::]:80;
      server_name chat.example.com;

      root /var/www/prosody/;

      location ~ /.well-known/acme-challenge {
         allow all;
      }
}

保存并关闭文件。 然后创建Web根目录。

sudo mkdir /var/www/prosody/

www-data (Nginx用户)作为Web根目录的所有者。

sudo chown www-data:www-data /var/www/prosody -R

重新加载Nginx以使更改生效。

sudo systemctl reload nginx

创建并启用虚拟主机后,运行以下命令以获取并安装带有Nginx插件的Let’s Encrypt证书。

sudo certbot --nginx --agree-tos --redirect --hsts --staple-ocsp --email [email protected] -d chat.example.com

您应该看到以下内容,这表示证书已成功获得。 您还可以查看存储证书的目录。

prosody xmpp letsencrypt certbot

步骤5:在Prosody中安装TLS证书

编辑主配置文件。

sudo nano /etc/prosody/prosody.cfg.lua

转到您的Prosody虚拟主机,并添加TLS证书和密钥文件。

ssl = {
      key = "/etc/letsencrypt/live/chat.example.com/privkey.pem";
     certificate = "/etc/letsencrypt/live/chat.example.com/fullchain.pem";
}

像这样:

prosody ssl虚拟主机

保存并关闭文件。 由于Prosody XMPP服务器以 prosody 用户,我们需要允许韵律用户使用以下命令读取TLS证书和密钥文件。

sudo setfacl -R -m u:prosody:rx /etc/letsencrypt/

步骤6:建立使用者帐户

可以使用以下命令创建Prosody XMPP服务器的用户帐户。 系统将提示您输入密码。

sudo prosodyctl adduser [email protected]

要更改密码,请运行

sudo prosodyctl passwd [email protected]

步骤7:重新启动韵律

通过运行以下命令检查配置文件的语法:

sudo prosodyctl check config

如果语法正确,请重新启动Prosody,以使更改生效。

sudo systemctl restart prosody

步骤8:配置XMPP客户端

本教程使用Pidgin即时通讯程序作为XMPP客户端。 移情是您可以使用的另一个客户端。 可以通过运行以下命令将它们安装在Ubuntu桌面上:

sudo apt install pidgin

sudo apt install empathy

首次启动时,您需要在Pidgin中添加一个帐户。 请点击 按钮。

prosody-xmpp-ubuntu

然后从协议列表中选择XMPP,然后输入您的用户名,域和密码。

install-prosody-ubuntu-20.04

按钮,您将登录。

设置BOSH

如前所述,BOSH允许您通过HTTP使用XMPP,即在Web浏览器中。 例如,Jitsi Meet视频会议软件使用BOSH将Prosody集成到网页中,因此与会者可以在加入在线视频会议时进行文本聊天。

如果启用了BOSH模块,请编辑Prosody配置文件(/etc/prosody/prosody.cfg.lua),并在配置文件末尾添加以下两行。

consider_bosh_secure = true;
cross_domain_bosh = true;
https_ssl = {
        certificate = "/etc/letsencrypt/live/chat.example.com/fullchain.pem";
        key = "/etc/letsencrypt/live/chat.example.com/privkey.pem";
    }

哪里:

  • 第一行强制执行安全的HTTPS连接。
  • 第二行将COR标头添加到BOSH响应中,以允许来自任何域的请求。
  • https_ssl参数为BOSH服务指定TLS证书和密钥文件。

保存并关闭文件。 然后重新启动Prosody。

sudo systemctl restart prosody

如果已在Ubuntu服务器上启用UFW防火墙,则需要使用以下命令打开端口5280和5281。

sudo ufw allow 5280,5281/tcp

完成本教程后,BOSH端点将在以下地址可用。 港口 5280 用于纯文本HTTP,端口 5281 用于HTTPS。

http://chat.example.com:5280/http-bind

要么

https://chat.example.com:5281/http-bind.

BOSH端点是客户端用于通过HTTP连接到XMPP服务器的URL。

prosody xmpp bosh设置

多用户聊天室

要启用MUC(多用户聊天),请在Prosody配置文件中添加以下行。 更换 conference.example.com 与您首选的子域。

Component "conference.example.com" "muc"
     restrict_room_creation = "admin"

第二行仅允许管理员创建房间。 要为XMPP服务器定义管理员,首先您需要使用 sudo prosodyctl adduser 命令如上所示。 然后在配置文件中,将帐户添加到 admin {...} 如下部分。

admins = { "[email protected]", "[email protected]" }

通过运行以下命令检查配置文件的语法:

sudo prosodyctl check config

如果语法正确,请重新启动Prosody,以使更改生效。

sudo systemctl restart prosody

故障排除

Prosody的主要日志文件是 /var/log/prosody/prosody.log。 还有一个错误日志 /var/log/prosody/prosody.err。 如果Prosody无法按预期工作,则错误日志是检查的好地方。

自动续订TLS证书

您可以创建Cron作业以自动续订TLS证书。 打开root用户的crontab文件。

sudo crontab -e

如果您使用Apache Web服务器,请在文件底部添加以下行。

@daily certbot renew --quiet && systemctl reload postfix dovecot apache2

如果您使用的是Nginx Web服务器,请添加以下行。

@daily certbot renew --quiet && systemctl reload postfix dovecot nginx

重新加载Postfix,Dovecot和Web服务器是使这些程序获取新证书和私钥所必需的。

包起来

而已! 我希望本教程可以帮助您在Ubuntu 20.04上安装和配置Prosody XMPP服务器。 与往常一样,如果您发现此帖子有用,请订阅我们的免费新闻简报以获取更多提示和技巧。

Sidebar