为 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.exe和mongos.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 地址。这使您可以允许所有分片(包括组成副本集成员)之间的传入和传出流量:
-
分片副本集中的所有mongod.exe个实例。
-
其他分片中的所有mongod.exe个实例。 [3]
此外,分片需要能够构建与以下各项的传出连接:
-
所有mongos.exe个实例。
-
配置服务器中的所有mongod.exe个实例。
创建类似于以下内容的规则,并将<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"