3. 操作系统基线(Windows):本地安全策略、用户权限分配、审核策略、防火墙规则
聊到Windows服务器安全,我第一个想到的就是基线。说白了,基线就是一套“最低安全配置标准”。你想想看,一台刚装好的Windows Server,默认配置其实挺“开放”的。如果不做加固,就像你家大门没上锁。
我个人习惯,拿到一台新服务器,第一件事就是跑一遍安全基线。今天咱们就重点聊聊四个核心模块:本地安全策略、用户权限分配、审核策略、防火墙规则。这四个东西搞定了,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 | 普通用户不应该能关机 |
3.3 审核策略
审核策略,说白了就是“谁在什么时候做了什么”。没有审核,出了安全问题你都不知道是谁干的。
我曾经帮一家公司做安全事件溯源,发现他们的服务器根本没开审核。攻击者进来逛了一圈,删了一堆日志,然后走了。我们连攻击者什么时候进来的都不知道。嗯,那种感觉真的很无力。
我建议开启以下审核策略:
- 审核登录事件 —— 成功和失败都审核。这是最基本的,谁登录了、谁登录失败了,都要记下来。
- 审核账户管理 —— 成功和失败都审核。创建用户、修改密码、启用/禁用账户,这些都要记录。
- 审核对象访问 —— 仅失败。成功访问一般不用记,否则日志量太大。但失败的访问可能是攻击尝试。
- 审核策略更改 —— 成功和失败都审核。安全策略被改了,这必须知道。
- 审核特权使用 —— 仅失败。谁试图使用自己没有的权限,记录下来。
- 审核进程跟踪 —— 仅失败。可以追踪恶意进程的启动。
配置审核策略的命令行方式:
# 使用 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 访问,攻击者根本连不上。嗯,防火墙救了一命。
我建议的防火墙规则配置原则:
- 默认拒绝入站 —— 没有明确允许的,全部拒绝。
- 按需开放端口 —— 只开放业务需要的端口,比如 Web 服务器只开 80、443。
- 限制源 IP —— 管理端口(如 RDP 3389)只允许管理网段访问。
- 出站规则也要管 —— 防止恶意软件外联。
常用的防火墙命令示例:
# 允许特定 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 操作系统基线的四个核心模块就聊到这里。本地安全策略打基础,用户权限分配控风险,审核策略留痕迹,防火墙规则守边界。这四个东西配合起来,才能形成有效的纵深防御。
记住一句话:安全基线不是配完就完事了,要定期检查、持续改进。我见过太多公司配完基线就再也不管了,结果半年后基线早就被改得面目全非。
希望今天的分享对你有帮助。如果你在实际配置中遇到什么问题,欢迎交流。