接手一台新服务器,第一件事你会做什么?我早年的习惯是直接改个管理员密码就上线。直到有一次,一台部署了三个月、密码强度极弱、连远程桌面都开着默认端口的机器被爆破成功,对方在内网横向跑了整整两周才被发现。那次之后我才彻底明白:Windows安全基线不是什么“推荐配置”,而是系统管理员给服务器上的最低生存保障。
这篇内容不跟你聊太高深的理论,而是把一套能直接在Windows Server和Windows 10/11工作站上落地的安全基线配置清单摊开来讲。适合刚入门想建立系统化安全意识的运维新手,也适合已经管了一批机器但一直没时间梳理加固项的“老油条”。我会按账号认证、系统服务、审计日志、网络协议这几个面逐项拆,把配置原因、具体参数、落地命令和验证方式一次说透。
1. 安全基线不是一套“推荐设置”,而是一套生存底线
安全基线这个概念,通俗说就是给操作系统设定一个“最低安全水位线”。就好比买房子,装修你可以随意,但承重墙、消防通道、入户门锁这些底线不能省。Windows安全基线就是那面承重墙、那扇防火门:不管你是拿它跑数据库、Web服务还是内部文件共享,以下这些项都得先守住了。
行业内比较成熟的安全基线参考来源主要有几个:微软官方发布的Windows Security Baseline、CIS(Center for Internet Security)Benchmark、国内的等级保护合规要求。这些标准读起来很枯燥,动辄上百页,而且很多条目在你的真实业务场景里是“过度设计”。所以系统管理员需要的不是照抄,而是从中提炼出适合自己环境的那一版清单。
我把长期实践中认为性价比最高的配置项整理成了一张总表,你可以直接把它当验收标准:
| 加固维度 | 关键配置项 | 期望状态 |
|---|---|---|
| 账号认证 | 内置Administrator | 已重命名且禁用 |
| 账号认证 | 密码策略 | 最小长度14位、复杂度开启、历史24个 |
| 账号认证 | 账户锁定策略 | 阈值5次、锁定15分钟 |
| 账号认证 | 远程桌面NLA | 强制开启 |
| 系统服务 | SMBv1协议 | 已禁用 |
| 系统服务 | Windows更新 | 自动安装补丁 |
| 系统防护 | Windows Defender实时保护 | 开启并启用云保护 |
| 系统防护 | 受控文件夹访问 | 启用并配置保护目录 |
| 审计日志 | 登录事件、账号管理审计 | 成功和失败全部记录 |
| 审计日志 | 安全日志大小 | 至少1GB且不覆盖 |
| 网络协议 | 防火墙入站默认策略 | 拒绝 |
| 网络协议 | LLMNR、NBT-NS | 已禁用 |
这张表就是骨架,后面的章节都是在给这个骨架添肉。你可以把每一项拆出来单独执行,也可以把它们做进一个组策略对象(GPO)统一下发。我建议是分批做,一批账号策略,一批服务加固,一批网络配置,每批做完都要验证业务不受影响,千万不要一把梭。
2. 账号与认证策略:钥匙管理比门锁更重要
2.1 内置Administrator账号:重命名、禁用、设置陷阱
Windows安装完成后默认带一个SID最后是500的Administrator内置账号。这个账号是爆破和提权攻击的第一目标,因为它的名字人尽皆知,权限又大得离谱。处理它的规范动作是双重的:重命名加禁用。
重命名是为了增加“被猜出用户名”的阻力,禁用则确保即使密码被猜中也无法直接登录。有人会说有些旧服务依赖内置Administrator,实测下来这种情况已经非常少,如果你真有特殊依赖,至少改成复杂名字,再配置强密码和登录限制。
理论上还不该止步于此,我喜欢在组策略里再加一个“诱饵”账号,名字就叫Administrator,不给任何权限,然后开启审计,谁碰它谁就有问题。这个是经验之谈,对于检测内网扫描和爆破能起到很好的警示作用。
2.2 密码与锁定策略:数值背后的逻辑
密码策略这件事,争议最大的是“长度”和“复杂度”哪个优先。现在的主流观点是长度优先:一个14位的纯短语(比如IloveMyCatAndDog)远比一个8位的乱码(P@ssw0rd)更难爆破也更好记。微软官方安全基线也是建议长度14位以上。
我在生产环境常用的一版密码策略如下:
| 策略项 | 推荐值 | 说明 |
|---|---|---|
| 密码最小长度 | 14 | 对抗离线爆破的关键 |
| 密码复杂性要求 | 启用 | 强制包含三类字符 |
| 密码最长使用期限 | 90天 | 减少长期泄漏风险 |
| 密码历史记录 | 24个 | 防止循环使用旧密码 |
| 最短密码使用期限 | 2天 | 避免用户连夜改回老密码 |
账户锁定策略很多人喜欢设得很严,比如3次就锁30分钟。但生产环境用户体验会很难受,尤其是有共享账号或服务账号的场景,连续输错几次直接把正常用户锁在外面。我用的相对稳妥的值是:5次锁定,15分钟自动解锁。
这里特别提醒一个高频翻车点:如果你给域内所有机器统一下发密码策略,务必评估现有服务账户。有些服务的密码是写死在配置文件里的,密码过期策略一改,服务半夜批量停摆。这种事我见过太多次。
2.3 远程桌面的安全门槛
远程桌面是Windows服务器最大的一扇侧门。默认端口3389,每天被全互联网扫描成千上万次。我见过最夸张的机器,开启RDP仅半天暴力破解日志就有几千条。RDP加固至少要做三件事:
- 开启网络级别认证(NLA)。NLA在真正建立远程桌面会话前先做一次用户认证,能拦掉很多早期类型的攻击工具。在组策略的“计算机配置→管理模板→Windows 组件→远程桌面服务→远程桌面会话主机→安全”里,把“要求使用网络级别的身份验证对远程桌面连接用户进行身份验证”设为启用。
- 修改默认端口。注册表项
HKLM\SYSTEM\CurrentControlSet\Control\Terminal Server\WinStations\RDP-Tcp下的PortNumber改掉。改端口不是安全手段,只是降低被批量扫描命中的概率,属于“防御但不依赖”的一层。 - 限制远程桌面用户组。默认的Administrators组自带远程登录权限,建议创建专门的RemoteUsers组,只把需要远程管理的人加进去,并检查并移除多余的成员。
2.4 UAC与本地账户空密码限制
UAC(用户账户控制)常被嫌弃弹窗烦人,正因如此不少管理员会直接拉到最低。这个习惯非常危险,UAC是Windows防御恶意程序提权的第一道闸门。服务器上的推荐配置是:对内置管理员账号以外的用户使用“提示凭据”,对内置管理员则“提示同意”。命令行程序一律“提示凭据”。
本地账户空密码限制也别忘了。默认情况下如果只允许本机控制台登录,空密码账户无法远程登录。但这个默认在部分精简系统或策略调整后可能被破坏。用安全策略里的“账户: 使用空密码的本地账户只允许进行控制台登录”检查一遍,确保是已启用状态。
3. 系统与服务加固:把能省的服务全省掉,把能加的防护都加上
3.1 更新体系:没有打补丁的Windows就是一个筛子
安全基线里最没技术含量但最救命的一项就是打补丁。不要问我“公司担心更新导致业务崩溃怎么办”,我的回答永远是:更新导致业务崩溃是一次意外,不更新被勒索病毒打死是必然事件。这两者概率根本不在一个量级。
Windows Server建议开启自动安装更新,同时配合WSUS或更新管理平台做灰度。工作站则建议启用“自动更新时间”和“重启提醒”。这里有个补充技巧:利用组策略“为更新配置自动更新”里的“安装时间段”,设定在业务低谷自动重启,能大幅减少补丁日对业务侧的干扰。
3.2 SMBv1:老协议是勒索病毒的后花园
SMBv1是WannaCry那代勒索病毒疯狂扩散的核心通道,它存在多个严重漏洞且难以修复,而绝大多数业务根本不需要它。禁用SMBv1是最低成本的巨大安全收益。
Windows Server检查SMBv1状态用这个命令:
Get-SmbServerConfiguration | Select EnableSMB1Protocol如果输出是True,直接禁用:
Set-SmbServerConfiguration -EnableSMB1Protocol $false -Confirm:$false同时建议把SMBv2/3的会话加密打开:
Set-SmbServerConfiguration -EncryptData $true -Confirm:$false但要注意:如果你网络里有老旧的NAS、复印机或工控软件依赖SMBv1,禁用前最好先做兼容性测试。之前帮一家客户加固,禁用SMBv1后他们的古董打卡机直接连不上服务器了,最后只好单独给那台打卡机所在的VLAN放行。
3.3 Windows Defender:默认防护的完全体形态
很多人装完Windows第一件事是装第三方杀软,然后顺手把Defender禁了。如果你是要上企业级EDR(端点检测与响应)产品,这样操作没问题;但如果你只是“听说某某杀软好”,那我劝你把Defender的全套功能用明白再说,它现在的实力并不弱。
至少要做四件事:
- 实时保护确认开启。在“Windows安全中心→病毒和威胁防护→管理设置”里打开实时保护。
- 打开云提供的保护。这能让Defender拿到最新的云端威胁情报。
- 开启受控文件夹访问。这个功能专门防勒索软件篡改文档,把重要的业务数据目录加进保护列表。
- 配置ASR(攻击面减少)规则。这是被低估的一块,它能把很多常见攻击手法(如Office进程创建可执行文件、脚本执行混淆内容)直接按死在摇篮里。
ASR规则可以用组策略或PowerShell启用,部分规则ID网络上能查到,包括阻止Office通信应用创建子进程、阻止从Windows本地系统邮件应用启动等。建议先开审核模式观察一周,确认不会拦截正常业务再切强制模式。
3.4 磁盘加密与安全启动:物理安全兜底
基线里容易被跳过的一项是BitLocker。很多机房没有严格的物理访问管控,一台服务器如果被直接拔硬盘走,没有BitLocker数据就等于裸奔。启用BitLocker系统盘加密后,即使硬盘被拿走,没有恢复密钥也读不出东西。
密钥管理是重中之重。BitLocker恢复密钥务必保存到Active Directory或专用的密钥管理系统,不要放在服务器本地磁盘上,否则失去意义。
安全启动(Secure Boot)主要防止启动环节被植入恶意引导程序,现在的Windows和现代固件默认支持,检查一下固件里是否是开启状态就行。这两项加在一起,相当于把“物理接触=数据泄露”这条等式给打破了。
4. 审计与日志:平时最容易被忽视,出事之后最重要
4.1 审计策略:要知道谁在什么时候做了什么
很多小环境根本不看安全日志,等被勒索病毒加密完、攻击者早就打扫干净现场了才想起来查日志,结果发现啥也没记。这种事经历一次就够。
要审计的关键类别,我按优先级排:
| 审计类别 | 设置 | 追踪目标 |
|---|---|---|
| 登录事件 | 成功+失败 | 谁成功登录、谁在爆破 |
| 账户登录事件 | 成功+失败 | 域账户/本地账户的认证行为 |
| 账户管理 | 成功+失败 | 谁创建了用户、改了组 |
| 策略更改 | 成功+失败 | 谁动了安全策略 |
| 对象访问 | 失败 | 非法访问受保护文件/注册表 |
| 进程创建 | 成功 | 结合Sysmon做攻击溯源 |
命令行设置审计策略最快的方式是使用auditpol:
auditpol /set /subcategory:"登录事件" /success:enable /failure:enable auditpol /set /subcategory:"账户管理" /success:enable /failure:enable auditpol /set /subcategory:"进程创建" /success:enable /failure:enable auditpol /set /subcategory:"对象访问" /success:enable /failure:enable如果是域环境,建议在组策略里统一配置“高级审核策略”,避免每台机器手动做。
4.2 日志容量与保留:先保证存得下来
日志存不下来,审计策略等于白设。Windows事件日志默认最大大小只有20MB,对一台稍活跃的服务器来说,可能半天就写满了,然后最早的记录会被覆盖。安全事件的“最早记录”恰恰是最需要追溯的那段。
将“应用程序”“系统”“安全”日志大小至少调整到1GB以上,并设置“不覆盖事件(手动清除日志)”。在事件查看器右侧操作面板的“属性”里能直接设置,也可以改注册表或组策略统一配置。注意:安全日志如果设成“不覆盖”,写满后系统会停止日志记录,所以要把容量给够,并配合集中的日志采集保证不丢关键事件。
4.3 PowerShell日志:红队最爱的入口,你却没记
PowerShell几乎被所有攻击者用作内网渗透的“瑞士军刀”,可默认情况下Windows对它的记录相当粗糙。至少要开启两个日志功能:模块日志和脚本块日志。
脚本块日志会把执行过的PowerShell代码(包含混淆过的代码)内容记入事件日志,对溯源来说极有价值。开启方法是组策略“计算机配置→管理模板→Windows 组件→Windows PowerShell”里打开“打开脚本块日志记录”。命令行可用:
New-Item -Path "HKLM:\SOFTWARE\Policies\Microsoft\Windows\PowerShell\ScriptBlockLogging" -Force Set-ItemProperty -Path "HKLM:\SOFTWARE\Policies\Microsoft\Windows\PowerShell\ScriptBlockLogging" -Name "EnableScriptBlockLogging" -Value 1开启之后建议搭配sysmon一起配合,记录PowerShell的网络连接和进程行为,排查事件时省力太多。
4.4 集中日志收集:别把鸡蛋放在同一个篮子里
攻击者拿下服务器后的常见操作是清理事件日志,把自己进来的痕迹抹掉。如果你只有本机日志,那他删除完你就真瞎了。务必将关键服务器的安全日志实时转发到独立的日志中心。
Windows自带的方案是使用Windows Event Forwarding(WEF),配置好订阅后,日志会实时推送到一台专门的收集服务器。也可以用第三方的采集器(比如NXLog、Winlogbeat)推到SIEM平台。最少最少,也要通过计划任务定期把安全日志备份到共享存储上。数据不离开服务器,就谈不上后续追责和复盘。
5. 网络与协议层加固:切断横向移动和嗅探的通路
5.1 Windows防火墙:默认拒绝远比默认允许安全
Windows防火墙默认对入站是“阻止”,但实际生产中经常见到有人图省事直接关掉防火墙,或者装应用时一路点“允许”。这些被放开的规则,都是攻击者横向移动时可以拿来用的通道。
正确的做法是:保持防火墙开启,入站策略默认拒绝,只放行业务真正需要的端口,并且尽量限定源IP。用PowerShell快速查看放行规则:
Get-NetFirewallRule -Direction Inbound -Enabled True | Select DisplayName, Action特别提醒:开启远程桌面时,不要放行“所有远程桌面”到“任何IP”的规则。编辑规则限定“远程地址”为管理网段或跳板机IP,这一个小动作能把RDP爆破量直接降到原来的零头。
5.2 关闭LLMNR和NBT-NS:让哈希中继无从下手
这是内网安全中性价比极高但极容易被忽略的一步。
LLMNR(链路本地多播名称解析)和NBT-NS(NetBIOS名称服务)是两种古老的名称解析协议,当DNS解析失败时,Windows会退回去用它们进行多播询问。攻击者只要在局域网里监听,就能响应这些请求,骗受害者把账号哈希发过来,再配合工具做中继或离线破解。这个攻击手法成熟得不能再成熟,而关闭两个协议对业务的影响在绝大多数环境里微乎其微。
关闭LLMNR在组策略里设置:“计算机配置→管理模板→网络→DNS客户端→关闭多播名称解析”设为已启用,对应注册表是HKLM\SOFTWARE\Policies\Microsoft\Windows NT\DNSClient下的EnableMulticast设为0。
禁用NBT-NS则要在网卡高级TCP/IP设置的WINS标签里勾选“禁用TCP/IP上的NetBIOS”。如果用命令行批量处理,可以用PowerShell遍历所有网卡关闭:
Get-WmiObject Win32_NetworkAdapterConfiguration | Where-Object { $_.TcpipNetbiosOptions -ne 2 } | ForEach-Object { $_.SetTcpipNetbiosOptions(2) }5.3 SMB签名与身份验证级别
除了禁用SMBv1,SMBv2/3也有可以压紧的安全旋钮。
微软默认在域环境中要求SMB签名,但在工作组环境里默认是不强制。攻击者可以借机做中间人攻击,篡改或转发SMB流量。建议通过组策略把“Microsoft 网络服务器: 数字签名通信(始终)”和“Microsoft 网络客户端: 数字签名通信(始终)”都设为“已启用”。
顺带看一眼“网络安全: LAN Manager 身份验证级别”,如果还在旧的Send LM & NTLM响应级别,攻击者拿到哈希后破解起来非常轻松。推荐至少设为“仅发送 NTLMv2 响应”。这能从认证协议层面淘汰掉一批容易破解的旧哈希。
5.4 端口和服务的持续管理
安全基线不是配完一次就一劳永逸的,网络和服务的暴露面每天都在变化。我习惯每季度用Get-NetTCPConnection配合Get-Process扫一遍当前机器的监听端口,对每个异常监听端口都要问一句:这个服务还活着吗?这个端口还被业务用吗?
Get-NetTCPConnection -State Listen | Select LocalPort, OwningProcess | Sort LocalPort | ForEach-Object { $proc = Get-Process -Id $_.OwningProcess [PSCustomObject]@{ Port = $_.LocalPort; PID = $_.OwningProcess; Process = $proc.ProcessName } } | Format-Table -AutoSize在端口层面上,优先级最高的是:开给数据库的端口不要暴露在业务网之外;管理类的端口(RDP、WinRM、SSH)只允许从管理网段访问;那些启动后就不再使用的遗留端口,直接禁用对应服务。端口每少一个,攻击面就小一分。
6. 配置落地与验证经验:从“改完了”到“真的生效了”
6.1 分批次落地的顺序设计
很多管理员喜欢一天之内把所有安全基线配完,然后被业务部门投诉淹没。我踩过这个坑之后总结出一套相对平顺的顺序:
- 第一批先做日志审计和账户策略。这两类是“感知型”改动,用户基本无感,但能立刻提升可见性。
- 第二批做防火墙和网络协议加固。属于“限制型”改动,会有少量兼容性问题,留足观察期。
- 第三批做SMBv1禁用、ASR规则等“硬性”防护。放在最后,等你已经能通过日志看到环境里的真实请求再动刀。
- 第四批才是BitLocker、UAC调整这类影响工作流的项目。
每批之间至少间隔两到三周,留出业务反馈的窗口。不是所有机器都能同一套策略一把过,有些老系统就是要特事特办。
6.2 验证配置有没有真正生效
改配置的人都知道,最难的不是“怎么改”,而是“怎么确认已经生效并持续有效”。
密码策略生效情况用这个命令:
secedit /export /cfg C:\secpol.cfg打开导出的文件查PasswordPolicy参数。
审计策略用auditpol /get /category:*查看每项的实际值。组策略的最终结果用gpresult /r或rsop.msc验证。网络放行规则是否生效,用Test-NetConnection对每个关键端口做连通性测试:
Test-NetConnection 10.0.0.10 -Port 3389这里提一个周期性问题:组策略有刷新周期(默认90分钟加随机偏移),改完策略后想立刻生效可以gpupdate /force,但如果未生效,先检查两条链路:策略有没有被更高层的GPO覆盖,以及客户端有没有正常连上域控的SYSVOL。
6.3 那些年我踩过的坑:盘点一遍防止你踩
坑一:把内置管理员禁用了,结果发现SQL Server代理服务跑不起来。原因是某些服务配置里指定了内置管理员账户。处理方式:如果一定需要该账号运行服务,至少保证它有超强密码,并禁止交互式登录。
坑二:账户锁定策略设成3次,公司的老总、销售连续输错密码被锁,大晚上打电话让你解锁。从那以后锁定阈值我就用5次,并开启“重置账户锁定计数器”时间为15分钟,很多误解会随着解锁窗口自动消散。
坑三:强制SMB签名后,旧打印机打不了。真要兼容,可以单独为打印机所在的VLAN创建一个例外GPO,而不是全局一把抓。我现在的习惯是“全局默认从严,例外按业务线单独开”。
坑四:给安全日志设置了“不覆盖”,但没调大容量,结果半年后日志满,服务器安全日志停止记录且没有任何通知。建议给“事件日志已满”这类严重级别事件配置告警,别让最关键的防线在沉默中失效。
6.4 基线之后的日常维护
配置做完只是起点,安全基线需要持续迭代。
Windows补丁更新后有时会重置部分安全选项,应用升级也可能悄悄打开新端口,人员离职后过去授权的账号不一定有人记得清理。我建议每季度做一次基线复核,核心就三件事:导一遍安全策略和审计策略,扫一遍监听端口变更,跑一遍权限组和本地管理员组成员清单。
有一台跳板机专门用来做配置变更和基线审计,而不是直接用生产服务器操作,也能减少很多手滑导致的故障。
安全基线这份活,没有“做完”的概念,只有“当前是否还处在受控状态”这个概念。它不能保证你的系统永远不被攻破,但能在攻击刚露头时发出信号,在攻击得手后逼着对手付出代价。系统管理员的日常就是在“业务顺畅”和“系统安全”之间找平衡,这份清单是我多年左右横跳之后总结出的比较稳的中间态,希望能让你少走几段弯路。