应先识别真实依赖关系,再分层阻断(禁用服务/防火墙封禁/停用服务),最后通过本地telnet、远程Test-NetConnection及防火墙规则检查三重验证端口关闭有效性。

Windows系统默认开启多个网络服务端口,如135(RPC)、445(SMB)、3389(RDP)等,这些端口若未被业务实际使用却长期暴露,极易成为攻击入口。关闭非必要端口不是简单禁用服务,而是要先识别真实依赖关系、再分层阻断、最后验证连通性,否则可能引发域认证失败、文件共享中断或远程管理瘫痪。
第一步:确认哪些端口正在监听且无业务需求
以管理员身份打开 PowerShell,执行:
Get-NetTCPConnection -State Listen | Where-Object {$_.LocalPort -in 135,137,138,139,445,3389,5985,5986} | Select-Object LocalAddress,LocalPort,State,OwningProcess | Sort-Object LocalPort
该命令只筛选高危端口范围,避免全量扫描干扰判断。重点关注OwningProcess列的PID值,记下对应进程名——比如PID为4通常代表System进程托管的服务,PID为1234可能是某个第三方软件;若某端口对应PID为空或为svchost.exe但无明确服务名,则需进一步查证。
执行 netstat -ano | findstr :445 辅助验证,对比两次结果是否一致。不一致说明有进程在短时间内启停,属于可疑行为,应暂停后续操作并排查。
第二步:按风险等级逐个关闭端口
方法一:禁用底层服务(适用于明确无依赖的端口)
例如关闭SMBv1相关端口(139/445):在管理员PowerShell中运行 【Disable-WindowsOptionalFeature -Online -FeatureName SMB1Protocol -NoRestart】。此操作不会重启系统,但会立即卸载SMBv1协议栈,后续所有基于该协议的连接(包括老旧NAS访问、某些打印机共享)将直接失败。若不确定是否依赖,跳过此法改用防火墙规则。
方法二:通过Windows防火墙阻止入站(推荐首选)
对端口135(RPC Endpoint Mapper):运行 【New-NetFirewallRule -DisplayName "Block RPC Endpoint Mapper" -Direction Inbound -Protocol TCP -LocalPort 135 -Action Block -Enabled True】。这条规则优先级高于任何允许规则,且不影响本机主动外连。注意不要同时封UDP 135——部分域控通信依赖它,盲目封锁会导致DC间复制异常。
方法三:停止并禁用服务(仅限确认无依赖的独立服务)
例如远程注册表服务(RemoteRegistry),其默认监听TCP 135端口的辅助通道。先查服务名:
Get-WmiObject Win32_Service | Where-Object {$_.Name -eq "RemoteRegistry"} | Select-Object Name,State,StartMode
若State为Running且StartMode为Automatic,则依次执行:
Stop-Service RemoteRegistry → Set-Service RemoteRegistry -StartupType Disabled。这一步不可逆,重启后服务不会自启,若之后需调试域策略,得手动恢复。
第三步:验证端口是否真正关闭
① 本地验证:在目标服务器上执行 telnet 127.0.0.1 445,若提示“无法连接到主机”,说明本地监听已断。
② 远程验证:从另一台局域网机器执行 Test-NetConnection 192.168.1.100 -Port 3389(替换为目标IP),返回TcpTestSucceeded : False才表示防火墙规则生效。
③ 关键检查:运行 【Get-NetFirewallRule -DisplayName "Block*" | Get-NetFirewallPortFilter | Where-Object {$_.LocalPort -eq 445}】,确认输出包含该端口且Enabled为True。漏掉这步可能导致规则创建成功但未启用,形同虚设。
若某端口在本地telnet失败但远程Test-NetConnection仍显示成功,说明防火墙规则未应用到对应配置文件(Domain/Public/Private),需补加 -Profile Domain,Private 参数重新创建规则。


















