此教程的早期版本是由Melissa Anderson(https://www.digitalocean.com/community/users/melissaanderson)撰写的。
介绍
MongoDB是一个以文档为导向的数据库,用于许多现代Web应用程序. 默认情况下,它只允许来自相同的服务器的连接。 如果您想远程管理MongoDB或连接到单独的应用程序服务器,则需要对默认配置做出一些更改。
在本教程中,您将配置 MongoDB 安装以安全允许从可信的远程计算机访问。 要做到这一点,您将更新您的防火墙规则,以提供远程机器访问 MongoDB 正在收听连接的端口,然后更新其配置文件以更改其 IP 绑定设置。
前提条件
要完成本教程,您将需要:
- 运行 Ubuntu 20.04 的服务器。 此服务器应当有一个非根站式行政用户和 个由UFW** 配置的防火墙. 通过遵循我们的Ubuntu 20.04的初始服务器设置指南设置此功能.
- 蒙戈语 DB 安装在您的服务器上 。 此教程假设您安装了 MongoDB 4. 4 或更新 。 您可以在 [如何在 Ubuntu 20. 04] (https://andsky.com/tech/tutorials/how-to-install-mongodb-on-ubuntu-20-04] 上安装此版本。
- 第二台计算机,您将从中访问您的MongoDB实例。 简而言之,本教程假设这台机器是又一款Ubuntu 20.04服务器,其非根行政用户和UFW防火墙按照我们的[Ubuntu 20.04的初始服务器设置指南]配置(https://andsky.com/tech/tutorials/initial-server-setup-with-ubuntu-20-04). 然而,第1步和第2步描述了在数据库服务器上实现远程连接的实际程序,不管远程机器运行的是何种操作系统,它们都会发挥作用. .
最后,虽然不需要完成本教程,但我们强烈建议您通过创建数据库的管理用户帐户并启用身份验证来保护您的MongoDB安装。 要做到这一点,请遵循我们在Ubuntu 20.04上如何保护MongoDB的教程(https://andsky.com/tech/tutorials/how-to-secure-mongodb-on-ubuntu-20-04)。
此外,您还可以参阅官方 MongoDB 建议(https://www.mongodb.com/docs/manual/core/security-hardening/)以及其 安全检查清单。
第1步:调整防火墙
假设您遵循了先决条件的初始服务器设置教程,并 [启用了服务器上的 UFW 防火墙] (https://andsky.com/tech/tutorials/initial-server-setup-with-ubuntu-20-04# step-4-%E2%80%94-setting-up-a-basic-firewall), 您的Mongo 从互联网上将无法访问DB安装。 如果您打算只在本地使用 MongoDB, 应用程序运行在同一服务器上, 这是推荐的安全设置 。 然而,如果您想要从远程位置连接到您的 MongoDB 服务器, 您必须添加一个新的 UFW 规则, 允许进入数据库正在监听的端口 .
此命令通常会返回系统中每个打开文件的列表,但在与-i
选项相结合时,它只列出与网络相关的文件或数据流。
下列命令将将由lsof -i
产生的输出重定向到搜索名为mongo
的grep
命令:
1sudo lsof -i | grep mongo
此示例输出显示 MongoDB 在其默认端口 27017
上收听连接:
1[secondary_label Output]
2mongod 82221 mongodb 11u IPv4 913411 0t0 TCP localhost:27017 (LISTEN)
在大多数情况下,MongoDB 只能从某些受信任的位置访问,例如另一个服务器托管应用程序或从用于管理远程 MongoDB 实例的本地机器。
运行以下命令,确保将trusted_machine_ip
更改为您将使用来访问 MongoDB 实例的可信远程计算机的 IP 地址。
注意:如果您不确定信任机器的 IP 地址,您可以运行以下弯曲
命令,从而访问网站icanhazip.com
,该命令将返回您运行命令的机器的 IP 地址:
1[environment second]
2curl -4 icanhazip.com
美元
此外,如果以前的命令的输出显示您的 MongoDB 安装在非默认端口上收听,请在这个命令中使用该端口号,而不是‘27017’:
1sudo ufw allow from trusted_machine_ip to any port 27017
在未来,如果您想从另一个机器访问 MongoDB,请使用新机器的 IP 地址再次运行此命令,而不是trusted_machine_ip
。
您可以通过ufw
验证防火墙设置的更改:
1sudo ufw status
输出将显示从远程服务器到端口 27017
的流量现在是允许的:
1[secondary_label Output]
2Status: active
3
4To Action From
5-- ------ ----
6OpenSSH ALLOW Anywhere
727017 ALLOW trusted_machine_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. . .
请注意,这应该是您安装了 MongoDB 的服务器的 IP 地址,而不是您信任的远程计算机的 IP 地址。
如果您使用了nano
,请按CTRL + X
,Y
,然后按ENTER
。
然后,重新启动 MongoDB 以执行此更改:
1sudo systemctl restart mongod
之后,您的 MongoDB 安装将能够接受您允许访问端口 27017
的任何机器的远程连接,作为最后一步,您可以测试您在步骤 1 中允许通过防火墙的可信机器是否可以访问运行在您的服务器上的 MongoDB 实例。
第3步:测试远程连接
现在,你已经配置了 MongoDB 安装,以便听取源于其公开可路由的 IP 地址的连接,并通过服务器的防火墙授予远程机器访问 Mongo 的默认端口,你可以测试远程机器是否能够连接。
注:正如前提部分所提到的,本教程假定您的远程计算机是运行 Ubuntu 20.04 的另一个服务器,在步骤 1 和步骤 2 中描述的启用远程连接的程序应该独立于您的远程计算机运行的操作系统,但本步骤中描述的测试方法在操作系统中并不普遍有效。
测试您可信赖的计算机是否能够连接到 MongoDB 实例的一种方法是使用nc
命令。nc
是用来建立网络连接的工具,使用 TCP 或 UDP。
首先,使用 SSH 登录您的可信服务器:
1[environment local]
2ssh sammy@trusted_machine_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-20-04),你将对未经身份验证的用户关闭访问您的数据库。在这种情况下,你需要使用指定有效用户名的URI,如下:
1[environment second]
2mongo "mongodb://username@mongo_server_ip:27017"
壳会自动提示您输入用户的密码。
通过此,您已确认您的 MongoDB 服务器可以接受来自可信服务器的连接。
结论
您现在可以从远程服务器访问 MongoDB 安装。在此时,您可以从可信服务器远程管理您的 MongoDB 数据库。
如果您尚未配置管理用户并启用身份验证,任何有访问您的远程服务器的人都可以访问您的 MongoDB 安装. 如果您尚未这样做,我们强烈建议您遵循我们在 Ubuntu 20.04 上如何安全 MongoDB 的指南(https://andsky.com/tech/tutorials/how-to-secure-mongodb-on-ubuntu-20-04)添加管理用户并进一步锁定事物。