
说实话我在帮朋友和企业排查 Windows 机器问题时最怕看到的场景就是系统装完直接开机连上网络远程桌面开着、Administrator 密码还是 Admin123、补丁几个月没更新、默认共享一个不少。这不是个案而是相当普遍的“裸奔”状态。Windows 基本的安全加固策略说白了就是把这一堆“出厂默认”的裸奔项一步步收敛成“够用但不好惹”的状态。这套策略不是给安全专家看的而是给所有正在用 Windows 做开发机、办公机、小服务器或者帮公司管几台 Windows Server 的普通人准备的。它会告诉你哪些配置最容易出问题、哪些开关必须关、哪些权限必须收以及怎么在“不影响正常使用”和“尽量降低风险”之间找一个平衡点。适合谁运维新手、兼职管服务器的开发者、以及任何一台 Windows 机器刚装完系统、想要心里踏实一点的人。内容全部基于我已经落地过无数次的通用加固流程没有什么玄学都是能直接照着操作的东西。1. 加固前先想清楚这套策略解决什么问题1.1 为什么“装完就用”会出问题Windows 默认配置的核心设计目标是“开箱即用、什么都能干”安全只是排在可用性之后的第二优先级。一台默认安装的 Windows 机器默认开放了一堆不必要的端口和服务默认启用了人人都在猜的 Administrator 账号默认共享了 C$、ADMIN$ 这类管理共享甚至默认允许空密码账户只允许控制台登录的安全选项都未必配置到位。攻击者扫描全网时找的就是这种系统。很多人对“加固”有误解以为要装一堆商业安全软件才叫加固。其实真正的安全基线长这样账号口令管住了、不必要的服务和端口关了、防火墙规则收敛了、关键操作有日志了、补丁能及时打上了。这五件事做到位绝大多数日常扫描和爆破攻击根本碰不到你的机器。我见过不少被勒索病毒、挖矿木马搞瘫的机器事后排查发现根本没做任何主机层面的收敛问题是完全可以避免的。1.2 从哪里找加固基线市面上现成的基线方案不少最常用的是两类。一类是国际上的 CIS Benchmarks专门针对 Windows 10、Windows Server 2016/2019 等系统逐条列出安全配置项写得非常详细但翻译和落地有点费劲很多条目对你的场景可能过度。另一类是国内的等级保护合规要求里面主机安全部分的条款其实也是围绕账号口令、访问控制、安全审计、入侵防范、恶意代码防范这几块来的。我的建议很直接不要贪多求全先做“基本盘”也就是下面这几个方向账号和口令清理默认账号、设置强密码策略、开启账户锁定。访问控制UAC 保持默认或更高平时不跑管理员权限。攻击面收敛关闭不需要的服务、停用 SMB1、禁用默认共享。网络安全防火墙默认拒绝入站只放行必要端口并限制来源 IP。安全审计打开关键审核策略保证安全日志能记录登录和敏感操作。补丁管理开启自动更新补齐系统级漏洞。这几项是“基本加固”的核心骨架。你把它们做完这台机器就不是那种能被顺手牵羊的目标了。1.3 动手前必须完成的准备在我自己的加固流程里最忌讳的就是拿到一台生产机器直接改配置改完发现某个服务被禁用导致业务起不来又找不到原因。所以我每次动手前一定会做三件事第一给系统做快照或者完整备份。虚拟机很直观直接打快照物理机就用系统自带的“创建系统映像”备份到外接硬盘。目的是万一配置改坏了能一键回到改之前的状态。第二用清单记录当前状态。我习惯先用命令收集一轮信息存成文本备份之后对比才心里有数。收集命令可以这样# 查看当前用户和本地组 Get-LocalUser | Format-Table Name, Enabled, PasswordRequired Get-LocalGroup | Format-Table Name # 查看开机自启动服务和当前监听端口 Get-Service | Where-Object {$_.StartType -eq Automatic} | Format-Table Name, Status netstat -ano | findstr LISTENING # 查看当前防火墙状态 Get-NetFirewallProfile | Format-Table Name, Enabled第三向这台机器的使用者问清楚业务依赖。比如这台机器是不是要给局域网共享文件打印机是不是挂在上面远程桌面用的是哪个端口这些信息决定了你后面哪些服务能停、哪些端口能封。我自己踩过最深的坑就是把一台打印服务器的 Print Spooler 服务给禁用了结果全办公室打印中断被骂了一下午。注意加固不是“越严越好”而是在满足业务的前提下把攻击面压到最小。一台只跑数据库的内部服务器和一台要对外提供网站服务的服务器加固策略肯定不一样。先搞清楚用途再动手。2. 账号和口令最容易被忽视的第一道门2.1 先清理默认账号和本地用户Windows 装完默认会有一个 Administrator 账号这个名字是所有攻击者都会猜的爆破用户名这一步都省了。无论你之前有没有用过它我都建议按下面的逻辑处理把 Administrator 账号改名绕开“内置管理员”这个众所周知的登录名。如果机器平时根本不用这个账号直接禁用最省心。给这个账号设置一个至少 16 位的高强度密码即使它被禁用也要防止别人用特殊手段启用后继续攻。Guest 账号永远是禁用的不管什么情况我都不会开。如果有人告诉你需要启用 Guest 来共享文件那一定是权限设计走偏了正确的做法是建一个普通用户放到对应组里。实际操作时用 PowerShell 几秒钟就能完成# 禁用 Guest永久没有禁用状态则直接设置 Disable-LocalUser -Name Guest # 给 Administrator 改名 Rename-LocalUser -Name Administrator -NewName SysAdmin-2025 # 给改完名的账号设置强密码 Set-LocalUser -Name SysAdmin-2025 -Password (Read-Host 输入新密码 -AsSecureString)除了这两个默认账号还要检查一下机器上有没有多余的本地用户。很多开发机器上会留着上次某个同事创建的账号或者测试时候建的 test 之类的用户。我一般会逐个人核对这个人还需要登录吗如果不需要直接删除如果留着也要保证密码是键盘上乱敲出来的复杂口令。2.2 密码策略和锁定策略怎么配密码策略是最被低估的一个安全项。大家总觉得”我的密码没人会猜到“但实际上针对 Windows 的攻击方式里密码爆破和横向渗透占了相当大的比例。Windows 提供了一个安全策略控制台通过secpol.msc可以打开路径是“账户策略 - 密码策略”。我落地时的推荐配置是这样策略项推荐值说明密码必须符合复杂性要求已启用强制大小写字母、数字、特殊字符组合密码最小长度14 个字符低于这个长度爆破成本太低密码最长使用期限90 天到期强制更换密码最短使用期限1 天防止用户连续改回旧密码强制密码历史5 个记住的密码防旧密码复用用可还原的加密存储密码已禁用这项开着等于明文存储很多人配置完密码策略发现自己新设置的密码还是可以很短或者非常简单其实是因为“密码必须符合复杂性要求”这一项没有启用只改最小长度没用。这俩是两个独立策略必须同时生效。账户锁定策略也一样重要。它解决的问题很直接攻击者在远程桌面或 SSH 端口上尝试几万个密码如果系统有锁定机制试不了几次就把人挡在门外了。推荐配置如下策略项推荐值账户锁定阈值5 次无效登录账户锁定时间15 分钟重置账户锁定计数器15 分钟这里有个小技巧对于重要的管理员账号阈值建议更严比如失败 3 次直接锁定 30 分钟以上。2.3 UAC把管理员权限管起来用户账户控制 UAC 是 Windows Vista 以来最重要的权限管理机制它保证了即使用户登录的是管理员账号所有需要提权的操作都会弹出确认提示。攻击者拿到你的会话后也不能悄无声息地以管理员身份干坏事。很多“优化教程”教你把 UAC 拉到最低甚至关掉我非常不建议这么做除非这台机器只是跑个无关痛痒的娱乐机。正确的设置方式是通过“控制面板 - 用户账户 - 更改用户账户控制设置”把滑块拉到第二个档位“仅当程序尝试更改我的计算机时通知我”。这个档位既不会频繁打扰你又能保住关键的前台提权确认。再稍微进阶一点尽量用普通权限跑日常工作。我自己的做法是创建了一个标准用户账号用于日常办公管理员账号只留来做系统配置和安装软件浏览器、邮件、聊天工具全用标准账号打开。这样万一中了钓鱼邮件或者网页挂马攻击者拿到的是标准用户权限很多破坏性动作都做不了。3. 减少攻击面服务和端口的“断舍离”3.1 哪些服务该停、哪些端口该封Windows 默认启动的服务里有一大批是绝大多数场景根本不用的但它们每开一个就给系统多留了一个入口。我对每一台要做加固的机器都会按照“是否能明确说出用途 是否必须开机运行”这个标准过一遍服务列表。我的原则是说不出来它是干嘛的、或者明明用不到的服务一律手动启动或禁用。下面这张表是我在普通办公机、开发机和多数内部服务器上必做的裁剪项服务名称显示名是否建议禁用说明Print Spooler打印后台处理程序无打印机需求时禁用近年多个漏洞因此服务被利用Remote Registry远程注册表强烈建议禁用允许远程修改注册表Fax传真服务直接禁用现在谁还发传真SSDP DiscoverySSDP 发现不用的直接禁用常见内网探测入口UPnP Device HostUPnP 设备主机不用的直接禁用存在攻击面风险Windows Remote Management (WS-Management)WinRM只有集中管理才开否则就是暴露管理端口Xbox Live 相关服务Xbox Live 等服务办公机/服务器禁用很少有办公场景需要操作方式很简单按 Win 键输入services.msc找到目标服务右键打开“属性”启动类型改成“禁用”再停止服务。如果用命令行PowerShell 可以这样写# 一个循环禁用多个服务 $services ( RemoteRegistry, Fax, ssdpsrv, upnphost, XboxNetApiSvc ) foreach ($svc in $services) { Set-Service -Name $svc -StartupType Disabled -ErrorAction SilentlyContinue Stop-Service -Name $svc -Force -ErrorAction SilentlyContinue }注意Print Spooler 的判断要慎重。如果你确定这台机器只是办公电脑、不连接任何打印机那直接禁用没问题。但产线、财务这类依赖打印的机器千万慎重停掉就是事故。3.2 SMB 与默认共享的坑SMB 协议可以说是 Windows 内网服务的“劳模”但也是历史上漏洞重灾区。Windows 默认还会开启一些隐藏管理共享比如 C$、D$、ADMIN$以及每个用户主目录的 IPC$ 共享。这些共享在局域网内如果开启了攻击者拿到一个账号后可以直接通过类似\\192.168.1.10\C$的方式挂载整个系统盘危害极大。SMB1 协议在老系统上是默认启用的但它的安全性已经跟不上时代微软自己也推荐把它停掉。关闭 SMB1 的操作方法# 通过 PowerShell 关闭 SMB1 协议支持 Disable-WindowsOptionalFeature -Online -FeatureName SMB1Protocol如果因为内网有老旧设备比如老打印机、老 NAS必须保留 SMB1那至少要保证不暴露到公网、防火墙只允许特定内网 IP 访问 445 端口、并使用强密码。一定要清醒一点SMB1 本身就是一个旧时代的包袱能扔就扔。默认共享的部分可以通过修改注册表来关闭# 关闭管理共享 New-Item -Path HKLM:\SYSTEM\CurrentControlSet\Services\LanmanServer\Parameters -Force Set-ItemProperty -Path HKLM:\SYSTEM\CurrentControlSet\Services\LanmanServer\Parameters -Name AutoShareWks -Value 0 -Type DWord Set-ItemProperty -Path HKLM:\SYSTEM\CurrentControlSet\Services\LanmanServer\Parameters -Name AutoShareServer -Value 0 -Type DWord # 重启 Server 服务后生效 Restart-Service -Name LanmanServer -Force改完之后你再看\\本机IP\C$这种路径就会提示找不到网络路径。如果你本身就不需要文件共享干脆把 Server 服务本身停掉也行。3.3 用防火墙做最后一道拦截Windows 防火墙默认策略是“入站阻止、出站放行”这是合理的。但很多人装完软件后不小心弹一个防火墙允许窗口就点“允许访问”结果入站规则越攒越多最后跟筛子一样。我的建议是定期到wf.msc里检查一遍入站规则把不需要的规则全部禁用只保留真正需要对外提供服务的条目。我需要开放 3389 远程桌面、443 做 Web 服务时基本都会顺手加上一条安全限制只允许指定来源 IP 访问。PowerShell 配置示例# 只允许管理网段 192.168.1.0/24 访问远程桌面 New-NetFirewallRule -DisplayName RDP-Allow-Management -Direction Inbound -Action Allow -Protocol TCP -LocalPort 3389 -RemoteAddress 192.168.1.0/24如果远程办公需要从家访问也可以把家宽出口的公网 IP 加进白名单而不是对全网开放 3389。全网开放 3389 就等于在门上贴了一张“欢迎来爆破”的告示。端口封禁上重点守好几个高危端口135RPC、139NetBIOS、445SMB、3389RDP。特别是 445如果这台机器不参与局域网文件共享那么在入站方向直接把它封掉能挡掉一大票内网横向传播的蠕虫和勒索病毒。如果你把防火墙规则都设置好了最后跑一个Get-NetFirewallRule -Direction Inbound | Where-Object {$_.Enabled -eq True}看看入站规则数量通常越少越健康。4. 安全策略与审计让 Windows 学会“记账”4.1 审核策略配置与事件 ID很多人在排查安全问题时最先想到的就是翻 Windows 安全日志。但默认情况下Windows 的审核策略是相对保守的很多关键操作不会记录下来。等出了问题再来翻日志发现干干净净那就晚了。所以我在加固流程里一定会把关键审核项打开让系统能记录“谁在什么时候干了什么”。配置入口打开secpol.msc在“安全设置 - 本地策略 - 审核策略”下设置审核策略成功/失败说明审核登录事件成功 失败记录所有本地/远程登录审核账户登录事件成功 失败记录凭据验证过程审核账户管理成功 失败账号创建/删除/密码修改审核对象访问失败记录非法访问受保护对象审核系统事件成功 失败系统关机、重启等审核进程创建成功帮助溯源恶意进程审核特权使用成功 失败管理员特权操作配置完之后去“事件查看器 - Windows 日志 - 安全”就能看到日志了。Windows 有自己一套常用事件 ID你一定要记住几个4624登录成功能区分本地登录和远程登录4625登录失败攻击者爆破时这里会刷屏4740账户被锁定的记录4720创建了新用户很多攻击者会靠这个建后门账号4732用户被添加到安全组1102安全审核日志被清空这是很危险的操作信号我建议养成一个习惯每过几天就翻一下安全日志里有没有大量的 4625 登录失败事件以及 4720 这类敏感事件。如果看到成片 4625说明正有人针对这台机器做口令爆破需要立刻收紧防火墙或者更换对外端口。4.2 安全日志的留存与保护光打开审计还不够日志得有地方放、放得够久否则出了事再想找记录多半是早就被覆盖了。Windows 日志默认的文件大小只有 20MB 左右一会儿就会被刷掉。我每次配置新机器都会把日志一次性调到至少 8192MB并采用“按需覆盖事件”模式这样旧的日志不会因为空间不足立刻被抹掉。具体操作事件查看器里右键“安全”日志选择“属性”填入日志最大大小 8192MB事件覆盖策略选“按需覆盖事件旧事件优先”。如果嫌 GUI 操作慢可以用命令行wevtutil sl Security /ms:8589934592 /rt:true /ab:true这条命令的意思是把 Security 日志最大容量设为 8GB单位是字节并启用“按需覆盖”和自动备份。另外建议设置“审核: 对全局系统对象的访问”时同时启用“审核: 强制审核策略子类别设置”防止攻击者通过修改审核策略掩盖痕迹。高级审核策略的界面和旧版的本地策略是两套平时不要混着用很容易被覆盖。4.3 日志集中管理的低成本方案单机日志始终有风险如果攻击者拿到管理员权限第一件事就是把安全日志清空。所以只要条件允许我都会把关键机器的日志转发到一台独立的日志服务器或集中存储上。低成本方案有很多可以在 Windows 上设置 WinRM 转发到另一台 Windows Server 的 Windows Event Collector也可以用开源方案比如装个 syslog 代理把 Windows 日志转发到 Linux 服务器上的 rsyslog。对于小规模环境最简单的还是用脚本每天把事件日志导出成 evtx 文件存到另一台机器上$exportPath \\log-server\share\Security-$(Get-Date -Format yyyyMMdd-HHmmss).evtx wevtutil export-log Security $exportPath不需要买什么商业方案先把日志留到另一台机器上这个动作本身就能避免好多被动局面。5. 补丁、基线核查和日常运维5.1 补丁管理别让系统活在旧时代补丁管理听起来没有技术含量但它是整个加固里性价比最高的一件事。很多攻击根本用不上什么高深漏洞只要系统没打补丁一个已公开的半成品攻击脚本就能打穿。Windows 的更新补丁每月第二个星期二发布我常用的做法是办公机和开发机开启自动更新设置固定时间安装比如每周日凌晨自动安装并重启。服务器采用“下载但不自动安装”模式先在测试环境验证确认无兼容问题后再手动安排窗口安装。老旧系统如果还在跑生命周期外的系统比如 Windows Server 2016 这类已经过了主流支持期的版本建议关注扩展安全更新计划尽量补齐关键安全补丁或尽快规划迁移到受支持的版本。有人觉得“装了补丁重启一次太麻烦了”说实话我也嫌麻烦但每次看到那种补丁滞后大半年的机器被勒索病毒扫穿我就觉得当初那点麻烦根本不算什么。手动检查补丁状态的命令很简单Get-HotFix | Sort-Object InstalledOn -Descending | Select-Object -First 20如果这一条命令输出的都是几个月前的补丁那就要抓紧排期了。5.2 定期核查加固不是一锤子买卖基本加固做完之后还有一件特别容易被忽略的事定期核验。配置会被软件装更新覆盖服务可能会被程序重新启动防火墙规则可能会被人手动添加账号可能被临时创建的测试用户撑大这些都是常态。所以我的习惯是每季度做一次“基线扫描”看几项关键配置是否仍然符合之前定的策略密码策略是否还是强密码要求。是否有新增的本地用户或管理员组成员。是否有不必要的服务重新变回自动启动。防火墙入站规则数量是否异常膨胀。安全日志大小和覆盖策略是否被改动过。最近 30 天的 4625 登录失败和 4720 账户创建事件是否异常。这些逐项比对如果靠人工容易漏可以自己写一个小脚本做快照对比也可以找现成的基线扫描工具检查比如微软的 Security Compliance Toolkit里面带了现成的 GPO 模板可以一键生成报告和系统对比。我自己的经验是不要完全依赖工具工具做好了之后还需要人工结合业务重新梳理一遍才能保证“安全”和“可用”之间的平衡。其实到这里整套 Windows 基本加固策略已经完整了。它不会让系统变成铜墙铁壁但足够挡住绝大多数随机的、低成本的攻击尝试。也就是说你已经比全网大多数 Windows 机器安全太多了。6. 常见问题与排查技巧实录6.1 排查思路遇到问题先别慌加固过程中遇到“配置改完系统连不上”“某项功能用不了”之类的情况几乎人人都会碰到。我第一年的经验总结下来排障顺序基本是固定的第一步确认是不是账号问题。远程连不上先看账号是否被锁定、是否被禁用、是否被踢出了 Remote Desktop Users 组。第二步确认是不是服务问题。看最近被改成“禁用”的服务里有没有业务必须依赖的。第三步确认是不是防火墙问题。看入站规则是否误伤了业务端口特别是新建规则后有没有把系统自带允许规则排到更低位。第四步翻日志。安全日志和应用程序日志会给出最直接的原因Windows 的事件查看器不是摆设。这四步走完绝大部分问题都能定位到根因。比四处乱试有效得多。6.2 常见问题速查表问题现象常见原因处理办法加固后远程桌面连不上防火墙规则未放行 3389或 Remote Desktop Services 服务被误禁用检查wf.msc入站规则确认 3389 有白名单规则到services.msc把服务改回自动启动密码策略改完不生效只改了最长使用期限或最小长度没启用“密码必须符合复杂性要求”打开secpol.msc启用“密码必须符合复杂性要求”再执行gpupdate /force刷新系统盘盘符 C$ 共享又冒出来了注册表值没写对或 Server 服务重启后重新读取了默认配置检查HKLM:\SYSTEM\CurrentControlSet\Services\LanmanServer\Parameters下值是否存在且为 0如果需要共享业务就改成不共享但保留服务运行打印机突然打不了Print Spooler 被禁用确认业务是否需要打印机若需要则恢复服务自动启动状态并检查是不是只禁用服务没重启大量 4625 登录失败事件有外部 IP 正在扫描爆破立即在防火墙封禁该 IP 或对应端口检查账号是否被锁定考虑关闭 3389 的互联网暴露安全日志不记录新事件上层“审核: 强制审核策略子类别设置”覆盖了本地策略或日志权限异常打开secpol.msc检查高级审核策略和本地策略是否冲突统一成一套配置更新安装后机器反复重启存在兼容性问题检查应用程序日志中更新的错误来源回滚最近更新后分批次安装补丁6.3 一些独家的实践经验最后分享几个我踩过多次坑之后总结下来的实际经验。第一个经验加固时不要一次改一堆一次只改一类。我见过有人一个下午把密码策略、服务、防火墙全部改完然后系统彻底连不上了排查半天都不知道是哪个配置引起的。正确做法是改一类、验证一次、记录一次这样万一有问题回滚范围非常小。第二个经验配置改完一定要重启验证。有些服务禁用后当时没有异常但重启后才彻底“生效”然后才发现这台机器还依赖着它。所以在生产机器上操作完宁可挑个业务低峰期主动重启一次验证是否能正常起来也强过半夜被监控告警吵醒。第三个经验给每台机器写一份简单的“加固说明文档”。里面记录机器用途、启用了哪些服务、关闭了哪些服务、防火墙开放了哪些端口、账号权限如何分配、最近一次补丁更新时间。不需要多正式一个 Text 文件就够。以后任何一次排障或者交接这份文档都能救你一命。第四个经验安全日志的查看频率要跟机器的风险等级挂钩。暴露在公网的机器我建议每天扫一遍安全日志内部开发机每周看一次就够纯离线机器维护时顺带看一下即可。写到这里整份 Windows 基本安全加固策略的内容其实已经完整地落到了每个具体操作上。我最深的体会是安全加固没有终点它不是一个周末做完就可以永远不管的项目而是一种需要持续维护的习惯。你不需要把每一台机器都做成堡垒只要把基本盘巩固住把关键日志和补丁管住就已经比绝大多数裸奔机器强太多了。以后不管系统怎么更新换代这个思路和这些操作习惯都是能长期用下去的。