此教程的早期版本是由Melissa Anderson(https://www.digitalocean.com/community/users/melissaanderson)撰写的。
介绍
MongoDB,也被称为 Mongo,是一个开源文档数据库,用于许多现代Web应用程序. 默认情况下,它只允许来自同一服务器的连接。 如果您想远程管理MongoDB或连接到单独的应用程序服务器,您需要对默认配置做出一些更改。
在本教程中,您将配置 MongoDB 安装以安全允许从可信的远程计算机访问。 要做到这一点,您将更新您的防火墙规则,以提供远程机器访问 MongoDB 正在收听连接的端口,然后更新 Mongo 的配置文件以更改其 IP 绑定设置。
前提条件
要完成本教程,您将需要:
- 一个运行 CentOS 8. 的服务器. 该服务器应有一个非终端行政用户和一个配置有 " 防火墙 " 的防火墙。 通过遵循我们的CentOS 8的初始服务器设置指南来设置.
- 蒙戈语 DB 安装在您的服务器上 。 此教程假设您安装了 MongoDB 4. 4 或更新 。 您可以在 CentOS 8 (https://andsky.com/tech/tutorials/how-to-install-mongodb-on-centos-8) 上遵循我们的教程安装此版本。
- 第二台计算机,您将从中访问您的MongoDB实例。 为了简单起见,这个教程假设这个机器是另一个CentOS 8服务器. 就像你的蒙戈一样 DB服务器,这台机器应该有一个非根发式的行政用户和一个防火墙,其配置有[CentOS 8的初始服务器设置指南 (https://andsky.com/tech/tutorials/initial-server-setup-with-centos-8)所描述的"防火墙". 然而,第1步和第2步描述了在数据库服务器上实现远程连接的实际程序,不管远程机器运行的是何种操作系统,它们都会发挥作用. .
最后,虽然不需要完成本教程,但我们强烈建议您通过创建数据库的管理用户帐户并启用身份验证来保护您的 MongoDB 安装。 要做到这一点,请遵循我们的教程(How To Secure MongoDB on CentOS 8)(https://andsky.com/tech/tutorials/how-to-secure-mongodb-on-centos-8)。
第1步:调整防火墙
假设您遵循了先决条件的初始服务器设置教程并 [在您的服务器上设置), 您的蒙戈 从互联网上将无法访问DB安装。 如果您打算只在本地使用 MongoDB, 应用程序运行在同一服务器上, 这是推荐的安全设置 。 然而,如果您想要从远程位置连接到您的 MongoDB 服务器, 您必须通过添加一个新的防火墙规则来允许输入到数据库正在监听的端口的连接 .
首先,请检查您的 MongoDB 安装在哪个端口上使用 netstat
命令。 netstat
是一个命令行实用程序,显示有关活跃的 TCP网络连接的信息。
下列命令将将sudo netstat -plunt
产生的输出重定向到grep
命令,该命令会搜索包含字符串mongo
的任何行:
1sudo netstat -plunt | grep mongo
此示例输出表明 MongoDB 正在听取对 127.0.0.1
的连接,这是一个代表 localhost 的特殊回路地址,其默认端口是 27017
:
1[secondary_label Output]
2tcp 0 0 127.0.0.1:27017 0.0.0.0:* LISTEN 15918/mongod
在大多数情况下,MongoDB 只能从某些受信任的位置访问,例如另一个服务器托管应用程序. 使用firewalld
来配置此方法之一是在您的 MongoDB 服务器上运行以下firewall-cmd
命令,该命令会打开 MongoDB 的默认端口,同时只允许另一个受信任的服务器的 IP 地址。
运行以下命令,确保将trusted_server_ip
更改为您将使用来访问 MongoDB 实例的受信任远程机器的 IP 地址:
注:如果前一命令的输出表明您的 MongoDB 安装在非默认端口上收听,请在此命令中使用该端口号,而不是「27017」。
1sudo firewall-cmd --permanent --zone=public --add-rich-rule='rule family="ipv4" source address="trusted_server_ip" port protocol="tcp" port="27017" accept'
这个命令将永久添加一个 _rich 规则到防火墙的公共
区域。 丰富的规则是防火墙
中的功能,允许您通过使用一系列选项对谁可以访问您的服务器进行更详细的控制。 该命令中提供的规则规定,只有trusted_server_ip
地址应该允许通过墙进行连接。
如果该规则被添加成功,则命令将在输出中返回成功
:
1[secondary_label Output]
2success
重新加载防火墙以实施新规则:
1sudo firewall-cmd --reload
在未来,如果您想从另一个机器访问 MongoDB,请使用新机器的 IP 地址重新运行此命令,而不是trusted_server_ip
。
您可以通过使用--list-all
选项运行firewall-cmd
来验证防火墙设置的更改:
1sudo firewall-cmd --list-all
输出将包括新的丰富规则,允许流量从远程服务器端口27017
:
1[secondary_label Output]
2public (active)
3. . .
4 rich rules:
5 rule family="ipv4" source address="157.230.58.94" port port="27017" protocol="tcp" accept
您可以在 如何在 CentOS 8 上使用防火墙设置防火墙中了解更多关于 firewalld
的信息。
接下来,您将 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 的默认端口,你可以测试远程机器是否能够连接。
注:如前提所述,本教程假定您的远程计算机是运行CentOS 8的另一个服务器。
首先,使用 SSH 登录您的可信服务器:
1[environment local]
2ssh sammy@trusted_server_ip
测试您可信赖的远程服务器是否能够连接到 MongoDB 实例的一种方法是使用nc
命令。nc
是用于建立与 TCP 或 UDP 的网络连接的实用工具,因为它允许您指定 IP 地址和端口号。
從官方的CentOS儲存庫的版本實際上是一個實施名為ncat,它是由Nmap工程作為一個更新為netcat寫的。
通过键入安装 ncat:
1[environment second]
2sudo dnf install nc
当被提示时,按y
,然后按ENTER
,以确认您想要安装该包。
然后运行以下nc'命令,其中包括
-z'选项。 这限制了`nc'只扫描目标服务器上的监听守护进程,而不发送任何数据。 回顾蒙戈的必要安装教程 DB 作为服务守护进程运行,使得此选项可用于测试连接性. 它还包括了"v"选项,增加了命令的动词性能,导致ncat返回一些它本来不会返回的输出.
从您可信赖的远程服务器中执行以下nc
命令,确保将mongodb_server_ip
替换为您安装了MongoDB的服务器的IP地址:
1[environment second]
2nc -zv mongodb_server_ip 27017
如果受信任的服务器可以访问 MongoDB 对象,其输出将表明它已连接:
1[environment second]
2[secondary_label Output]
3Ncat: Version 7.70 ( https://nmap.org/ncat )
4Ncat: Connected to mongodb_server_ip:27017.
5Ncat: 0 bytes sent, 0 bytes received in 0.02 seconds.
假设您在远程服务器上安装了兼容版本的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-centos-8),您将关闭未经身份验证的用户访问您的数据库。在这种情况下,您需要使用指定有效用户名的URI,如下:
1[environment second]
2mongo "mongodb://username@mongo_server_ip:27017"
壳会自动提示您输入用户的密码。
通过此,您已确认您的 MongoDB 服务器可以接受来自可信服务器的连接。
结论
您现在可以从远程服务器访问 MongoDB 安装。在此时,您可以从可信服务器远程管理您的 Mongo 数据库。
如果您尚未配置管理用户并启用身份验证,任何有访问您的远程服务器的人都可以访问您的 MongoDB 安装. 如果您尚未这样做,我们强烈建议您遵循我们的指南 CentOS 8 上如何安全 MongoDB以添加管理用户并进一步锁定事物。