3. 操作系统基线(Windows):本地安全策略、用户权限分配、审核策略、防火墙规则

聊到Windows服务器安全,我第一个想到的就是基线。说白了,基线就是一套“最低安全配置标准”。你想想看,一台刚装好的Windows Server,默认配置其实挺“开放”的。如果不做加固,就像你家大门没上锁。

我个人习惯,拿到一台新服务器,第一件事就是跑一遍安全基线。今天咱们就重点聊聊四个核心模块:本地安全策略、用户权限分配、审核策略、防火墙规则。这四个东西搞定了,Windows服务器的安全底线基本就守住了。

Windows 操作系统安全基线核心模块 Windows 安全基线 本地安全策略 密码策略 · 账户锁定 · 安全选项 用户权限分配 最小权限 · 特权账户管控 审核策略 登录审核 · 对象访问 · 策略变更 防火墙规则 入站/出站 · 端口管控 · 应用白名单 目标:纵深防御 · 最小权限 · 可审计 · 可追溯

3.1 本地安全策略

本地安全策略,是Windows安全基线的“地基”。它控制着系统最底层的安全行为。我通常把它分成三块来看:密码策略、账户锁定策略、安全选项。

3.1.1 密码策略

密码策略这块,很多公司其实做得不够。我记得有一次帮客户做等保测评,发现他们的域管理员密码竟然是“Admin123”。嗯,这跟没设密码差不多。

我建议的密码策略配置如下:

策略项 推荐值 说明
密码必须符合复杂性要求 已启用 必须包含大写、小写、数字、特殊字符中的三种
密码长度最小值 8 个字符 我个人建议至少12位,特别是管理员账户
密码最长使用期限 90 天 等保三级要求90天,金融行业建议60天
强制密码历史 5 个记住的密码 防止重复使用旧密码
用可还原的加密存储密码 已禁用 这个必须禁用,否则密码相当于明文存储
⚠️ 注意:密码策略改完后,不会影响现有密码。只有用户下次改密码时才会生效。我曾经遇到过有人改完策略以为万事大吉,结果弱密码还在用——嗯,这是个坑。

3.1.2 账户锁定策略

账户锁定策略,说白了就是防暴力破解的。你想想看,如果没有锁定机制,黑客可以对着你的服务器试密码试一整天。

我常用的配置:

  • 账户锁定阈值:5 次无效登录
  • 账户锁定时间:30 分钟
  • 重置账户锁定计数器:30 分钟之后

这里有个细节:锁定阈值别设太低,比如3次。为什么?因为正常用户也可能输错密码。我见过一个客户设了3次锁定,结果业务高峰期一堆人被锁,运维电话被打爆了。

3.1.3 安全选项

安全选项里条目很多,我挑几个最重要的说:

  • 交互式登录:不显示最后的用户名 —— 启用。防止别人知道你的系统上有哪些账户。
  • 交互式登录:无需按 Ctrl+Alt+Del —— 已禁用。这个组合键能防止某些类型的键盘记录攻击。
  • 网络访问:不允许 SAM 账户的匿名枚举 —— 启用。这个不启用,匿名用户都能枚举你的用户列表。
  • 设备:防止用户安装打印机驱动程序 —— 启用。减少攻击面。
💡 小技巧:安全选项配置完后,可以用 secpol.msc 打开本地安全策略管理单元,然后右键导出模板。这样下次重装系统或者批量部署时,直接导入就行。

3.2 用户权限分配

用户权限分配,核心就一句话:最小权限原则。给用户刚刚好的权限,不多给一分。

我在项目中遇到过一件事:一个开发人员为了省事,把自己的域账号加到了本地 Administrators 组。结果他的电脑中了勒索病毒,病毒利用管理员权限加密了整个共享文件夹。嗯,教训深刻。

以下是我重点关注的权限分配项:

权限项 推荐配置 说明
从网络访问此计算机 只保留 Administrators、Authenticated Users 去掉 Everyone、Guest 等
拒绝本地登录 添加 Guest、非必要服务账户 服务账户原则上不应交互登录
作为批处理作业登录 只给需要运行计划任务的账户 别给普通用户这个权限
允许通过远程桌面服务登录 只给 Remote Desktop Users 组 别直接把管理员放进去
关闭系统 只保留 Administrators 普通用户不应该能关机
🔑 核心原则:Administrators 组里只放真正需要管理权限的人。我见过一个公司,整个 IT 部门都在 Administrators 组里,20多个人。这其实很危险——任何一个人的账号被攻破,整个域就沦陷了。

3.3 审核策略

审核策略,说白了就是“谁在什么时候做了什么”。没有审核,出了安全问题你都不知道是谁干的。

我曾经帮一家公司做安全事件溯源,发现他们的服务器根本没开审核。攻击者进来逛了一圈,删了一堆日志,然后走了。我们连攻击者什么时候进来的都不知道。嗯,那种感觉真的很无力。

我建议开启以下审核策略:

  • 审核登录事件 —— 成功和失败都审核。这是最基本的,谁登录了、谁登录失败了,都要记下来。
  • 审核账户管理 —— 成功和失败都审核。创建用户、修改密码、启用/禁用账户,这些都要记录。
  • 审核对象访问 —— 仅失败。成功访问一般不用记,否则日志量太大。但失败的访问可能是攻击尝试。
  • 审核策略更改 —— 成功和失败都审核。安全策略被改了,这必须知道。
  • 审核特权使用 —— 仅失败。谁试图使用自己没有的权限,记录下来。
  • 审核进程跟踪 —— 仅失败。可以追踪恶意进程的启动。
⚠️ 注意:审核策略开太多,日志量会非常大。特别是文件服务器,如果开了“审核对象访问-成功”,一天能产生几GB的日志。我建议先开失败审核,等有需要再开成功审核。

配置审核策略的命令行方式:

# 使用 auditpol 命令配置审核策略
auditpol /set /subcategory:"Logon" /success:enable /failure:enable
auditpol /set /subcategory:"Account Management" /success:enable /failure:enable
auditpol /set /subcategory:"Policy Change" /success:enable /failure:enable
auditpol /set /subcategory:"Privilege Use" /success:disable /failure:enable

# 查看当前审核策略
auditpol /get /category:*

3.4 防火墙规则

Windows 防火墙,很多人觉得没用,直接关了。我强烈不建议这么做。Windows 防火墙是主机层面的第一道防线,特别是对于暴露在公网的服务器。

我记得有一次,一台数据库服务器被扫描到开放了 1433 端口(SQL Server)。攻击者尝试了暴力破解。幸好防火墙只允许特定 IP 访问,攻击者根本连不上。嗯,防火墙救了一命。

我建议的防火墙规则配置原则:

  1. 默认拒绝入站 —— 没有明确允许的,全部拒绝。
  2. 按需开放端口 —— 只开放业务需要的端口,比如 Web 服务器只开 80、443。
  3. 限制源 IP —— 管理端口(如 RDP 3389)只允许管理网段访问。
  4. 出站规则也要管 —— 防止恶意软件外联。

常用的防火墙命令示例:

# 允许特定 IP 访问 RDP
netsh advfirewall firewall add rule name="Allow RDP from Management" 
  dir=in protocol=tcp localport=3389 
  remoteip=192.168.1.0/24 action=allow

# 阻止所有其他 IP 访问 RDP(默认规则已经是阻止,但可以显式添加)
# 注意:防火墙默认入站就是阻止,所以不需要额外添加阻止规则

# 允许特定程序出站
netsh advfirewall firewall add rule name="Allow Chrome Outbound" 
  dir=out program="C:\Program Files\Google\Chrome\Application\chrome.exe" 
  action=allow

# 查看所有防火墙规则
netsh advfirewall firewall show rule name=all
💡 小技巧:配置防火墙规则时,建议先创建一条“拒绝所有”的规则放在最后,作为兜底。然后上面放允许规则。这样即使有遗漏,也不会意外开放端口。

3.5 实战建议:基线自动化

说了这么多,你可能会问:难道每台服务器都手动配一遍?当然不是。我建议用脚本或者组策略批量下发。

对于域环境,直接用组策略对象(GPO)统一配置。对于非域环境,可以用 PowerShell DSC 或者自己写脚本。

这里给一个简单的 PowerShell 基线检查脚本片段:

# 检查密码策略
$passwordPolicy = Get-ItemProperty -Path "HKLM:\SYSTEM\CurrentControlSet\Control\Lsa"
if ($passwordPolicy.MinimumPasswordLength -lt 8) {
    Write-Warning "密码长度不足8位,当前为: $($passwordPolicy.MinimumPasswordLength)"
}

# 检查审核策略
$auditPolicy = auditpol /get /subcategory:"Logon"
if ($auditPolicy -notmatch "成功和审核") {
    Write-Warning "登录审核未完全开启"
}

# 检查防火墙状态
$firewallStatus = Get-NetFirewallProfile -Profile Domain,Public,Private
foreach ($profile in $firewallStatus) {
    if ($profile.Enabled -eq $false) {
        Write-Warning "防火墙在 $($profile.Name) 配置文件中已禁用"
    }
}

嗯,这个脚本虽然简单,但能帮你快速发现基线偏离。我每次巡检都会跑一遍,省时省力。


好了,Windows 操作系统基线的四个核心模块就聊到这里。本地安全策略打基础,用户权限分配控风险,审核策略留痕迹,防火墙规则守边界。这四个东西配合起来,才能形成有效的纵深防御。

记住一句话:安全基线不是配完就完事了,要定期检查、持续改进。我见过太多公司配完基线就再也不管了,结果半年后基线早就被改得面目全非。

希望今天的分享对你有帮助。如果你在实际配置中遇到什么问题,欢迎交流。

公众号:蓝海资料掘金营,微信deep3321