为自管理部署配置Windowsnetsh
防火墙
在 Windows Server 系统上,netsh
程序提供管理 Windows Firewall的方法。利用这些防火墙规则,管理员将能够控制哪些主机可以连接到系统,并通过限制可以连接到系统的主机来限制风险暴露。
本文档概述了基本的Windows Firewall配置。 使用这些方法作为大型网络组织的点。 有关MongoDB安全实践和风险管理的详细概览,请参阅安全性。
Overview
Windows Firewall 按规则类型确定的顺序处理规则,并按以下顺序进行解析:
Windows Service Hardening
Connection security rules
Authenticated Bypass Rules
Block Rules
Allow Rules
Default Rules
默认情况下,Windows Firewall 中的策略支持所有出站连接,并阻止所有传入连接。
考虑到所有 MongoDB 进程的默认端口,您必须配置网络规则,以便仅允许应用程序与相应的 mongod.exe
和 mongos.exe
实例之间进行必要的通信。
本文档中概述的配置更改将创建规则以明确允许来自特定地址和特定端口的流量,并使用默认策略丢弃所有未明确允许的流量。
可以使用 netsh
命令行工具或通过 Windows 应用程序配置 Windows Firewall。在 Windows Server 2008 中,该应用程序是 Administrative Tools 中的 Windows Firewall With Advanced Security。在以前版本的 Windows Server 上,使用 System and Security 控制面板中的 Windows Firewall 应用程序。
此文档中的过程使用 netsh
命令行工具。
模式
本部分包含许多用于配置 Windows Firewall 以与 MongoDB 部署结合使用的模式和示例。如果使用 port
配置设置配置了不同的端口,则需要相应地修改规则。
进出mongod.exe
实例的流量
此模式适用于作为独立运行实例或副本集的一部分运行的所有 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 Firewall 还允许为整个应用程序而不是特定端口启用网络访问,如下例所示:
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
实例为分片集群提供查询路由。客户端可连接到 mongos.exe
实例,从客户端的角度来看,这些实例的行为与 mongod.exe
实例类似。反过来,mongos.exe
可连接到作为分片集群组成部分的所有 mongod.exe
实例。
使用相同的 Windows Firewall 命令允许流量进出这些实例,就像副本集节点的 mongod.exe
实例一样。
netsh advfirewall firewall add rule name="Open mongod shard port 27018" dir=in action=allow protocol=TCP localport=27018
进出 MongoDB 配置服务器的流量
配置服务器,托管用于存储分片集群的元数据的配置数据库。每个生产集群都有三个配置服务器,使用 mongod --configsvr
选项启动。[1] 配置服务器监听端口 27019
上的连接。因此,将以下 Windows Firewall 规则添加到配置服务器,支持端口 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 Firewall 规则以允许流量在每个分片上往返:
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] | 还可以使用 shardsvr 值为配置文件中的 clusterRole 设置指定分片服务器选项。分片成员通常也是使用默认端口的传统副本集。 |
[3] | 集群中的所有分片都需要能够与所有其他分片通信,以促进数据段和均衡操作。 |
为监控系统提供访问权限
mongostat
诊断工具在指定 --discover
运行时,需要能够访问集群的所有组件,包括配置服务器、分片服务器和 mongos.exe
实例。
管理 Windows 防火墙配置
本部分包含管理和使用 netsh
的一些基本操作。虽然可以使用 GUI 前端来管理 Windows Firewall,但所有核心功能都可以从 netsh
访问。
删除默认 MongoDB 端口的 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 Firewall 规则的列表:
netsh advfirewall firewall show rule name=all
重置 Windows 防火墙
要重置 Windows Firewall 规则:
netsh advfirewall reset
备份和恢复 Windows 防火墙规则
为了简化大型系统的管理,您可以导出或导入 Windows 防火墙规则。
要导出所有 Windows 防火墙规则,请运行以下命令:
netsh advfirewall export "C:\temp\MongoDBfw.wfw" 将
"C:\temp\MongoDBfw.wfw"
替换为您选择的路径。要导入 Windows 防火墙规则,请运行以下命令:
netsh advfirewall import "C:\temp\MongoDBfw.wfw" 将
"C:\temp\MongoDBfw.wfw"
替换为包含 Windows 防火墙规则的文件的路径。