Windows服务器默认开放的大量系统共享端口,是攻击者横向移动和信息收集的首选目标。很多运维人员只关注业务端口,却忽略了135、139、445这类系统级端口带来的风险。关闭无用系统共享端口不是简单地在防火墙里加几条规则,而是需要结合服务禁用、注册表调整、防火墙策略和网络层控制协同完成。
先定位哪些端口属于“无用系统共享端口”
在Windows服务器中,与系统共享和远程管理相关的端口主要集中在以下几个:TCP 135(RPC Endpoint Mapper)、TCP 139(NetBIOS Session Service)、TCP 445(SMB over TCP)、UDP 137(NetBIOS Name Service)、UDP 138(NetBIOS Datagram Service)。此外,TCP 3389(远程桌面)如果不需要也应关闭,TCP 5985/5986(WinRM)在非管理场景下同样属于高风险端口。
判断一个端口是否“无用”,标准是看当前服务器角色是否依赖它。文件服务器需要445,域控需要135和445,但一台纯Web服务器或数据库服务器通常完全不需要这些端口对外监听。很多服务器默认开启了“Microsoft网络的文件和打印机共享”和“Microsoft网络客户端”,导致这些端口无意义地暴露。
通过禁用服务从根源关闭端口
最彻底的方式是停止并禁用产生这些端口的系统服务。打开服务管理器(services.msc),找到以下服务:
Server服务(LanmanServer)——这是445端口的主要来源。如果服务器不需要对外提供文件共享或打印机共享,直接停止并禁用。禁用后,TCP 445和部分139流量会消失。但要注意,禁用Server服务会影响某些依赖SMB的管理操作,例如远程执行PsExec或通过共享路径访问本机文件。对于纯Web服务器、应用服务器、数据库服务器,禁用Server服务是安全的。
TCP/IP NetBIOS Helper服务(lmhosts)——该服务负责NetBIOS名称解析,关闭后UDP 137和UDP 138的监听会停止。如果网络环境中没有使用NetBIOS名称解析(现代Windows网络基本依赖DNS),这个服务可以安全禁用。
Remote Registry服务——该服务允许远程用户修改本机注册表,虽然不直接对应某个固定端口,但它依赖RPC,关闭后能显著降低135端口被利用的风险。任何非域控服务器都应禁用此服务。
Windows Remote Management(WinRM)服务——对应5985和5986端口。如果不用PowerShell远程管理或Server Manager远程管理,直接禁用。很多服务器默认启用了WinRM,但实际从未使用过。
Remote Desktop Services(TermService)——对应3389端口。如果不需要远程桌面,禁用该服务。如果必须保留远程桌面,至少应修改默认端口或限制来源IP,但本文讨论的是关闭无用端口,所以建议直接禁用。
停止服务后,记得将启动类型改为“禁用”,否则重启后端口会再次开放。操作命令如下:
Stop-Service -Name LanmanServer -Force Set-Service -Name LanmanServer -StartupType Disabled Stop-Service -Name lmhosts -Force Set-Service -Name lmhosts -StartupType Disabled Stop-Service -Name RemoteRegistry -Force Set-Service -Name RemoteRegistry -StartupType Disabled Stop-Service -Name WinRM -Force Set-Service -Name WinRM -StartupType Disabled Stop-Service -Name TermService -Force Set-Service -Name TermService -StartupType Disabled
通过注册表彻底关闭NetBIOS over TCP/IP
仅禁用lmhosts服务有时不够彻底,因为NetBIOS over TCP/IP可以在网卡层面独立开启。即使服务停止,某些情况下系统仍会响应NetBIOS查询。需要在注册表中对每个网络接口禁用NetBIOS。
打开注册表编辑器,定位到:
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\NetBT\Parameters\Interfaces
在该路径下,每个网络接口对应一个子键(以GUID命名)。找到当前正在使用的网卡对应的子键,将NetbiosOptions的值设置为2(0表示默认,1表示启用,2表示禁用)。如果服务器有多个网卡,需要对每个活动的网卡都做此设置。修改后重启服务器生效。
更直接的方式是通过网络适配器设置:打开网络连接,右键网卡属性,选择“Internet协议版本4(TCP/IPv4)”,点击“高级”,在“WINS”选项卡中选择“禁用TCP/IP上的NetBIOS”。这个操作本质上就是修改上述注册表值。
防火墙策略做最后一道防线
服务禁用和注册表调整后,还需要在防火墙层面做兜底。即使某个服务被意外启动,防火墙规则也能阻止外部访问。Windows防火墙默认入站规则中,很多系统端口是放行的,尤其是“文件和打印机共享”相关的规则组。
打开“高级安全Windows防火墙”,在入站规则中找到以下规则组并禁用:
文件和打印机共享(SMB-In)——对应445端口
文件和打印机共享(NB-Session-In)——对应139端口
文件和打印机共享(NB-Name-In)——对应137端口
文件和打印机共享(NB-Datagram-In)——对应138端口
远程桌面——对应3389端口(如果已禁用服务,此规则无实际作用,但建议同时禁用)
Windows远程管理——对应5985和5986端口
如果服务器有多个网络配置文件(域、专用、公用),需要确保在所有配置文件下都禁用这些规则。很多运维人员只禁用了“公用”配置文件下的规则,但服务器实际运行在“域”或“专用”配置文件下,导致规则不生效。
更严格的做法是直接创建阻止规则,而不是仅禁用允许规则。在入站规则中新建自定义规则,协议选择TCP,本地端口输入135,139,445,3389,5985,5986,操作选择“阻止连接”,配置文件全选,命名为“Block Unused System Sharing Ports”。这样即使系统服务重新开启,防火墙也会拦截外部访问。
针对135端口的特殊处理
135端口是RPC Endpoint Mapper,很多Windows服务依赖RPC机制,不能简单通过禁用某个服务来关闭。直接禁用RPC服务(RpcSs)会导致系统大量功能异常,甚至无法正常启动。因此,关闭135端口主要依靠防火墙策略。
在防火墙中创建阻止规则,阻止TCP 135的入站连接。对于出站连接,通常不需要限制,因为服务器主动发起的RPC请求是正常行为。如果服务器不需要接收任何远程RPC调用,入站阻止规则足够安全。
需要注意的是,某些管理工具(如远程事件查看器、远程服务管理器)依赖135端口。如果服务器需要被远程管理,关闭135会导致这些工具失效。此时可以考虑使用WinRM或远程桌面替代,或者通过带外管理网络访问。
验证端口关闭效果
完成上述操作后,需要验证端口是否真正关闭。在服务器本机执行以下命令查看监听状态:
netstat -ano | findstr "135 139 445 137 138 3389 5985 5986"
如果输出为空,说明这些端口已不再监听。如果仍有监听,需要根据PID找到对应进程,确认是哪个服务仍在占用。
从外部主机进行端口扫描验证更可靠。使用PowerShell的Test-NetConnection命令:
Test-NetConnection -ComputerName 服务器IP -Port 445
如果TcpTestSucceeded显示为False,说明端口已成功关闭。依次测试135、139、445、3389等端口,确保全部不可达。
关闭端口后的运维注意事项
关闭系统共享端口后,一些日常运维操作会受到影响。通过共享路径访问服务器文件(如\\服务器IP\C$)将不可用,PsExec远程执行命令也会失败,因为PsExec依赖445端口和Admin$共享。如果运维团队习惯使用这些方式管理服务器,需要提前准备替代方案。
替代方案包括:使用WinRM进行PowerShell远程管理(如果保留了5985端口),或者通过带外管理网络使用远程桌面,或者使用服务器厂商提供的远程管理卡(如iLO、iDRAC)。对于文件传输,可以使用SFTP或HTTPS替代SMB共享。
此外,关闭NetBIOS后,局域网内通过计算机名访问该服务器可能会受到影响,因为NetBIOS名称解析被禁用。现代Windows网络默认优先使用DNS解析,只要DNS配置正确,计算机名访问不会受影响。但如果网络中存在老旧系统或依赖NetBIOS广播的应用,需要提前评估。
针对不同服务器角色的差异化处理
并非所有服务器都适合一刀切关闭所有系统共享端口。文件服务器必须保留445端口,否则无法提供文件共享服务。域控必须保留135、445以及一系列RPC相关端口,否则域认证和复制会失败。Exchange服务器、SQL Server集群等也可能依赖SMB进行节点间通信。
因此,关闭端口前必须明确服务器角色和依赖关系。建议在测试环境中先执行关闭操作,观察业务是否正常,再推广到生产环境。对于必须保留的端口,应通过防火墙限制来源IP,只允许信任的管理网络或特定服务器访问,而不是对所有地址开放。
对于Web服务器、应用服务器、缓存服务器、消息队列服务器等不提供文件共享和远程管理需求的角色,关闭上述端口基本不会影响业务运行,反而能显著减少攻击面。
总结
关闭Windows服务器的无用系统共享端口,核心操作包括禁用Server服务、禁用TCP/IP NetBIOS Helper服务、禁用Remote Registry、禁用WinRM和远程桌面服务,同时在防火墙中创建阻止规则兜底。135端口无法通过禁用服务关闭,只能依赖防火墙策略。操作完成后必须用netstat和外部扫描验证端口状态。不同服务器角色需要差异化处理,文件服务器和域控不能盲目关闭445和135端口。通过服务层、注册表层、防火墙层三重控制,可以最大限度降低系统共享端口带来的安全风险。
