ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

Windows Server 2019安全加固:服务、网络与账号策略实战指南

Windows Server 2019安全加固:服务、网络与账号策略实战指南 简介一份围绕 Windows Server 2019 操作系统安全配置与系统加固的 Word 技术文档面向服务器运维人员、网络安全管理者及企业 IT 学习者聚焦安全基线设置与加固落地帮助降低网络病毒、木马及恶意程序对服务器带来的攻击风险。资源为单个 docx 文件压缩包整体约 21KB篇幅精炼、便于保存与随查。目前已有 164 人学习浏览适合需要在 Windows Server 2019 部署前构建安全配置清单的读者。文档以系统化方式梳理了注册表编辑器、组策略、系统服务启动策略、Windows 更新与本地安全策略等关键配置覆盖网络访问账号限制、禁用 SAM 账户匿名枚举、密码复杂度与账户锁定阈值设置、成功与失败审核策略开启、事件日志最大容量调整等具体选项并说明各配置项的生效条件与相互关联可帮助读者快速形成可执行的操作系统加固方案提升服务器本地与网络两个层面的安全性。1. Windows Server 2019 安全加固不是装完系统就完事Windows Server 2019 的系统加固在多数运维眼里是有空再做的活实际上一台裸奔的 Server 2019 放进内网被扫描器盯上的速度比想象中快得多。这篇笔记对应一份按《WindowsServer2019操作系统安全配置与系统加固探讨》整理的可复现加固资源涉及组策略、注册表、本地安全策略、事件查看器和防火墙等核心组件适合刚接手服务器的新手系统跟一遍也适合老手对照查漏。全文按先改服务与更新 → 再堵网络入口 → 再收紧账号策略 → 最后开审计的顺序推进每个配置项都给出位置、参数和生效条件照着做基本不会出大问题。2. 系统服务与自动更新先关掉不必要的门再让补丁自己到位2.1 系统服务启动策略先看清默认状态再动手Windows 的大部分重要功能都挂在系统服务上而服务默认启动策略分三档自动、手动、禁用。自动表示开机就拉起手动表示需要时再启动禁用则直接不允许启动。服务器的角色不同需要的服务差异很大比如一台纯 Web 服务器根本用不到传真服务一台离线开发机也不需要 Windows Update 定时扫更新。安全加固的第一步就是把那些用不到但仍开机运行的服务改成手动或禁用减小攻击面。打开服务管理器最直接的方式是运行services.msc也可以直接用 PowerShell 查看当前服务状态# 查看当前所有服务的启动类型和状态 Get-Service | Sort-Object Status, Name | Format-Table -AutoSize # 只看处于 Running 状态的服务 Get-Service | Where-Object { $_.Status -eq Running } | Format-Table -AutoSize第一段命令把全部服务的状态和启动类型列出来方便你先摸清家底第二段过滤出正在运行的服务结合服务器实际角色逐个判断这个服务我到底用不用。判断标准很简单不知道是什么的服务先查官方文档确认与业务无关再动别看见英文名就禁用。确认要改的服务后修改启动类型有两种方式。图形界面在服务属性里直接改启动类型下拉框命令行用Set-Service但它的参数覆盖不全更稳的做法是用sc.exe直接写配置# 将 Print Spooler 服务设为禁用非打印服务器场景 sc.exe config Spooler start disabled # 将 Windows Error Reporting 服务设为手动 sc.exe config WerSvc start demandsc.exe config 服务名 start 参数中start后面支持auto、demand、disabled分别对应自动、手动、禁用。注意start和值之间必须有一个空格这是sc.exe的老毛病写反了会直接报参数错误。改完后建议重启一次服务器确认改动不会影响业务进程启动。动手之前还有个容易被跳过的步骤先把当前服务启动类型导出一份作为基线。执行sc.exe qc 服务名逐个记录或者用Get-Service生成清单存到本地出问题时对照还原。我一般会在加固前把这台服务器上所有 Running 状态的服务记录到一个文本文件里后续排查异常时能少花很多时间。常见加固场景里Print Spooler打印后台处理一直是高危常客非打印服务器直接禁用Windows Search索引服务在服务器上收益极低却持续占用 CPU没有文件搜索需求可以禁用Xbox Live相关的服务属于个人系统遗产Server 2019 上偶尔也会出现遇到即禁。以上只是示例最终清单必须按服务器角色裁剪这是平衡性能、功能和安全三者关系的关键。2.2 自动更新配置组策略与设置双通道对照系统服务收紧了补丁通道也得打通。原文给的路径是设置 → 更新和安全 → Windows 更新 → 更改设置在设置页面里选需要的更新方式。但 Server 2019 的设置界面比 Windows 10 精简真正精细的控制在本地组策略编辑器里计算机配置 → 管理模板 → Windows 组件 → Windows 更新右侧双击允许自动更新立即安装选已启用再把配置自动更新下拉框选成3 - 自动下载并通知安装确定保存。这里解释一下3 - 自动下载并通知安装的含义它表示系统会在后台自动下载更新下载完成后提示管理员决定何时安装。对服务器来说这是最稳妥的档位——既不会错过补丁也不会像自动下载并计划安装那样在某个时间点强制重启把生产业务直接打断。选项编号在不同版本系统里显示略有差异老版本还会出现2 - 通知下载并通知安装和4 - 自动下载并计划安装选型时按业务容忍度来能接受计划内重启就用 4不能接受就用 3。还有一个容易被忽略的点如果机器加入了域本地组策略会被域策略覆盖你在这里改完了过一会儿组策略刷新又可能被拉回去。确认当前生效策略可以用gpresult /r查看或者运行rsop.msc打开策略结果集看Windows 更新节点最终落在哪个值上。工作组环境下本地策略就是最终策略只要不手动还原改动会一直保留。配置自动更新选项行为适用场景2 - 通知下载并通知安装只提醒不下载需要严格管控补丁包内容的场景3 - 自动下载并通知安装后台下载安装前询问大多数生产服务器原文档推荐4 - 自动下载并计划安装定时下载并重启可接受计划内重启的业务用命令行的方式检查当前 Windows 更新配置可以从注册表对应项读出来# 读取 Windows 更新相关的策略项 reg query HKLM\SOFTWARE\Policies\Microsoft\Windows\WindowsUpdate\AU /s输出里重点看NoAutoUpdate和AUOptions两个键NoAutoUpdate为0表示自动更新未被禁用AUOptions的值为3表示当前策略是自动下载并通知安装为4则表示自动下载并计划安装。如果这条注册表路径不存在说明当前更新策略没有被组策略接管系统按默认行为走这时候要回头检查策略是否真的应用上了。2.3 补丁检查用 Get-HotFix 确认补丁真的到位更新策略配好后还要确认历史补丁和当前补丁状态避免出现策略开了但补丁积压一堆的情况。PowerShell 里可以直接查已安装的补丁列表# 列出所有已安装的更新补丁 Get-HotFix | Sort-Object InstalledOn -Descending | Select-Object -First 20这条命令会把最近 20 条已安装的补丁按安装时间倒序列出来重点看InstalledOn日期是否在最近一个月内。如果日期停留在几个月前说明这台服务器的补丁通道之前是断的即使现在策略改对了也需要手动触发一次更新检查把缺口补上。触发方式是在设置 → Windows 更新 → 检查更新里点一下或者等策略生效后的自动周期。补丁这件事最怕的就是策略看着对实际没补定期用这条命令抽查几台服务器比相信控制台状态要实在得多。3. 网络层加固SAM 匿名枚举与远程访问权限的关键开关3.1 从网络访问此计算机只留一个远程登录账号网络层加固首推从网络访问此计算机这个用户权限分配项它的位置在本地安全策略 → 本地策略 → 用户权限分配。这个权限决定了哪些账号可以从网络连到这台服务器默认情况下包含 Administrators、Users 等在内的多个组。原文的加固做法是只保留一个专用于远程登录的 Administrator 组成员账号把其他账号一律从列表里删除。开始动手前建议先打开计算机管理 → 本地用户和组把当前所有管理员和普通用户列出来确认谁真的有远程登录需求。这个清单是后续删除授权的依据也是出问题时的还原凭证。别在没做清单的情况下直接删等出了问题你连原来谁有权限都不知道。为什么这么改因为服务器上很多服务文件共享、远程管理、SQL 连接本质都走网络登录账号越多暴力破解和哈希传递的攻击面就越大。删掉不必要的账号等于把网络入口从很多人能进收窄到只有这一个人能进。修改时直接双击该策略项选中多余的账号或组点击删除保留目标账号即可。有些加固文档建议把 Everyone、Guests 和 Users 组都删掉只留 Administrators 组这对纯管理的服务器是合理的但如果是应用服务器SQL Server 或 IIS 的工作进程需要通过网络访问本机资源误删会导致应用异常。我一般建议先用隔离环境测试或者至少记录删除前的完整列表方便出问题时还原。注意这里删除的是从网络访问本计算机的授权不影响本地控制台登录操作时千万看清窗口标题别把允许在本地登录也顺手删了。3.2 SAM 匿名枚举与空白密码本地账户四个安全选项一次改到位第二块是安全选项里的四个开关都在本地安全策略 → 本地策略 → 安全选项下策略项推荐状态作用网络访问不允许 SAM 帐户的匿名枚举已启用禁止匿名用户枚举本地用户列表网络访问不允许 SAM 帐户和共享的匿名枚举已启用在上一项基础上连共享资源一起保护帐户使用空白密码的本地帐户只允许进行控制台登录已启用空密码账号禁止远程登录网络访问将 Everyone 权限应用于匿名用户已禁用匿名访问不再继承 Everyone 的权限前两项针对的是很多人忽视的 SAM 枚举。SAM 数据库里存着本地账号信息如果允许匿名枚举攻击者不需要任何凭据就能通过 SMB 空会话把系统用户名列出来配合密码喷洒很快就能试出弱口令账号。启用这两项后空会话枚举用户列表的常见手法就会失效。第三项针对空白密码账号。默认情况下 Windows 禁止空密码账号远程登录但这条策略一旦被改乱空密码账号就有机会通过网络连进来。本地服务器尤其容易踩这个坑有人为了方便给某账号设了空密码以为内网环境安全结果被内网扫描直接登进来。启用这条策略空密码账号只能坐在服务器前用控制台登录等于给这类账号加了一道物理锁。第四项是将 Everyone 权限应用于匿名用户。Windows 的文件共享在匿名访问时默认会匿名用户映射到 Everyone 组如果这个选项处于启用状态匿名用户就能继承 Everyone 的读取和执行权限共享目录里的敏感文件等于对全内网开放。改成已禁用后匿名访问的权限会被严格限制共享行为必须在明确授权下进行。这四个策略改完后原文强调要重启服务器才能生效。这在运维里是个常见的玄学时刻——明明策略项已经显示为已启用但 SMB 扫描结果还是能枚举出用户列表。原因就是安全选项类策略多数需要重启或至少重启相关服务进程才完全生效别改完立刻测先重启再验证。验证方法也不难在本机尝试建立空会话# 测试空会话是否被拒绝本机回环测试 net use \\127.0.0.1\ipc$ /user:加固前这条命令通常能成功建立连接加固并重启后会报系统发生错误 5拒绝访问或类似提示说明匿名访问路径已被堵住。注意测试要用回环地址在生产网段里对别的机器做这种测试容易引起误判和告警。这类验证在加固文档里很少写但实际运维中非常有用能直观确认策略不是纸面配置。4. 账号策略与密码策略把暴力破解挡在登录之前4.1 密码策略复杂性、最小长度与最长使用期限账号安全的第一道闸门是密码策略位置在本地安全策略 → 安全设置 → 账户策略 → 密码策略。原文建议把密码必须符合复杂性要求设为已启用同时限制密码最小长度和最长使用期限。三项配合起来才不是摆设。复杂性要求启用后密码必须同时包含大写字母、小写字母、数字和特殊字符中的至少三类且不能包含用户名。这能直接过滤掉一批123456、password级别的弱口令。密码最小长度方面微软基线建议 14 位以上但实际运维中 14 位密码在键盘输入和记忆上负担较重很多团队折中取 12 位。我倾向于不降太多至少 12 位起步配合长度策略让密码喷洒的攻击成本翻好几倍。密码最长使用期限建议设为 60 到 90 天到期强制改密避免一个密码泄漏后长期有效。图形界面下双击策略项在输入框填数值点确定即可。命令行下密码策略没有直接的单一命令可改我通常用图形界面完成如果有多台服务器要批量加固可以用secedit导出基准配置再导入到其他机器这是规模化加固的常用做法。执行secedit /export /cfg C:\baseline.cfg导出当前配置在文本里修改MinimumPasswordLength、MaximumPasswordAge等字段再用secedit /configure /db secedit.sdb /cfg C:\baseline.cfg导入到目标机器适合需要统一标准的场景。还要提醒一句密码复杂性策略只管新设置的密码对已经存在的弱密码不生效。所以改完策略后最安全的做法是强制相关账号重置一次密码。很多团队改完策略以为高枕无忧了实际上存量密码还是 Pssw0rd 这种等于没加固。用net user 用户名 /logonpasswordchg:yes可以强制用户下次登录时改密或者直接在用户属性里勾选用户下次登录时须更改密码。4.2 账户锁定策略阈值、锁定时间与计数器重置怎么配密码策略只能提高密码质量挡不住暴力破解真正兜底的是账户锁定策略。位置在账户策略 → 账户锁定策略三个参数要一起配账户锁定阈值、账户锁定时间和重置账户锁定计数器。账户锁定阈值是核心原文建议设在 10 次以内。设成 10 意味着攻击者对一个账号最多试 10 次密码之后该账号被锁定短时间内无法再试。这个值太低也有问题比如设成 3运维人员自己手抖输错几次密码就被锁生产环境会很难受。账户锁定时间建议设为 15 到 30 分钟给攻击者足够的等待成本也方便管理员处理。重置账户锁定计数器则建议等于或大于锁定时间否则计数器提前清零锁定效果会打折扣。三个参数在图形界面各有一个输入框但修改顺序有讲究必须先设账户锁定阈值大于 0系统才会激活整个锁定策略并允许设置另外两项。如果你先改锁定时间会发现界面上的其他选项是灰色的这就是很多新手改完发现没生效的原因。参数配好后用net accounts复核确认Lockout threshold和Lockout duration已变成目标值。验证锁定策略是否生效可以在确保网络允许的前提下用本机一个测试账号故意输错密码连续输错到阈值次数然后运行net user 用户名输出里Account locked out标记显示为Yes即代表锁定已触发。验证完记得用管理员账号解锁避免影响后续使用。还能顺带检查一下 RDP 场景本地策略的账户锁定策略对本地直接登录和网络登录都生效所以远程桌面连续输错密码同样会触发锁定这也是建议阈值不要设太低的原因——既要拦攻击者也不能误伤正常的远程运维。这里提一个进阶用法在域环境下本地账户策略会被域策略覆盖这时应该用细粒度密码策略PSO按组设置不同强度的密码和锁定规则而不是改每台机器的本地策略。工作组环境则没有这个问题本机策略就是最终策略。5. 加固过程中的常见问题与避坑记录现象、原因、解决以下几条踩坑记录全部来自实际加固过程中遇到的情况每一条都按现象 → 原因 → 解决整理你在照着前面章节操作时大概率会命中其中一两条。5.1 本地安全策略改完重启还是不生效现象secpol.msc里明明显示已启用重启后测试发现枚举、锁定等行为跟改之前一样像没改过。原因一是安全选项类策略部分依赖相关服务进程重新加载重启是前提二是机器加入域后域策略在组策略刷新时覆盖了本地策略三是某些策略项的生效并不是全局的比如账户锁定策略对已登录会话不生效要等会话断开。解决先确认机器有没有加域加了域就用gpresult /r看实际生效策略来源没加域就检查rsop.msc里的最终值。确认被本地策略接管后执行gpupdate /force强制刷新再重启。从那以后我每次改安全选项都强制走一遍改策略 → gpupdate /force → 重启 → 用命令复核的流程再没遇到过改完无效的情况。5.2 禁用 Everyone 匿名权限后共享目录访问报拒绝访问现象按加固项把将 Everyone 权限应用于匿名用户改为已禁用后内网其他机器访问这台服务器的共享文件夹开始报错权限不足。原因部分老旧的业务系统或打印机驱动依赖匿名访问共享来读取配置文件之前匿名用户通过 Everyone 组拿到了访问权禁用后匿名路径被切断这些业务就出问题了。解决先确认报错的客户端有没有走合法的账号认证如果业务允许给共享目录单独建立访问账号并配置共享级与 NTFS 权限如果确实需要匿名读取就把匿名访问限定到特定共享目录而不是在全局策略里放开 Everyone。这属于策略本身没错业务兼容性没评估到位的典型踩坑。5.3 锁定阈值设太严把自己锁在服务器外现象把账户锁定阈值设为 3结果管理员在远程桌面里输错两次密码账号被锁远程登录直接拒绝只能跑机房或用带外管理解锁。原因本地账户锁定策略对管理员账号同样生效且远程桌面输错密码会计入失败次数。阈值设得过低正常人的误操作都会被当成攻击拦截。解决阈值建议控制在 5 到 10 次锁定时间 15 分钟左右即可管理员账号单独走强密码加多因素认证策略而不是靠高锁定阈值保护。万一被锁控制台登录时如果还带着本地策略限制可以进安全模式调整策略或者用另一个本地管理员账号解锁。我见过不少团队因为这事把锁定策略删了结果又回到裸奔状态其实阈值设在合理区间内再加监控告警才是正解。5.4 审核策略全开成功失败后安全日志疯涨现象按建议把审核登录、进程跟踪、系统事件全部设为成功失败运行几天后安全日志达到上限事件查看器报日志已满服务器性能下降。原因进程跟踪这类审核项的事件量极大每个进程的启动和退出都会产生事件全开之后日志量翻了好几倍再加上日志最大大小没有同步提高很快被写满。一台有几十个后台服务的服务器一天产生几十万条进程事件是常态。解决把审核进程跟踪从成功失败调整为仅失败或者干脆关闭成功事件同时按原文建议把日志最大大小调到 25600KB约 25MB并根据事件量评估是否进一步加大。日志定期转储也要配上让旧日志归档而不是被直接覆盖。生产环境通常只需要审核登录、账户管理和系统事件进程跟踪留给开发调试环境。5.5 远程桌面连不上以为是网络策略问题现象加固完后尝试远程桌面连接提示拒绝或超时第一反应是修改从网络访问此计算机时把远程桌面用户组删坏了。原因排查后多数情况不是权限问题而是防火墙入站规则远程桌面没有启用或者 3389 端口被其他规则拦截。修改用户权限分配确实会影响远程登录但影响的是有没有权限端口不通是另一层问题。解决先用Test-NetConnection -ComputerName IP -Port 3389测端口通不通再确认系统防火墙远程桌面规则已允许最后用gpresult /r核对当前登录权限。三层排查顺序不能乱否则很容易在权限配置上反复折腾实际是防火墙的锅。5.6 改完策略后业务异常需要快速回滚却没有备份现象加固完成后某个业务服务启动失败或功能异常一时分不清是哪个策略导致的凭着记忆撤销又怕改错。原因安全加固往往同时改了服务、权限、策略多个点问题出现时无法快速定位是服务被禁用、权限被移除还是网络策略隔离了调用。解决建议在加固前用secedit /export导出原始策略文件并保存在本机之外服务启动类型用sc.exe qc逐一记录。出现异常时对照原始配置逐项回滚不要凭记忆撤销。如果没有备份先检查服务是否被禁用、账号是否被移出网络登录权限、防火墙入站规则是否被修改按这个顺序排查命中率最高。以上这些坑很多是改完才发现文档里没写清楚的地方提前知道能省不少时间。6. 加固后验证用命令和日志确认每项配置真实生效6.1 用命令复核策略值图形界面显示已启用不代表行为一定符合预期我会用命令把策略导出检查一遍确认关键项真的写进去了# 导出当前安全策略 secedit /export /cfg C:\secpol.cfg# 查看密码和锁定策略 net accounts# 查看服务启动类型 sc.exe qc Spooler导出后重点搜索SeNetworkLogonRight从网络访问此计算机、LockoutBadCount锁定阈值、MinimumPasswordLength密码最小长度这几个字段与预期比对。net accounts的输出直接对应密码策略与锁定策略sc.exe qc看服务启动类型比图形界面更可靠。6.2 用事件日志验证行为策略值正确还不够再用行为验证收尾在安全日志里刻意制造一次错误密码登录应能看到4625登录失败事件继续失败触达锁定阈值后应出现4740账户被锁定事件。这两个事件同时出现说明锁定策略真实生效。再把应用程序、安全、系统三类日志的最大大小调成 25600并设为按需覆盖事件避免日志写满后停止记录。审核日志的价值在事发后复盘才体现得最明显——一份完整的安全日志就像系统的后悔药前提是规则提前设好、容量留够。从那以后我每次加固完都强制走一遍先导策略、再对行为、最后看日志的三步流程。希望这些验证习惯能帮你在 Server 2019 加固这条路上少走弯路。本文还有配套的精品资源点击获取
返回列表