powershell 脚本可高效加固 winrm:启用自动启动服务、强制 https 加密(禁用 http/明文)、配置可信认证(禁用 basic,启用 kerberos/negotiate)、限制 ip 白名单与 shell 资源、批量部署并定期校验合规性。
powershell 脚本可以高效、可复现地加固和配置企业内部 winrm(windows remote management)策略,关键在于统一执行安全基线、禁用不必要功能、强制加密通信,并限制访问范围。
启用并配置 WinRM 基础服务
确保 WinRM 服务已启用且设为自动启动,同时仅监听 HTTPS(推荐)或受控的 HTTP 端口:
- 运行
winrm quickconfig -force快速初始化(仅用于初始部署,生产环境建议手动配置) - 使用
winrm set winrm/config @{AllowUnencrypted="false"}禁用明文传输 - 执行
winrm set winrm/config/service @{AllowRemoteAccess="true"}显式开启远程访问(默认可能为 true,但应显式声明)
强制使用 HTTPS 和证书绑定
避免依赖 HTTP + Basic Auth 的弱组合,必须使用有效证书提供 TLS 加密:
- 确保存在受信任的服务器证书(如企业 CA 颁发),并记录其 Thumbprint
- 运行
winrm create winrm/config/Listener?Address=*+Transport=HTTPS @{CertificateThumbprint="A1B2..."; Enabled="true"} - 删除默认 HTTP 监听器:
winrm delete winrm/config/Listener?Address=*+Transport=HTTP - 验证监听状态:
winrm e winrm/config/listener
收紧授权与网络访问控制
最小权限原则适用于 WinRM:只允许必要用户、组和 IP 段访问:
- 限制可信管理员组:
winrm set winrm/config/service/auth @{Basic="false"; Negotiate="true"; Kerberos="true"}(禁用 Basic,启用域认证) - 设置白名单 IP(需 Windows Server 2016+ 或通过防火墙补充):
winrm set winrm/config/service @{IPv4Filter="10.10.50.0/24"; IPv6Filter="::1"} - 限制远程 Shell 资源消耗(防 DoS):
winrm set winrm/config/winrs @{MaxMemoryPerShellMB="300"; MaxShellsPerUser="5"}
批量部署与持续合规检查
将上述策略封装为幂等脚本,配合 Group Policy 或自动化工具(如 Ansible、Intune、SCCM)分发:
- 脚本开头添加
If (-not (Get-Service WinRM).Status -eq 'Running') { Start-Service WinRM }确保服务就绪 - 使用
Test-WinRM -ComputerName localhost验证端点连通性与认证方式 - 导出当前策略作基线:
winrm enumerate winrm/config或用Export-Clixml存档配置快照 - 定期运行校验逻辑(例如检查
AllowUnencrypted是否仍为 false),失败时触发告警或自动修复
不复杂但容易忽略的是证书生命周期管理和防火墙规则同步——WinRM over HTTPS 除了配置监听器,还需开放 TCP 5986 并确保证书未过期。建议将证书续订与 WinRM 配置更新纳入同一维护流程。











