SMB(Server Message Block)是一种用于文件共享、打印服务以及其他资源访问的网络协议。
它最初由IBM贝瑞·费根鲍姆(Barry Feigenbaum)研制的,其目的是将DOS操作系统中的本地文件接口“中断13”改造为网络文件系统。后来被微软采用和推广。
SMB协议允许在局域网(LAN)或广域网(WAN)上共享文件、打印机和其他资源。
SMB协议最初由IBM开发,并在1980年代中期作为Microsoft的LAN Manager产品的一部分被引入。随着时间的推移,SMB经历了多个版本的发展和改进。
早期的版本包括SMBv1(也称为CIFS,Common Internet File System),SMBv2,SMBv3等。现在最新的主要版本是SMBv3.1.1。
虽然现在SMB也已经发展了多个高级版本,但是SMBv1仍然还在被大量使用。特别时Windows 7、Windows 8、Windows 2008、Windows 2012等比较主流的旧版本操作系统。
文件共享
SMB允许网络上的客户端访问和修改远程服务器上的文件和目录。目前100%的企业都会将文件共享,并且默认选用SMB协议实现。很多企业也在尝试使用FTP、SFTP、HTTPS等方式来取代,但是仍然还无法撼动SMB在文件共享中的地位。
打印服务
除了文件共享外,SMB还支持网络打印机的共享和管理。这是SMB诞生的基本作用之一。但是鉴于互联网微信、WPS等软件的普及和用于文件传输,更多的文件打印机已经改为基于IPP等协议来传输打印数据。
高兼容性
SMB设计为跨平台的协议,支持多种操作系统,包括Windows、Linux、macOS和其他Unix-like系统。不过非Windows系统,需要开源的SMB软件支持,比如samba。
安全
SMBv2及以后的版本引入了更强大的安全特性,如签名和加密,以提高数据传输的安全性。包括最新的SMB over quic,也改变使用传统的445端口来通信,而采用更安全的443来进行通信。
性能优化
随着版本的升级,SMB协议不断优化,提高了文件传输的效率和可靠性,例如通过引入多通道、大文件支持和压缩等功能。举个简单的例子,从支持Windows SMB共享的服务器下载大容量的文件,最高速率可以达到80MB/s,通过修改SMB相关limit参数,还可以再提高传输速率。
SMB(Server Message Block)有多个历史版本,每个版本都引入了不同的特性和改进。
SMBv1
这是最早的SMB版本,具有基本的文件和打印服务功能,它包含了基本的文件访问、目录浏览和打印功能。
但安全性较低且性能有限。目前SMBv1存在非常严重的漏洞和弱点,安全性很低,强烈建议关闭SMBv1协议的使用。具体方法可以参考:网络安全管理-检查和关闭勒索病毒传播的通讯协议
Disable SMBv1 according to the vendor instructions in Microsoft KB2696547. Additionally, block SMB directly by blocking TCP port 445 on all network boundary devices. For SMB over the NetBIOS API, block TCP ports 137 / 139 and UDP ports 137 / 138 on all network boundary devices.
根据微软官网公布的资讯,SMBv1 在 Windows 10 和 Windows Server 2019 及更高版本中不再默认安装,并且支持自动删除和手动删除等:
SMBv2
在Windows Vista和Windows Server 2008中引入,增加了许多新特性,如:大文件支持、多信用量、增强错误处理和性能改进。
具体表现在:
SMBv3
SMB3是SMB协议的最新版本,它在SMB2的基础上进一步提升了性能和安全性,并引入了一些新特性。
具体是在Windows 8和Windows Server 2012中引入,增加了:AES-128加密、连续可用性快照、多通道和 Scale-Out 文件服务器支持。
在Windows 10和Windows Server 2016中引入了SMBv3.1.1版本,增加了对AES-128-GCM和AES-256-GCM加密的支持,以及对预读取和写入缓存的改进。
在Windows系统中,SMB是默认的文件共享协议,SMB的各个版本可以同时共存。
但在非Windows系统中,如Linux和macOS,因为默认没有SMB协议,需要通过诸如Samba这样的开源软件实现SMB协议的兼容。比较典型的是Ubuntu通过samba协议实现的文件共享,与Windows文件共享相似性非常高。
由于SMBv1存在已知的非常严重的安全问题,微软官方和安全服务商都强烈建议禁用SMBv1并使用更高版本(如SMBv2或SMBv3)以提高共享网络的安全性。此外,现代SMB版本提供了加密选项,可以进一步保护数据在传输过程中的安全。
Server可以通过power shell禁用SMBv1
Set-SmbServerConfiguration -EnableSMB1Protocol $false
如果需要启用,则执行:
Set-SmbServerConfiguration -EnableSMB1Protocol $true
客户端禁用SMBv1可以通过cmd指令实现:
sc.exe config lanmanworkstation depend= bowser/mrxsmb20/nsi
sc.exe config mrxsmb10 start= disabled
如果需要启用,在客户端用Windows cmd指令启用:
sc.exe config lanmanworkstation depend= bowser/mrxsmb10/mrxsmb20/nsi
sc.exe config mrxsmb10 start= auto
SMB over QUIC 的设计主要为远程办公、移动设备用户和高安全性组织提供“SMB VPN”。 服务器证书通过在Internet 的 UDP 端口 443 而不是传统的 TCP 端口 445 创建 TLS 1.3 加密的隧道。 这样,加密隧道内所有 SMB 流量(包括隧道内的身份验证和授权)都不会在底层网络暴露。
在运行 Windows Server 2022 数据中心:Azure 版及以后的版本,均会支持SMB over QUIC。但是客户端需要至少是Windows 11的操作系统。
默认情况下,文件服务器管理员必须主动选择启用 SMB over QUIC。并且客户端无法通过建立连接的方式强制文件服务器启用 SMB over QUIC。
而且默认情况下,Windows 客户端不会default通过SMB over QUIC的方式来请求文件服务器,只有通过如下指令指定:
CMD指令:
NET USE /TRANSPORT:QUIC
Power Shell指令:
New-SmbMapping -TransportType QUIC
总的来说,SMB协议是一个关键的网络基础设施组件,它使得不同设备和操作系统之间的文件和打印资源共享变得简单和高效。随着技术的发展,SMB协议也在持续演进,以满足更高的性能、安全性和互操作性需求。