为 MongoDB 配置 Windows netsh 防火墙

在本页面

在 Windows Server 系统上,netsh程序提供了用于 ManagementWindows 防火墙的方法。这些防火墙规则使 Management 员可以控制哪些主机可以连接到系统,并通过限制可以连接到系统的主机来限制风险。

本文档概述了 Windows 防火墙的基本配置。使用这些方法作为大型网络组织的起点。有关 MongoDB 的安全实践和风险 Management 的详细概述,请参阅Security

See also

Windows Firewall Microsoft 提供的文档。

Overview

Windows 防火墙按照由规则类型确定的 Sequences 处理规则,并按以下 Sequences 进行解析:

  • Windows Service Hardening

  • Connection security rules

  • Authenticated Bypass Rules

  • Block Rules

  • Allow Rules

  • Default Rules

默认情况下,Windows 防火墙中的策略允许所有出站连接并阻止所有传入连接。

给定所有 MongoDB 进程的default ports,您必须配置网络规则,以允许应用程序与适当的mongod.exemongos.exe实例之间仅进行必需的通信。

本文档中概述的配置更改将使用默认策略创建规则,该规则明确允许来自特定地址和特定端口的流量,该策略将丢弃所有未明确允许的流量。

您可以使用netsh命令行工具或通过 Windows 应用程序配置 Windows 防火墙。在 Windows Server 2008 上,此应用程序是“Management 工具”中的“具有高级安全性的 Windows 防火墙”。在 Windows Server 的早期版本上,在“系统和安全性”控制面板中访问 Windows 防火墙应用程序。

本文档中的过程使用netsh命令行工具。

Patterns

本部分包含许多模式和示例,这些示例和示例用于配置 Windows 防火墙以用于 MongoDB 部署。如果使用port配置设置配置了其他端口,则需要相应地修改规则。

往返 mongod.exe 实例的流量

此模式适用于作为独立实例或replica set的一部分运行的所有mongod.exe实例。此模式的目标是明确允许从应用程序服务器到mongod.exe实例的流量。

netsh advfirewall firewall add rule name="Open mongod port 27017" dir=in action=allow protocol=TCP localport=27017

此规则允许所有进入端口27017的传入流量,这允许应用程序服务器连接到mongod.exe实例。

Windows 防火墙还允许为整个应用程序而不是特定端口启用网络访问,如以下示例所示:

netsh advfirewall firewall add rule name="Allowing mongod" dir=in action=allow program=" C:\Program Files\MongoDB\Server\3.4\bin\mongod.exe"

您可以通过以下调用允许对mongos.exe服务器的所有访问:

netsh advfirewall firewall add rule name="Allowing mongos" dir=in action=allow program=" C:\Program Files\MongoDB\Server\3.4\bin\mongos.exe"

往返 mongos.exe 实例的流量

mongos.exe实例为sharded clusters提供查询路由。Client 端连接到mongos.exe实例,从 Client 端的角度来看,它们充当mongod.exe实例。 mongos.exe依次连接到作为分片群集组件的所有mongod.exe实例。

使用相同的 Windows 防火墙命令来允许与这些实例之间的通信,就像从作为副本集成员的mongod.exe实例进行通信一样。

netsh advfirewall firewall add rule name="Open mongod shard port 27018" dir=in action=allow protocol=TCP localport=27018

往返 MongoDB Config 服务器的流量

配置服务器托管config database,该config database存储分片群集的元数据。每个生产群集具有三个配置服务器,这些服务器使用mongod --configsvr选项启动。 [1]配置服务器侦听端口27019上的连接。结果,将以下 Windows 防火墙规则添加到配置服务器,以允许端口27019上的传入和传出连接,以连接到其他配置服务器。

netsh advfirewall firewall add rule name="Open mongod config svr port 27019" dir=in action=allow protocol=TCP localport=27019

此外,配置服务器需要允许来自群集中所有mongos.exe实例和群集中所有mongod.exe实例的传入连接。添加类似于以下内容的规则:

netsh advfirewall firewall add rule name="Open mongod config svr inbound" dir=in action=allow protocol=TCP remoteip=<ip-address> localport=27019

<ip-address>替换为mongos.exe实例和分片mongod.exe实例的地址。

[1]您还可以通过使用配置文件中clusterRole设置的configsvr值来运行配置服务器。

往返 MongoDB 分片服务器的流量

对于以mongod --shardsvr [2]身份运行的分片服务器,由于使用clusterRole设置的shardsvr值运行时默认端口号是27018,因此必须配置以下 Windows 防火墙规则,以允许进出每个分片的流量:

netsh advfirewall firewall add rule name="Open mongod shardsvr inbound" dir=in action=allow protocol=TCP remoteip=<ip-address> localport=27018
netsh advfirewall firewall add rule name="Open mongod shardsvr outbound" dir=out action=allow protocol=TCP remoteip=<ip-address> localport=27018

<ip-address>规范替换为所有mongod.exe实例的 IP 地址。这使您可以允许所有分片(包括组成副本集成员)之间的传入和传出流量:

此外,分片需要能够构建与以下各项的传出连接:

创建类似于以下内容的规则,并将<ip-address>替换为配置服务器和mongos.exe实例的地址:

netsh advfirewall firewall add rule name="Open mongod config svr outbound" dir=out action=allow protocol=TCP remoteip=<ip-address> localport=27018
[2]您也可以使用配置文件中clusterRole设置的shardsvr值来指定分片服务器选项。分片成员通常也是使用默认端口的常规副本集。
[3]集群中的所有分片都需要能够与所有其他分片进行通信,以促进chunk和平衡操作。

为监控系统提供访问权限

mongostat诊断工具与--discover一起运行时,需要能够访问群集的所有组件,包括配置服务器,分片服务器和mongos.exe实例。

在版本 3.6 中进行了更改:MongoDB 3.6 删除了 MongoDB 弃用的 HTTP 接口和 REST API。

Management 和维护 Windows 防火墙配置

本节包含一些用于 Management 和使用netsh的基本操作。虽然您可以使用 GUI 前端来 ManagementWindows 防火墙,但可以从netsh访问所有核心功能。

删除所有 Windows 防火墙规则

要删除允许mongod.exe流量的防火墙规则,请执行以下操作:

netsh advfirewall firewall delete rule name="Open mongod port 27017" protocol=tcp localport=27017

netsh advfirewall firewall delete rule name="Open mongod shard port 27018" protocol=tcp localport=27018

列出所有 Windows 防火墙规则

要返回所有 Windows 防火墙规则的列表:

netsh advfirewall firewall show rule name=all

重置 Windows 防火墙

重置 Windows 防火墙规则:

netsh advfirewall reset

备份和还原 Windows 防火墙规则

为了简化大型系统集合的 Management,您可以在 Windows 上非常轻松地从不同的服务器导出或导入防火墙系统规则:

使用以下命令导出所有防火墙规则:

netsh advfirewall export "C:\temp\MongoDBfw.wfw"

"C:\temp\MongoDBfw.wfw"替换为您选择的路径。您可以使用以下格式的命令来导入使用此操作创建的文件:

netsh advfirewall import "C:\temp\MongoDBfw.wfw"