Windows服务器故障转移集群(WSFC)的安全配置核心在于三个层面:网络隔离、身份验证强化和最小权限原则的实施。直接操作上,你需要立即为集群网络启用SMB签名和加密,将集群服务账户从默认的本地系统更改为专用的域用户并严格限制其权限,并配置防火墙规则仅允许集群节点间必要的端口通信,例如端口3343(集群网络驱动程序)、135(RPC)和指定的RPC动态端口范围。

一、 网络层安全加固:隔离与加密

集群网络是攻击的首要入口。你必须将集群通信与公共业务网络物理或逻辑隔离。最佳实践是使用专用的网卡和VLAN,仅用于节点间的心跳和数据同步。在任何共享网络上,强制启用SMB 3.0及以上版本的签名与加密,这是防止中间人攻击和凭据窃取的关键。通过以下PowerShell命令可以检查和强制启用:

# 检查SMB签名设置
Get-SmbServerConfiguration | Select-Object EnableSecuritySignature, RequireSecuritySignature
Get-SmbClientConfiguration | Select-Object EnableSecuritySignature, RequireSecuritySignature

# 在集群所有节点上强制执行SMB签名(服务器端和客户端)
Set-SmbServerConfiguration -RequireSecuritySignature $true -Force
Set-SmbClientConfiguration -RequireSecuritySignature $true -Force

同时,在Windows防火墙中创建入站规则,明确允许来自其他集群节点IP地址的特定端口,拒绝所有其他来源的访问。核心端口包括:3343(集群网络驱动程序)、135(RPC端点映射器)以及为集群服务动态分配的RPC端口(通常需要开放一个范围,如50000-51000)。务必禁用NetBIOS over TCP/IP,并确保所有网络适配器已启用“在DNS中注册此连接的地址”。

二、 身份与访问控制:最小权限与服务账户

永远不要使用域管理员账户作为集群服务账户。创建一个专用的、权限受限的域用户账户(例如“svc-wsfc”)。该账户仅需以下最低权限:

(1) 在所有集群节点上拥有“作为服务登录”的权限;

(2) 对即将成为集群存储的共享文件夹或磁盘拥有“完全控制”权限(仅限配置阶段);

(3) 是每个节点本地“Administrators”组的成员(这是Windows Server 2016及之后版本的要求,用于确保对存储和网络的完全管理访问)。配置完成后,应立即移除该账户对共享存储的访问权,除非需要维护。

在创建集群时,通过故障转移集群管理器或使用PowerShell指定此账户:

# 创建集群时指定管理账户
New-Cluster -Name MyCluster -Node Node01,Node02 -StaticAddress 192.168.1.100 -AdministrativeAccessPoint DNS -ClusterServiceAccount "DOMAIN\svc-wsfc"

此外,严格限制对故障转移集群管理器(Failover Cluster Manager)和PowerShell管理模块的访问。仅授权给必要的服务器管理员。启用Windows审核策略,监控对集群对象(如资源、配置)的所有更改和访问尝试。

三、 存储安全:仲裁与共享磁盘的防护

仲裁配置是集群的“大脑”,其安全至关重要。对于基于文件的共享见证(File Share Witness),其共享文件夹的NTFS权限应设置为:集群服务账户和节点计算机账户具有“完全控制”权,域管理员可根据需要添加,移除所有其他用户组。共享权限同理。对于云场景,使用Azure Blob存储作为云见证是更安全的选择,它基于SAS令牌进行安全访问。

如果使用共享磁盘(如iSCSI、FC),必须通过CHAP认证(iSCSI)或WWN分区与屏蔽(FC/SAN)来确保只有授权的集群节点可以访问这些LUN。在操作系统层面,这些磁盘应仅在线并分配给集群节点,其他服务器不应看到或尝试挂载。

四、 集群对象与通信安全:证书与Kerberos

在跨子网或安全性要求极高的环境中,应配置集群使用证书进行内部节点通信加密,而非依赖默认的Kerberos。这需要为每个集群节点申请并安装一张计算机证书,且所有证书必须来自受信任的同一CA,并包含客户端身份验证的增强型密钥用法(EKU)。然后通过集群PowerShell配置:

# 将集群通信模式设置为使用证书
(Get-Cluster).Security = [String]::Format("Security=Certificate;CertThumbprint={0}", $certThumbprint)

对于使用Kerberos的环境,确保所有节点时间同步(使用域时间服务),并检查SPN(服务主体名称)是否正确注册。避免对集群核心资源(如集群名称对象CNO)和虚拟计算机对象(VCO)进行不必要的密码重置或账户禁用操作,这会破坏Kerberos身份验证。

五、 操作系统与更新基线

所有集群节点必须保持统一的操作系统版本、补丁级别和硬件驱动程序版本。不一致是导致故障转移失败和安全漏洞的常见原因。建立一个严格的变更管理流程,任何节点上的Windows更新、固件更新或软件安装都应在维护窗口内,按顺序在所有节点上测试并实施。启用BitLocker对操作系统卷和数据进行加密,特别是在物理安全无法保证或数据驻留要求严格的场景下。

六、 持续监控与审计

被动配置不足以应对持续威胁。你需要利用Windows事件日志和集群日志进行主动监控。关键事件ID包括:集群服务启动/停止(1069)、资源组转移(1134)、节点加入/离开集群(1194, 1196)以及所有警告和错误事件。可以将这些日志转发至中央SIEM系统进行分析。定期使用微软提供的Validate a Configuration向导(即使集群已创建)进行安全检查,它能发现网络、存储和安全配置中的潜在问题。

最后,制定并定期演练灾难恢复和故障转移流程。一个安全的集群不仅在于其如何防御攻击,更在于攻击或故障发生后,如何快速、可控地恢复业务。你的安全配置文档应与恢复手册并存,并确保每一次架构变更都同步更新。