Windows服务器上默认开启的445端口,也就是SMB服务端口,是攻击者最常利用的入口之一。从WannaCry勒索病毒大规模爆发,到各种内网横向渗透工具,几乎都围绕SMB协议做文章。关闭SMB高危端口不是简单地在防火墙里加一条规则,而是要结合服务禁用、端口封堵、组策略控制和网络层隔离,形成多层防护。
首先要明确一点:如果你的服务器不承担文件共享、打印机共享或域控制器等依赖SMB的角色,那么最彻底的做法就是直接禁用SMB服务。很多人以为在防火墙里拦截445就够了,但实际上SMB还会通过139端口和NetBIOS产生关联,而且如果服务器本身已经被植入后门,本机防火墙规则可能被篡改。所以关闭服务本身比单纯封端口更可靠。
一、确认服务器上SMB服务的运行状态在开始操作之前,先确认当前SMB服务是否在运行。打开PowerShell,以管理员身份执行以下命令:
Get-Service LanmanServer Get-Service LanmanWorkstation Get-SmbServerConfiguration | Select EnableSMB1Protocol, EnableSMB2Protocol
LanmanServer是SMB服务端的核心服务,LanmanWorkstation是客户端服务。如果服务器不需要访问其他机器的共享,这两个服务都可以禁用。如果只是不想让外部访问本机的445端口,但还需要作为客户端访问其他共享,那么可以只禁用LanmanServer。
二、彻底禁用SMB服务端对于不提供文件共享的Windows服务器,直接停止并禁用LanmanServer服务是最干净的方案。执行以下命令:
Stop-Service LanmanServer -Force Set-Service LanmanServer -StartupType Disabled
如果还需要禁用SMB客户端功能,可以继续执行:
Stop-Service LanmanWorkstation -Force Set-Service LanmanWorkstation -StartupType Disabled
禁用后,445端口会立即关闭。可以用以下命令验证:
Get-NetTCPConnection -LocalPort 445 -ErrorAction SilentlyContinue
如果没有任何输出,说明445端口已经不再监听。这个方法比单纯在防火墙里封端口要彻底得多,因为即使有人拿到了本机管理员权限,只要服务没被重新启用,端口就不会开放。
三、通过注册表强制关闭SMB有些场景下,服务器可能被组策略或第三方管理工具反复开启SMB服务。这时候可以通过注册表直接禁用SMB相关的驱动和服务项。打开注册表编辑器,定位到:
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\LanmanServer
将Start的值改为4,表示禁用。同样地,定位到:
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\LanmanWorkstation
将Start的值也改为4。修改注册表后需要重启服务器才能完全生效。这个方法适合需要批量部署或防止服务被意外启动的环境。
四、关闭NetBIOS over TCP/IP,封堵139端口SMB除了445端口,历史上还依赖139端口和NetBIOS。即使关闭了445,如果139端口还开着,攻击者仍然可以利用NetBIOS进行信息探测或尝试旧版SMB攻击。关闭NetBIOS的方法如下:
打开网络和共享中心,点击当前使用的网卡,进入属性,选择“Internet协议版本4 (TCP/IPv4)”,点击“属性”,再点击“高级”,切换到“WINS”选项卡,选择“禁用TCP/IP上的NetBIOS”。
也可以通过PowerShell批量设置所有网卡:
$adapters = Get-WmiObject Win32_NetworkAdapterConfiguration | Where-Object {$_.IPEnabled -eq $true}
foreach ($adapter in $adapters) {
$adapter.SetTcpipNetbios(2)
}
SetTcpipNetbios(2)表示禁用NetBIOS。设置完成后,139端口也会关闭。
五、防火墙层面对445端口进行双向封堵即使服务已经禁用,防火墙层面再加一道规则属于纵深防御。很多安全合规要求也明确需要在防火墙层面看到445端口被拒绝。Windows防火墙默认入站规则里可能已经有“文件和打印机共享(SMB-In)”的规则,但默认状态不一定是阻止。建议直接新建一条明确的阻止规则。
以管理员身份打开PowerShell,执行:
New-NetFirewallRule -DisplayName "Block SMB 445 Inbound" -Direction Inbound -Protocol TCP -LocalPort 445 -Action Block New-NetFirewallRule -DisplayName "Block SMB 445 Outbound" -Direction Outbound -Protocol TCP -RemotePort 445 -Action Block
同时封堵139端口:
New-NetFirewallRule -DisplayName "Block NetBIOS 139 Inbound" -Direction Inbound -Protocol TCP -LocalPort 139 -Action Block New-NetFirewallRule -DisplayName "Block NetBIOS 139 Outbound" -Direction Outbound -Protocol TCP -RemotePort 139 -Action Block
如果服务器还有UDP 137和138端口开放,也需要一并封堵。这几个端口属于NetBIOS名称服务和数据报服务,虽然现代SMB主要走445,但老旧的攻击工具仍然会扫描这些端口。
六、使用IP安全策略实现内核级端口封锁Windows防火墙的规则在系统启动早期可能存在时间窗口,而且某些恶意软件可以尝试修改防火墙规则。更底层的做法是使用IP安全策略(IPSec)直接在内核层丢弃发往445端口的流量。这个方法不依赖防火墙服务,即使防火墙服务被停止,策略依然生效。
创建IP安全策略需要用到ipseccmd或PowerShell的NetSecurity模块。以下是一个基本示例:
$policy = New-NetIPsecMainModePolicy -Name "Block SMB Policy" -DiffieHellmanGroup Group2 -EncryptionAlgorithm AES128 -IntegrityAlgorithm SHA1 New-NetIPsecRule -DisplayName "Block SMB 445" -PolicyStore ActiveStore -InboundSecurity Require -OutboundSecurity Request -RemoteAddress any -LocalAddress any -Protocol TCP -LocalPort 445 -RemotePort any -Action Block
不过IPSec策略配置相对复杂,如果只是普通Web服务器或应用服务器,服务禁用加防火墙规则已经足够。IPSec方案更适合对安全性要求极高的隔离网络环境。
七、通过组策略批量关闭域内服务器的SMB如果你管理的是一个域环境,逐台登录服务器操作效率太低。可以通过组策略统一推送SMB禁用配置。在组策略管理控制台中,创建一个新的GPO,然后编辑以下设置:
计算机配置 → Windows设置 → 安全设置 → 系统服务,找到Server服务,将其启动模式设置为“已禁用”。
同时,在计算机配置 → Windows设置 → 安全设置 → 高级安全Windows防火墙中,创建入站和出站规则阻止445和139端口。
将GPO链接到需要应用策略的OU,等待组策略刷新或手动执行gpupdate /force。这样域内所有目标服务器都会自动关闭SMB服务并封堵相关端口。
八、关闭SMBv1协议,降低历史漏洞风险即使服务器因为业务原因必须保留SMB服务,也一定要关闭SMBv1。SMBv1存在大量已知漏洞,而且现代Windows系统已经默认禁用,但部分旧系统或迁移过来的服务器可能仍然开启。检查SMBv1状态:
Get-SmbServerConfiguration | Select EnableSMB1Protocol
如果返回True,执行以下命令关闭:
Set-SmbServerConfiguration -EnableSMB1Protocol $false -Force
同时关闭SMBv1客户端:
Set-SmbClientConfiguration -EnableSMB1Protocol $false -Force
关闭SMBv1不会影响SMBv2和SMBv3的正常使用,但可以阻断大量针对旧协议的自动化攻击。
九、验证关闭效果完成上述操作后,需要从多个维度验证445端口是否真正关闭。在本机执行:
netstat -ano | findstr ":445"
如果没有输出,说明本机已经不再监听445端口。从另一台机器执行端口扫描,例如使用PowerShell的Test-NetConnection:
Test-NetConnection -ComputerName 目标服务器IP -Port 445
如果返回TcpTestSucceeded为False,说明外部已经无法访问该端口。同时检查139端口:
Test-NetConnection -ComputerName 目标服务器IP -Port 139
两个端口都不可达,才说明SMB相关的高危入口已经被彻底封堵。
十、关闭SMB后的业务影响评估关闭SMB服务前必须评估业务影响。如果服务器依赖以下功能,关闭SMB会导致功能异常:文件共享、打印机共享、部分备份软件、远程管理工具、某些数据库集群的心跳机制。对于域控制器,SMB是核心通信协议,不能直接禁用。对于普通的Web服务器、应用服务器、数据库服务器,如果不需要对外提供文件共享,关闭SMB基本没有负面影响。
另外要注意,关闭LanmanServer服务后,本机通过“计算机管理”远程连接其他Windows机器的功能也会受限,因为部分管理操作依赖SMB。如果运维团队习惯使用远程管理工具,需要提前切换到WinRM或其他管理通道。
从安全角度来看,关闭SMB端口是性价比极高的加固措施。445端口长期位列互联网扫描器探测频率最高的端口之一,关闭它能直接减少大量自动化攻击和勒索软件的入侵面。对于暴露在公网的Windows服务器,这个操作应该作为上线前的默认配置。
