Windows服务器安全策略,关闭高危服务
Windows服务器默认会开启不少服务,其中部分服务在公网环境下容易成为攻击入口。
如果你刚接手一台Windows服务器,或者正在做基础安全加固,关闭高危服务是最直接有效的第一步。
下面按实际运维顺序,从确认现状到验证结果完整走一遍,零基础也能照着做。
先确认哪些服务在运行、哪些端口在监听
动手之前先摸清现状,避免误关业务依赖的服务。
以管理员身份打开PowerShell,执行以下命令查看所有正在运行的服务:
Get-Service | Where-Object {$_.Status -eq 'Running'} | Select-Object Name, DisplayName, Status
如果只想看监听端口,用这条:
netstat -ano | findstr "LISTENING"
常见的Windows高危服务包括:
- Remote Registry(远程注册表):允许远程修改注册表,风险极高。
- Print Spooler(打印后台处理):如果服务器不接打印机,建议关闭,历史上存在多个高危漏洞。
- Windows Remote Management(WinRM):远程管理服务,不使用时关闭可减少暴露面。
- Telnet:明文传输,默认不应开启。
- SNMP:默认团体名public,容易被探测。
- Server(Server服务):提供SMB文件共享,不需要共享时关闭可降低勒索软件风险。
把上面命令的输出和这份清单对照,记录下你环境里实际运行的高危服务名称,后面逐个处理。
停止并禁用高危服务的具体操作
确认要关闭的服务后,用PowerShell操作最稳妥。
以Remote Registry为例:
Stop-Service -Name RemoteRegistry -Force
Set-Service -Name RemoteRegistry -StartupType Disabled
这两条命令的含义是:先强制停止正在运行的服务,再把启动类型设为禁用,防止重启后自动恢复。
批量处理多个服务时,可以写成循环:
$services = @('RemoteRegistry','Spooler','WinRM','SNMP','Telnet')
foreach ($svc in $services) {
Stop-Service -Name $svc -Force -ErrorAction SilentlyContinue
Set-Service -Name $svc -StartupType Disabled -ErrorAction SilentlyContinue
}
执行后确认状态:
Get-Service -Name RemoteRegistry, Spooler, WinRM | Select-Object Name, Status, StartType
如果服务显示Stopped且StartType为Disabled,说明设置生效。
对于Server服务(SMB共享),关闭前务必确认没有业务依赖文件共享。
关闭命令:
Stop-Service -Name LanmanServer -Force
Set-Service -Name LanmanServer -StartupType Disabled
容易踩的坑和补救办法
关闭服务最怕影响正常业务,下面几个点提前注意。
打印服务不要盲目关。
如果服务器上装了打印驱动或共享打印机,关闭Spooler会导致打印任务全部失败。
确认无打印需求再操作。
WinRM关闭后远程管理工具可能失效。
如果你用Windows Admin Center或某些远程脚本依赖WinRM,关闭后需要改用RDP或其他方式。
Server服务关闭后共享文件夹不可访问。
文件服务器或域控环境不要关这项。
误关后如何恢复。
把StartupType改回Automatic并启动服务即可:
Set-Service -Name RemoteRegistry -StartupType Automatic
Start-Service -Name RemoteRegistry
另外,修改前建议先导出当前服务配置作为备份:
Get-Service | Select-Object Name, Status, StartType | Export-Csv -Path C:\service_backup.csv -Encoding UTF8
验证关闭效果与端口复查
服务禁用后,用两个角度验证:服务状态和端口监听。
服务状态复查:
Get-Service | Where-Object {$_.Status -eq 'Running' -and $_.Name -in @('RemoteRegistry','Spooler','WinRM','SNMP')}
如果返回为空,说明这些服务都没在运行。
端口层面复查:
netstat -ano | findstr ":135 :139 :445 :3389 :5985"
135、139、445对应RPC和SMB,5985对应WinRM。
如果这些端口不再监听,说明关闭生效。
3389是RDP,按需保留。
最后重启一次服务器,再执行一遍上面的检查命令,确认服务没有自动恢复。
几个常见疑问
关闭这些服务会影响系统更新吗? 一般不会。
Windows Update依赖的是自己的服务,和Remote Registry、Spooler无直接关系。
需要关闭的服务越多越好吗? 不是。
原则是“不用就关”,而不是“能关就关”。
每关一项都要确认业务无依赖。
有没有图形界面操作方式? 有。
按Win+R输入services.msc,找到对应服务,双击后将“启动类型”改为“禁用”,再点“停止”。
适合不熟悉命令行的场景。
关闭后还能收到安全更新吗? 可以。
关闭高危服务不影响系统补丁更新,两者是独立机制。
完成以上步骤后,你的Windows服务器暴露面会明显缩小。
建议把这次操作的服务清单和备份文件保存好,后续做安全审计时可以直接对照复查。