如何在Ubuntu20.04上为MongoDB配置远程访问

来自菜鸟教程
跳转至:导航、​搜索

本教程的早期版本由 Melissa Anderson 编写。

介绍

MongoDB 是许多现代 Web 应用程序中使用的面向文档的数据库。 默认情况下,它只允许来自安装它的同一服务器上的连接。 如果您想远程管理 MongoDB 或将其连接到单独的应用程序服务器,您需要对默认配置进行一些更改。

在本教程中,您将配置 MongoDB 安装以安全地允许从受信任的远程计算机进行访问。 为此,您将更新防火墙规则以提供远程计算机访问 MongoDB 正在侦听连接的端口,然后更新其配置文件以更改其 IP 绑定设置。 然后,作为最后一步,您将测试您的远程计算机是否能够成功连接到您的数据库。

先决条件

要完成本教程,您需要:

  • 运行 Ubuntu 20.04 的服务器。 此服务器应具有非 root 管理用户和配置了 UFW 的防火墙。 按照我们的 Ubuntu 20.04 初始服务器设置指南进行设置。
  • MongoDB 安装在您的服务器上。 本教程假设您安装了 MongoDB 4.4 或更新版本。 您可以按照我们关于 如何在 Ubuntu 20.04 上安装 MongoDB 的教程安装此版本。
  • 您将从中访问 MongoDB 实例的第二台计算机。 为简单起见,本教程假设这台机器是另一个 Ubuntu 20.04 服务器,具有非 root 管理用户和按照我们的 Ubuntu 20.04 初始服务器设置指南配置的 UFW 防火墙。 但是,描述在数据库服务器上启用远程连接的实际过程的步骤 1 和 2 将起作用,而不管远程计算机运行的是什么操作系统。

最后,虽然不需要完成本教程,但我们 强烈 建议您通过为数据库创建管理用户帐户并启用身份验证来保护 MongoDB 安装。 为此,请按照我们关于 如何在 Ubuntu 20.04 上保护 MongoDB 的教程进行操作。

第 1 步 — 调整防火墙

假设您遵循先决条件初始服务器设置教程并 在您的服务器 上启用了 UFW 防火墙,您的 MongoDB 安装将无法从 Internet 访问。 如果您打算仅在本地将 MongoDB 与在同一服务器上运行的应用程序一起使用,则这是推荐且安全的设置。 但是,如果您希望能够从远程位置连接到 MongoDB 服务器,则必须通过添加新的 UFW 规则来允许传入连接到数据库正在侦听的端口。

首先使用 lsof 命令检查 MongoDB 安装正在侦听的端口。 此命令通常会返回系统中每个打开文件的列表,但与 -i 选项结合使用时,它仅列出与网络相关的文件或数据流。

以下命令会将 lsof -i 生成的输出重定向到 grep 命令,该命令搜索名为 mongo 的字符串:

sudo lsof -i | grep mongo

此示例输出显示 MongoDB 正在其默认端口 27017 上侦听连接:

Outputmongod    82221         mongodb   11u  IPv4 913411      0t0  TCP localhost:27017 (LISTEN)

在大多数情况下,只能从某些受信任的位置访问 MongoDB,例如托管应用程序的另一台服务器或用于管理远程 MongoDB 实例的本地计算机。 一种配置方法是在您的 MongoDB 服务器上运行以下命令,这将打开 MongoDB 的默认端口的访问权限,同时明确地只允许其他受信任机器的 IP 地址。

运行以下命令,确保将 trusted_machine_ip 更改为您将用于访问 MongoDB 实例的受信任远程计算机的 IP 地址。

注意:如果不确定信任机器的IP地址,可以运行以下curl命令。 这将访问网站 icanhazip.com,它将返回您运行命令的机器的 IP 地址:

curl -4 icanhazip.com

此外,如果上一个命令的输出显示您安装的 MongoDB 正在侦听非默认端口,请在此命令中使用该端口号代替 27017

sudo ufw allow from trusted_machine_ip to any port 27017

将来,如果您想从另一台机器访问 MongoDB,请使用新机器的 IP 地址代替 trusted_machine_ip 再次运行此命令。

您可以使用 ufw 验证防火墙设置的更改:

sudo ufw status

输出将显示现在允许从远程服务器到端口 27017 的流量:

OutputStatus: active

To                         Action      From
--                         ------      ----
OpenSSH                    ALLOW       Anywhere
27017                      ALLOW       trusted_machine_ip
OpenSSH (v6)               ALLOW       Anywhere (v6)

您可以在 UFW Essentials: Common Firewall Rules and Commands 中找到更多高级防火墙设置来限制对服务的访问。

接下来,您将 MongoDB 绑定到服务器的公共 IP 地址,以便您可以从远程计算机访问它。

第 2 步 — 配置公共 bindIP

此时,即使端口是开放的,MongoDB 当前也绑定到本地环回网络接口 127.0.0.1。 这意味着 MongoDB 只能接受来自安装它的服务器上的连接。

要允许远程连接,您必须编辑 MongoDB 配置文件 — /etc/mongod.conf — 以另外将 MongoDB 绑定到您信任的远程计算机可以访问的 IP 地址。 这样,您的 MongoDB 安装将能够侦听从远程机器到您的 MongoDB 服务器的连接。

在您首选的文本编辑器中打开 MongoDB 配置文件。 以下示例使用 nano

sudo nano /etc/mongod.conf

找到 network interfaces 部分,然后找到 bindIp 值:

/etc/mongod.conf

. . .
# network interfaces
net:
  port: 27017
  bindIp: 127.0.0.1

. . .

在这一行添加一个逗号,后跟您的 MongoDB 服务器的公共 IP 地址:

/etc/mongod.conf

. . .
# network interfaces
net:
  port: 27017
  bindIp: 127.0.0.1,mongodb_server_ip

. . .

请注意,这应该是您安装了 MongoDB 的服务器的 IP 地址, 而不是 您信任的远程机器的 IP 地址。

保存并关闭文件。 如果您使用 nano,请按 CTRL + XY,然后按 ENTER

然后,重新启动 MongoDB 以使此更改生效:

sudo systemctl restart mongod

之后,您的 MongoDB 安装将能够接受来自您允许访问端口 27017 的任何机器的远程连接。 作为最后一步,您可以测试您在步骤 1 中允许通过防火墙的受信任机器是否可以访问您服务器上运行的 MongoDB 实例。

第 3 步 — 测试远程连接

现在您已将 MongoDB 安装配置为侦听源自其可公开路由的 IP 地址的连接,并通过服务器的防火墙授予远程计算机访问 Mongo 的默认端口的权限,您可以测试远程计算机是否能够连接。

注意:如先决条件部分所述,本教程假设您的远程计算机是另一台运行 Ubuntu 20.04 的服务器。 无论您的远程计算机运行什么操作系统,步骤 1 和 2 中概述的启用远程连接的过程都应该有效,但是此步骤中描述的测试方法不能在操作系统中通用。


测试您的受信任计算机是否能够连接到 MongoDB 实例的一种方法是使用 nc 命令。 ncnetcat 的缩写,是一个用于与 TCP 或 UDP 建立网络连接的实用程序。 在这种情况下进行测试很有用,因为它允许您同时指定 IP 地址和端口号。

首先,使用 SSH 登录到您信任的服务器:

ssh sammy@trusted_machine_ip

然后运行以下 nc 命令,其中包括 -z 选项。 这将 nc 限制为仅扫描目标服务器上的侦听守护程序而不向其发送任何数据。 回想一下 先决条件安装教程 中,MongoDB 作为服务守护进程运行,这使得该选项对于测试连接性很有用。 它还包括 v 选项,它增加了命令的详细程度,导致 netcat 返回一些否则不会返回的输出。

从您信任的远程服务器 运行以下 nc 命令 ,确保将 mongodb_server_ip 替换为安装 MongoDB 的服务器的 IP 地址:

nc -zv mongodb_server_ip 27017

如果受信任的服务器可以访问 MongoDB 守护程序,则其输出将指示连接成功:

OutputConnection to mongodb_server_ip 27017 port [tcp/*] succeeded!

假设您在远程服务器上安装了兼容版本的 mongo shell,此时您可以直接连接到主机服务器上安装的 MongoDB 实例。

一种连接方式是使用 连接字符串 URI,如下所示:

mongo "mongodb://mongo_server_ip:27017"

注意:如果您按照推荐的如何在 Ubuntu 20.04 上保护 MongoDB 教程,您将关闭未经身份验证的用户访问您的数据库。 在这种情况下,您需要使用指定有效用户名的 URI,如下所示:

mongo "mongodb://username@mongo_server_ip:27017"

shell 会自动提示您输入用户密码。


这样,您已经确认您的 MongoDB 服务器可以接受来自受信任服务器的连接。

结论

您现在可以从远程服务器访问您的 MongoDB 安装。 此时,您可以从受信任的服务器远程管理您的 MongoDB 数据库。 或者,您可以将应用程序配置为在受信任的服务器上运行并远程使用数据库。

如果您尚未配置管理用户并启用身份验证,则有权访问您的远程服务器的任何人也可以访问您的 MongoDB 安装。 如果您还没有这样做,我们强烈建议您按照我们关于 如何在 Ubuntu 20.04 上保护 MongoDB 的指南添加管理用户并进一步锁定。