如何在 Ubuntu 18.04 上安装 Prosody
作者选择了Open Internet/Free Speech Fund作为[Write for DOnations](https:/ /do.co/w4do-cta) 程序.
介绍
Prosody是一个XMPP聊天服务器,支持TLS加密的一对一聊天和群聊室。 XMPP(Extensible Messaging and Presence Protocol)是一种开放的消息传递协议,正式名称为 Jabber。这意味着任何 XMPP 聊天客户端都可以连接到 Prosody 服务器并开始聊天。
XMPP 是由 Internet Engineering Task Force (IETF) 维护的成熟且开放的标准.它在许多应用程序中得到积极维护和部署,例如被数百万用户使用的 Google Talk。 XMPP 服务器,如 Prosody,是一种灵活的选择,适用于已经存在了二十多年的聊天服务器。
在本教程中,您将安装和配置支持一对一和群聊会话以及将文件上传到聊天面板进行共享的 Prosody 服务器。所有聊天会话都将受到 TLS 加密证书的保护,因此您的个人数据将保持私密。
先决条件
在开始本指南之前,您需要以下内容:
-
按照使用 Ubuntu 18.04 进行初始服务器设置 设置一台至少具有 512MB RAM 的 Ubuntu 18.04 服务器-04) 指南,包括启用 sudo 的非 root 用户和防火墙。
-
安装在本地系统上的 XMPP 聊天客户端。此 XMPP 客户端 页面上列出的任何聊天应用程序都将与您的 Prosody 服务器兼容。
-
两个指向您的服务器的主机名。您需要两个主机名,因为 Prosody 将一个用于直接聊天,另一个用于群聊室。按照我们的 DNS How-Tos 了解如何将主机名指向 DigitalOcean Droplets。本指南将使用以下两个示例主机名:
-
chat.your-domain:一对一聊天主机名。 -
room.your-domain:群聊室主机名。
以启用 sudo 的非 root 用户身份登录到您的服务器以启动本指南。
第 1 步 — 安装 Prosody
在此步骤中,您将自定义 Prosody APT 存储库添加到您的服务器,然后从中安装 Prosody。您正在使用 Prosody 存储库来确保安装最新的软件包。
首先,使用文本编辑器创建并打开一个新的存储库文件。此文件包含 APT 包管理器的 Prosody 存储库信息:
Sudonano / 等 / Apt / 疮。伊斯特。 d/p 损失 dy。伊斯特
将以下行添加到您的文件中:
/etc/apt/sources.list.d/prosody.list
deb https://packages.prosody.im/debian 仿生主
现在,您需要下载并安装 Prosody APT 公钥。您的服务器将使用它来确认 Prosody 包是由 Prosody 团队创建的并且没有被篡改。
以下命令使用 wget 实用程序将密钥下载到当前目录:
wget https://prosody.im/files/prosody-debian-packages.key
使用 apt-key add 命令将 Prosody 的密钥添加到 APT 的密钥环中:
sudo apt-key 添加 prosody-debian-packages.key
您现在可以删除不再需要的密钥:
rm 韵律-debian-packages.key
更新服务器的包数据库,使其包含来自 Prosody 存储库的更新包版本:
sudo apt 更新
您现在已准备好安装 Prosody 服务器包和一些额外的可选包:
sudo apt install prosody prosody-modules lua-dbi-sqlite3 lua-event
你安装的包如下:
-
prosody:韵律服务器。 -
prosody-modules:扩展 Prosody 服务器功能的附加 Prosody 模块。 -
lua-dbi-sqlite3: 使 Prosody 能够使用 SQLite 数据库。 -
lua-event:使 Prosody 能够同时处理更多的客户端。
您现在已经完成了 Prosody 的安装。在下一步中,您将获得两个 TLS 证书,Prosody 将使用它们来加密您的数据,因为它通过 Internet 进出 Prosody 服务器。
步骤 2 — 获取 TLS 证书
Prosody 使用 TLS 证书来加密服务器和客户端之间的连接。这些证书与您在访问具有“HTTPS” URL 的网站时使用的证书相同。 Let's Encrypt 是一个提供免费 TLS 证书的非营利组织。他们还提供了“certbot”实用程序来获取和管理他们的证书。在此步骤中,您将安装“certbot”实用程序并使用它为您指向服务器的两个主机名获取一对证书。
您将从 Let's Encrypt Ubuntu PPA 存储库 安装“certbot”,以确保您使用的是最新的软件包。
首先,运行以下命令来添加自定义存储库:
sudo add-apt-repository ppa:certbot/certbot
现在,安装“certbot”:
sudo apt install certbot
接下来,允许 HTTP 流量通过 UFW,以便 certbot 可以验证您的证书申请:
sudo ufw 允许 http
运行以下 certbot 命令,它将获取您的主机名之一的证书:
sudo certbot certonly --standalone --agree-tos --email your_email -d chat.your-domain
这些选项是:
-
--certonly:获取证书,不对服务器进行任何其他更改。 -
--standalone:为证书验证启动一个临时 Web 服务器。 -
--agree-tos:自动同意 Let's Encrypt 服务条款。 -
--email your_email:您将提交给 Let's Encrypt 的电子邮件地址,他们将使用它来通知您有关安全问题、证书到期通知和其他重要信息。 -
-d chat.your-domain:您打算用于 Prosody 服务器的主机名。
运行此命令时,系统会询问您是否要与 Electronic Frontier Foundation 共享您的电子邮件地址,这是可选的。然后证书的注册将继续,输出如下:
输出保存调试日志到 /var/log/letsencrypt/letsencrypt.log
选择的插件:Authenticator Standalone,Installer None
获得新证书
重要笔记:
- 恭喜!您的证书和链已保存在:
/etc/letsencrypt/live/chat.your-domain/fullchain.pem
您的密钥文件已保存在:
/etc/letsencrypt/live/chat.your-domain/privkey.pem
您的证书将于 2020 年 7 月 26 日到期。获得新的或经过调整的
将来此证书的版本,只需运行 certbot
再次。要以非交互方式更新*所有*您的证书,请运行
“certbot 更新”
- 如果您喜欢 Certbot,请考虑通过以下方式支持我们的工作:
捐赠给 ISRG / Let's Encrypt:https://letsencrypt.org/donate
捐赠给 EFF:https://eff.org/donate-le
再次运行相同的命令以获取第二个主机名的证书。
您现在有两个目录:
*/etc/letsencrypt/live/room.your-domain
/etc/letsencrypt/live/chat.your-domain
这些包含您的主机名的证书和密钥文件。
由于 Prosody 服务器不以 root 用户身份运行,因此需要更改目录和密钥文件的所有权和权限,以便 Prosody 服务器可以读取和使用它们。
Linux 上文件和目录的权限允许控制哪些用户和进程可以读取、写入和执行目录和文件夹。此控制可保护系统不被非授权用户修改,还可以保护私有文件(例如 TLS 私钥)不被非授权用户读取。
如果您不熟悉 Linux 用户和权限,文章 An Introduction to Linux Permissions 提供了很好的介绍。
第一步是使用以下命令将私钥的组所有者更改为 Prosody 服务器的组 prosody:
sudo chgrp 韵律 /etc/letsencrypt/live/room.your-domain/privkey.pem
sudo chgrp 韵律 /etc/letsencrypt/live/chat.your-domain/privkey.pem
chgrp 实用程序更改文件和目录的组所有者。在这里,您将组从默认的 root 更改为 prosody。
接下来,将包含 TLS 证书文件的目录的权限更改为“0755”。这些目录归 root 用户和 root 组所有。以下命令将更改这些目录的权限:
sudo chmod 0755 /etc/letsencrypt/archive
sudo chmod 0755 /etc/letsencrypt/live
新的 0755 对这些目录的权限意味着 root 用户具有读、写和执行权限。 root 组的成员具有读取和执行权限。系统上的所有其他用户和组都具有读取和执行权限。
现在,更改 TLS 私钥的权限:
sudo chmod 0640 /etc/letsencrypt/live/room.your-domain/privkey.pem
sudo chmod 0640 /etc/letsencrypt/live/chat.your-domain/privkey.pem
这些文件的“0640”权限意味着root用户对该文件具有读写权限。 prosody 组的成员对该文件具有读取权限。 prosody 组有一个成员,prosody 用户。这是 Prosody 服务器运行的用户,也是它将访问文件的用户。系统上的所有其他用户都无权访问该文件。
这两个命令使用 chmod 实用程序来修改哪些用户和组对文件和目录具有读取、写入和执行权限。
您可以测试 Prosody 是否可以读取私钥,方法是使用 sudo 以 cat 作为 prosody 用户读取私钥文件:
sudo -u prosody cat /etc/letsencrypt/live/chat.your-domain/privkey.pem
如果这成功,那么您将在屏幕上看到密钥文件的内容。
Prosody 使用包含证书和私钥的单个文件来加密文件上传和下载连接。此文件不是由 certbot 自动创建的,因此您必须手动创建它。
您将首先进入包含密钥和证书文件的目录,然后使用 cat 将它们的内容合并到一个新文件 key-and-cert.pem 中:
cd /etc/letsencrypt/live/chat.your-domain/
sudo sh -c 'cat privkey.pem fullchain.pem >key-and-cert.pem'
这个命令的开头,sudo sh -c,打开一个具有 root 用户权限的新子 shell,因此可以将新文件写入 /etc/letsencrypt/live/chat.your-domain/。
现在,使用以下命令更改此新文件的组和权限,以匹配您为其他私钥文件设置的组和权限:
sudo chmod 0640 密钥和证书.pem
sudo chgrp prosody key-and-cert.pem
移回用户的主目录:
光盘
最后,每次更新证书时都必须重新创建此文件,否则它将包含过期的证书。
certbot 带有一种称为“挂钩”的机制,允许在证书更新之前或之后运行脚本。您可以使用此机制运行脚本,该脚本将在每次证书更新后重新创建您运行的命令。
使用文本编辑器打开名为“/etc/letsencrypt/renewal-hooks/post/key-and-cert-combiner.sh”的新脚本文件:
Sudonano/Etc/Etzencrypt/Renewa l-Hoks/Post/Ky-And-sert-Combiner。嘘
然后,将以下内容添加到编辑器中:
/etc/letsencrypt/renewal-hooks/post/key-and-cert-combiner.sh
#!/usr/bin/env bash
设置-e
# 使用 cat 将证书和密钥合并到一个文件中
猫 /etc/letsencrypt/live/chat.your-domain/privkey.pem \
/etc/letsencrypt/live/chat.your-domain/fullchain.pem \
>/etc/letsencrypt/live/chat.your-domain/key-and-cert.pem
这就是你的 Bash 脚本是如何分解的:
-
#!/usr/bin/env bash:告诉系统使用 Bash 解释器来运行脚本。 -
set -e:如果任何命令失败,则使脚本退出。 -
>:将cat命令的输出重定向到右侧的新文件中。
在您使用以下命令授予它执行权限之前,该脚本无法运行:
sudo chmod +x /etc/letsencrypt/renewal-hooks/post/key-and-cert-combiner.sh
+x 赋予脚本执行权限。
接下来,通过运行以下“certbot”命令测试证书是否安装正确以及更新后挂钩脚本是否正常工作:
sudo certbot renew --dry-run
该命令告诉 certbot 更新证书,但使用 --dry-run 选项阻止 certbot 进行任何更改。如果一切都成功,那么您将看到以下输出:
输出恭喜,全部续订成功。以下证书已更新:
/etc/letsencrypt/live/chat.your-domain/fullchain.pem(成功)
/etc/letsencrypt/live/room.your-domain/fullchain.pem(成功)
** DRY RUN:模拟接近证书到期的“certbot renew”
**(以上测试证书未保存。)
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
运行 post-hook 命令:/etc/letsencrypt/renewal-hooks/post/key-and-cert-combiner.sh
您现在已经获得了 Prosody 服务器的 TLS 证书。在下一步中,您将编辑 Prosody 的主配置文件。
步骤 3 — 配置韵律
Prosody 有很多配置选项,这体现在主配置文件 /etc/prosody/prosody.cfg.lua 的大尺寸上。为了使这部分易于管理,您将从文件的开头向下工作,对文件进行编辑。
在开始编辑大型配置文件之前,最好制作一个副本,以便您可以参考和恢复原始文件。使用 cp 命令复制配置文件:
sudo cp /etc/prosody/prosody.cfg.lua /etc/prosody/prosody.cfg.lua.original
您现在在 /etc/prosody/prosody.cfg.lua.original 中拥有原始文件的副本。
接下来,使用文本编辑器打开配置文件:
Sudonano/等/Proso dy/Proso dy。 cfg。尿酸
在以下部分中,配置更改分为较小的任务。
创建管理员
Prosody 管理员是可以从其聊天客户端对 Prosody 服务器进行更改、向所有用户发送消息以及完成其他特权操作的用户。
Prosody 服务器管理员使用以下行进行设置:
/etc/prosody/prosody.cfg.lua
...
管理员 u003d { }
...
在此示例行中,用户 admin 将添加到示例服务器chat.your-domain:
/etc/prosody/prosody.cfg.lua
...
管理员 u003d { "admin@chat.your-domain" }
...
如果要添加另一个用户,则必须在第一个用户后加逗号:
/etc/prosody/prosody.cfg.lua
...
管理员 u003d { "admin@chat.your-domain", "sammy@chat.your-domain" }
...
启用韵律模块
Prosody 开发人员将许多功能放入可以启用或禁用的模块中。
通过删除它前面的 -- 来启用模块。例如,在这里,tls 模块被禁用:
模块已禁用——“tls”; -- 在 c2s/s2s 连接上添加对安全 TLS 的支持
在这里它被启用:
模块启用“tls”; -- 在 c2s/s2s 连接上添加对安全 TLS 的支持
本段之后是 Prosody 配置文件的已编辑模块部分,其中突出显示了已编辑的行:
/etc/prosody/prosody.cfg.lua
...
modules_enabled u003d {
-- 一般需要
“名册”; -- 允许用户拥有名册。推荐的 ;)
“萨斯劳德”; -- 客户端和服务器的身份验证。如果您想登录,建议使用。
“tls”; -- 在 c2s/s2s 连接上添加对安全 TLS 的支持
“回拨”; -- s2s 回拨支持
“迪斯科”; -- 服务发现
-- 不是必需的,但推荐
“碳”; -- 保持多个客户端同步
“打气”; -- 使用户能够发布他们的头像、心情、活动、播放音乐等
“私人的”; -- 私有 XML 存储(用于房间书签等)
“黑名单”; -- 允许用户阻止与其他用户的通信
“vcard4”; -- 用户配置文件(存储在 PEP 中)
“vcard_legacy”; -- 传统 vCard 和 PEP Avatar、vcard 之间的转换
- 很高兴有
“版本”; -- 回复服务器版本请求
“正常运行时间”; -- 报告服务器运行了多长时间
“时间”; -- 让其他人知道此服务器上的时间
“平”; -- 用 pong 回复 XMPP ping
“登记”; -- 允许用户使用客户端在此服务器上注册并更改密码
“妈妈”; -- 将消息存储在存档中并允许用户访问它
“csi_simple”; -- 简单的移动优化
-- 管理界面
“admin_adhoc”; -- 允许通过支持 ad-hoc 命令的 XMPP 客户端进行管理
--"admin_telnet"; -- 在 localhost 端口 5582 上打开 telnet 控制台界面
-- HTTP 模块
--“波什”; -- 启用 BOSH 客户端,也就是“Jabber over HTTP”
--“网络套接字”; -- 基于 WebSocket 的 XMPP
“http_files”; -- 通过 HTTP 从目录提供静态文件
“http_upload”; -- 启用用户之间的文件共享
-- 其他特定功能
--“限制”; -- 为 XMPP 连接启用带宽限制
“团体”; -- 共享名册支持
--"server_contact_info"; -- 发布此服务的联系信息
“宣布”; -- 向所有在线用户发送通知
- “欢迎”; -- 欢迎注册账号的用户
--“手表注册”; -- 提醒管理员注册
--"motd"; -- 登录时向用户发送消息
--"legacyauth"; -- 旧版身份验证。仅由一些老客户和机器人使用。
--“代理65”; -- 启用 NAT 后面的客户端可以使用的文件传输代理服务
}
...
您启用的模块如下:
-
mam:将聊天消息存储在服务器上,以便用户可以检索它们。 -
csi_simple:为移动客户端启用优化。 -
http_files:启用文件共享。 -
http_uploads:启用文件共享。 -
groups:启用用户可见性。 -
announce:允许管理员向所有用户发送公告。
设置数据库存储
您需要编辑的下一部分设置 Prosody 保存用户消息和其他数据的位置。默认设置是使用文本文件,但更可扩展的配置是将消息保存在数据库中。
Prosody 为数据库提供了三种选择; MySQL、PostgreSQL 和 SQLite。 SQLite 是最容易设置和维护的,使用最少的资源,并且适用于较小的部署。
通过删除前导 -- 启用以下两行,如下所示:
/etc/prosody/prosody.cfg.lua
...
storage u003d "sql" -- 默认为 "internal"
...
sql u003d { driver u003d "SQLite3", database u003d "prosody.sqlite" } -- 默认值。 “数据库”是文件名。
...
消息归档
您可以通过编辑以下行来决定服务器将旧聊天消息存储多长时间:
/etc/prosody/prosody.cfg.lua
...
archive_expires_after u003d "1w" -- 1 周后删除归档邮件
...
显示的默认周期为“1w”(一周)。使用“d”表示天,“w”表示周,“y”表示年。
加密文件上传和下载
https_certificate 行告诉 Prosody 在哪里查找您之前创建的用于文件传输的组合证书和密钥。
编辑它,使其使用组合文件的路径:
/etc/prosody/prosody.cfg.lua
...
https_certificate u003d "/etc/letsencrypt/live/chat.your-domain/key-and-cert.pem"
...
删除localhost
在默认配置中,Prosody 在 localhost 或 127.0.0.1 上侦听聊天连接。这在远程服务器上是不需要的。
通过将 -- 添加到该行来禁用此行为,使其在编辑后如下所示:
/etc/prosody/prosody.cfg.lua
...
--虚拟主机“本地主机”
...
更改最大文件上传大小
您的 Prosody 服务器通过将文件附加到聊天窗口来支持用户共享文件。用户可以共享的默认最大文件大小为 1MB。
通过将以下行添加到配置的末尾,将其设置为更高的值:
/etc/prosody/prosody.cfg.lua
...
http_upload_file_size_limit u003d 10485760
...
行尾的数字是以字节为单位的最大文件大小。此处显示的大小为“10485760”字节或 10MB。 GbMb 网站 提供了将 MB 转换为字节的便捷工具。
如果您想允许上传大于 10MB 的文件,那么您必须添加另一行来设置 http_max_content_size 变量。 http_max_content_size 必须大于最大文件上传大小。
在这里,最大文件大小设置为 20MB(20971520 字节),而 http_max_content_size 设置为 30MB:
/etc/prosody/prosody.cfg.lua
...
http_upload_file_size_limit u003d 20971520
http_max_content_size u003d 31457280
...
将 http_max_content_size 设置为比最大文件大小大 50%。
配置组文件
您在模块部分启用的groups 模块允许聊天客户端相互查看。
groups 模块读取包含组名及其成员的文件。通过将以下行添加到配置的底部来设置文件的位置和名称:
/etc/prosody/prosody.cfg.lua
...
groups_file u003d "/etc/prosody/sharedgroups.txt"
...
此行将 Prosody 配置为读取 /etc/prosody/sharedgroups.txt 中的文件以收集组信息。您将在步骤 4 中使用用户和组填充此文件。
在不同的终端中使用以下命令创建此文件:
sudo touch /etc/prosody/sharedgroups.txt
当不使用其他选项时,touch 实用程序会创建一个空文件。
添加聊天服务器虚拟主机配置
Prosody 使用以“VirtualHost”开头的配置块来启动使用您的主机名的聊天服务器。
将以下配置块添加到配置的底部:
/etc/prosody/prosody.cfg.lua
...
虚拟主机“chat.your-domain”
ssl u003d {
key u003d "/etc/letsencrypt/live/chat.your-domain/privkey.pem";
证书u003d“/etc/letsencrypt/live/chat.your-domain/fullchain.pem”;
}
...
配置选项:
-
VirtualHost:Prosody 将用于聊天服务器的主机名。 -
key:用于保护聊天连接的 TLS 私钥。 -
certificate:用于保护聊天连接的 TLS 私有证书。
添加聊天室服务器
此配置使 Prosody 能够为您的用户提供多用户聊天室。将以下配置块添加到配置文件底部的新部分中:
/etc/prosody/prosody.cfg.lua
...
组件“room.your-domain”“muc”
modules_enabled u003d { "mam_muc"; }
存储 u003d { muc_log u003d "sql"; }
ssl u003d {
key u003d "/etc/letsencrypt/live/room.your-domain/privkey.pem";
证书 u003d "/etc/letsencrypt/live/room.your-domain/fullchain.pem";
}
...
使用的选项:
-
Component:启用muc(多用户聊天)群聊模块以使用room.your-domain主机名。 -
modules_enabled u003d { "mam_muc"; }:启用群聊的消息归档。 -
storage:将聊天消息存档到 SQLite 数据库中。 -
key:用于保护聊天连接的 TLS 私钥。 -
certificate:用于保护聊天连接的 TLS 私有证书。
保存并退出编辑器。
现在,重新启动 Prosody 以启用新配置:
sudo systemctl restart prosody.service
您现在已经完成了对 Prosody 主配置文件的编辑。在下一步中,您将添加一个 Prosody 用户并将他们添加到一个组中。
第 4 步 — 添加 Prosody 用户和组
您必须先在命令行上将 Prosody 用户添加到您的 Prosody 服务器,然后他们才能登录。您将使用 prosody 软件包提供的 prosodyctl 工具来帮助管理 Prosody 服务器。
使用以下 prosodyctl 命令添加新用户:
sudo prosodyctl 注册 sammy chat.your-domain 密码
该用户现在可以连接到您的 Prosody 服务器。
如果您创建一些允许他们互相查看并查看其状态的组,您的用户会很感激。您可以通过创建组并使用您之前定义的组文件向其中添加用户来实现此目的。
打开组文件:
Sudonano/等/韵律/双关语组。文本
通过将组名放在方括号之间来设置组。组的成员被放置在组名称下的新行上。您可以根据需要创建任意数量的组,并且用户可以是多个组的成员。
这里是一个名为“Everyone”的组,它有两个成员:sammy 和 admin。
/etc/prosody/sharedgroups.txt
[每个人]
sammy@chat.your-domain
admin@chat.your-domain
同一组的所有成员都将能够“看到”其他成员,无论他们是否在线。
每次添加新用户或修改组信息时,都必须重新启动 Prosody 服务器:
sudo systemctl restart prosody.service
服务器配置剩下的就是允许 Prosody 通过防火墙进行通信,您将在下一节中执行此操作。
步骤 5 — 允许 Prosody 流量通过防火墙
Prosody 在 TCP 端口“5222”和“5322”上侦听来自客户端的连接。使用以下命令在 UFW 中打开这些端口:
sudo ufw 允许 5222,5322/tcp
韵律服务器现已完全安装和配置。
您现在可以使用聊天客户端连接到您的 Prosody 服务器。在下一步中,您将在本地系统或智能手机上配置 XMPP 客户端以连接到 Prosody 服务器。
步骤 6 — 配置 XMPP 聊天客户端
在此步骤中,您将 XMPP 客户端配置到 Prosody 服务器。您需要输入用户名、服务器主机名和密码才能连接。
您已将 Prosody 服务器配置为使用标准 XMPP 端口,并且 TLS 安全性将被自动处理,因此您无需设置它们来连接到您的客户端。
不同的聊天客户端可能会要求提供不同格式的用户名、密码和服务器主机名。用户名和服务器主机名有时像电子邮件地址一样放在一起,例如sammy@chat.your-domain。类似电子邮件的地址可以称为用户名或XMPP地址。
此图显示了 PSI 客户端的登录屏幕,需要在电子邮件地址表单中输入用户名和服务器主机名。

鉴于以下 Linux XMPP 客户端 Gajim 的帐户登录屏幕截图显示,用户名和主机名被赋予单独的输入字段。

XMPP 客户端只需要用户名、密码和服务器主机名即可登录。登录后,您将能够找到聊天组的其他成员,还可以创建群聊室在您的客户支持的情况下。
结论
在本文中,您设置了具有以下功能的 Prosody 服务器:
-
TLS加密
-
一对一聊天和群聊室。
-
文件共享
您还配置了 XMPP 聊天客户端以使用所有这些功能,从而为您与朋友和同事提供功能丰富的聊天。
如果您正在寻找远程通信的其他开源替代方案,请查看我们的 [如何安装 Jitsi Meet 教程](https://www.digitalocean.com/community/tutorials/how-to-install-jitsi-meet -on-ubuntu-18-04)。
更多推荐

所有评论(0)