如何在 Ubuntu 18.04 上为 MongoDB 配置远程访问

此教程的早期版本是由Melissa Anderson(https://www.digitalocean.com/community/users/melissaanderson)撰写的。

介绍

MongoDB,也被称为 Mongo,是一个开源文档数据库,通常用于现代Web应用程序. 默认情况下,它只允许来自同一服务器的连接。 如果您想远程管理MongoDB或连接到单独的应用程序服务器,则需要对默认配置做出一些更改。

在本教程中,您将配置 MongoDB 安装以安全允许从可信的远程计算机访问。 要做到这一点,您将更新您的防火墙规则,以提供远程机器访问 MongoDB 正在收听连接的端口,然后更新其配置文件以更改其 IP 绑定设置。

前提条件

要完成本教程,您将需要:

  • 运行 Ubuntu 18.04 的服务器。 这个服务器应该有一个非根行政用户和一个配置有UFW的防火墙. 通过遵循我们的Ubuntu 18.04的初始服务器设置指南设置此功能.
  • 蒙戈语 DB 安装在您的服务器上 。 此教程假设您安装了 MongoDB 4. 4 或更新 。 您可以在 [如何在 Ubuntu 18. 04] (https://andsky.com/tech/tutorials/how-to-install-mongodb-on-ubuntu-18-04-source 上安装此版本。
  • 第二台计算机,您将从中访问您的MongoDB实例。 简而言之,本教程假设这台机器是另一台Ubuntu 18.04服务器,其非根行政用户和UFW防火墙按照我们的Ubuntu 18.04的初始服务器设置指南配置. 然而,第1步和第2步描述了在数据库服务器上实现远程连接的实际程序,不管远程机器运行的是何种操作系统,它们都会发挥作用. .

最后,虽然不需要完成本教程,但我们强烈建议您通过创建数据库的管理用户帐户并启用身份验证来保护MongoDB安装。 要做到这一点,请遵循我们在Ubuntu 18.04上的教程(https://andsky.com/tech/tutorials/how-to-secure-mongodb-on-ubuntu-18-04)。

第1步:调整防火墙

假设您遵循了先决条件的初始服务器设置教程,并 [启用了服务器上的 UFW 防火墙] (https://andsky.com/tech/tutorials/initial-server-setup-with-ubuntu-18-04# step-4-%E2%80%94-setting-up-a-basic-firewall), 您的Mongo 从互联网上将无法访问DB安装。 如果您打算只在本地使用 MongoDB, 应用程序运行在同一服务器上, 这是推荐的安全设置 。 然而,如果您想要从远程位置连接到您的 MongoDB 服务器, 您必须添加一个新的 UFW 规则, 允许进入数据库正在监听的端口 .

此命令通常会返回系统中每个打开文件的列表,但在与-i选项相结合时,它只列出与网络相关的文件或数据流。

下列命令将将由lsof -i产生的输出重定向到搜索名为mongogrep命令:

1sudo lsof -i | grep mongo

此示例输出显示mongod过程正在听取其默认端口27017上的连接:

1[secondary_label Output]
2. . .
3mongod 82221 mongodb 11u IPv4 913411 0t0 TCP localhost:27017 (LISTEN)
4. . .

在大多数情况下,MongoDB 只能从某些受信任的位置访问,例如另一个服务器托管应用程序. 配置此方法之一是在您的 MongoDB 服务器上运行以下命令,该命令在 MongoDB 的默认端口上打开访问,同时只允许另一个受信任的服务器的 IP 地址。

运行以下命令,确保将trusted_server_ip更改为您将使用来访问 MongoDB 实例的受信任远程机器的 IP 地址:

注:如果上一个命令的输出显示您的 MongoDB 安装在非默认端口上收听,请在这个命令中使用该端口号,而不是 27017

1sudo ufw allow from trusted_server_ip to any port 27017

在未来,如果您想从另一个机器访问 MongoDB,请使用新机器的 IP 地址重新运行此命令,而不是trusted_server_ip

您可以通过ufw验证防火墙设置的更改:

1sudo ufw status

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

1[secondary_label Output]
2Status: active
3
4To Action From
5--                         ------      ----
6OpenSSH ALLOW Anywhere
727017 ALLOW trusted_server_ip
8OpenSSH (v6)               ALLOW Anywhere (v6)

您可以在 [UFW Essentials: Common Firewall Rules and Commands] 中找到更先进的防火墙设置,以限制访问服务(https://andsky.com/tech/tutorials/ufw-essentials-common-firewall-rules-and-comands)。

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

步骤 2 — 配置公共 bindIP

在此时,尽管端口是开放的,但MongoDB 目前依赖于127.0.0.1,即本地路由网络接口,这意味着MongoDB 只能接受源于其安装的服务器的连接。

要允许远程连接,您必须编辑 MongoDB 配置文件 - /etc/mongod.conf - 以便额外将 MongoDB 绑定到您的服务器的公开可路由的 IP 地址。

在您喜爱的文本编辑器中打开 MongoDB 配置文件. 下面的示例使用nano:

1sudo nano /etc/mongod.conf

找到网络接口部分,然后找到bindIp值:

1[label /etc/mongod.conf]
2. . .
3# network interfaces
4net:
5  port: 27017
6  bindIp: 127.0.0.1
7
8. . .

向此行添加一个字符串,然后是您的 MongoDB 服务器的公共 IP 地址:

1[label /etc/mongod.conf]
2. . .
3# network interfaces
4net:
5  port: 27017
6  bindIp: 127.0.0.1,mongodb_server_ip
7
8. . .

如果您使用了nano,请按CTRL + X,Y,然后按ENTER

然后,重新启动 MongoDB 以执行此更改:

1sudo systemctl restart mongod

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

第3步:测试远程连接

现在,你已经配置了 MongoDB 安装,以便听取源于其公开可路由的 IP 地址的连接,并通过服务器的防火墙授予远程机器访问 Mongo 的默认端口,你可以测试远程机器是否能够连接。

注:正如前提部分所提到的,本教程假定您的远程计算机是运行 Ubuntu 18.04 的另一个服务器。

测试您可信赖的远程服务器是否能够连接到 MongoDB 实例的一种方法是使用nc命令。nc是用于建立与 TCP 或 UDP 的网络连接的实用工具,因为它允许您指定 IP 地址和端口号。

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

1[environment local]
2ssh sammy@trusted_server_ip

然后运行以下nc'命令,其中包括-z'选项。 这限制了`nc'只扫描目标服务器上的监听守护进程,而不发送任何数据。 回顾蒙戈的必要安装教程 DB 作为服务守护进程运行,使得此选项可用于测试连接性. 它还包括了"v"选项,增加了命令的动词性能,导致网猫返回一些它本来不会返回的输出.

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

1[environment second]
2nc -zv mongodb_server_ip 27017

如果受信任的服务器可以访问 MongoDB 对象,其输出将表明连接成功:

1[environment second]
2[secondary_label Output]
3Connection to mongodb_server_ip 27017 port [tcp/*] succeeded!

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

一个连接的方法是使用连接字符串URI(https://docs.mongodb.com/manual/reference/connection-string/),如下:

1[environment second]
2mongo "mongodb://mongo_server_ip:27017"

<$>[注] :如果你遵循推荐的教程(https://andsky.com/tech/tutorials/how-to-secure-mongodb-on-ubuntu-18-04),你将对未经身份验证的用户关闭访问您的数据库。在这种情况下,你需要使用指定有效用户名的URI,如下:

1[environment second]
2mongo "mongodb://username@mongo_server_ip:27017"

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

通过此,您已确认您的 MongoDB 服务器可以接受来自可信服务器的连接。

结论

您现在可以从远程服务器访问 MongoDB 安装。在此时,您可以从可信服务器远程管理您的 Mongo 数据库。

如果您尚未配置管理用户并启用身份验证,任何有访问您的远程服务器的人都可以访问您的 MongoDB 安装. 如果您尚未这样做,我们强烈建议您遵循我们在 Ubuntu 18.04 上如何安全 MongoDB 的指南(https://andsky.com/tech/tutorials/how-to-secure-mongodb-on-ubuntu-18-04)添加管理用户并进一步锁定事物。

Published At
Categories with 技术
comments powered by Disqus