La Bloque de mensajes del servidor (SMB) El protocolo de red se utiliza para compartir y acceder a carpetas, archivos, impresoras y otros dispositivos a través de la red (puerto TCP 445). En este artículo, veremos qué versiones (dialectos) de SMB están disponibles en diferentes versiones de Windows (y cómo se relacionan con samba versiones en Linux); cómo verificar la versión SMB en uso en su computadora; y cómo habilitar o deshabilitar los dialectos SMBv1, SMBv2 y SMBv3.
Versiones del protocolo SMB en Windows
Hay varias versiones del protocolo SMB (dialectos) que han aparecido constantemente en las nuevas versiones de Windows (y samba):
- CIFS – Windows NT 4.0
- SMB 1.0 – Windows 2000
- SMB 2.0 – Windows Server 2008 y Windows Vista SP1 (compatible con Samba 3.6)
- SMB 2.1 – Windows Server 2008 R2 y Windows 7 (Samba 4.0)
- SMB 3.0 – Windows Server 2012 y Windows 8 (Samba 4.2)
- SMB 3.02 – Windows Server 2012 R2 y Windows 8.1 (no compatible con Samba)
- SMB 3.1.1 – Windows Server 2016 y Windows 10 (no compatible con Samba)
Samba se utiliza para implementar el protocolo SMB en Linux / Unix. Samba 4.14 y versiones posteriores usan SMB 2.1 de forma predeterminada.
En la comunicación de red SMB, el cliente y el servidor utilizan la versión máxima del protocolo SMB admitida tanto por el cliente como por el servidor.
La tabla de resumen de compatibilidad de versiones SMB se ve así. Con esta tabla, puede determinar la versión del protocolo SMB que se selecciona cuando interactúan diferentes versiones de Windows:
| Sistema operativo | Windows 10, servidor de Windows 2016 | Windows 8.1, servidor Win 2012 R2 | Windows 8, servidor 2012 | Windows 7, servidor 2008 R2 | Windows Vista, Server 2008 | Windows XP, Server 2003 y versiones anteriores |
| Windows 10, Windows Server 2016 | SMB 3.1.1 | SMB 3.02 | SMB 3.0 | SMB 2.1 | SMB 2.0 | SMB 1.0 |
| Windows 8.1, servidor 2012 R2 | SMB 3.02 | SMB 3.02 | SMB 3.0 | SMB 2.1 | SMB 2.0 | SMB 1.0 |
| Windows 8, servidor 2012 | SMB 3.0 | SMB 3.0 | SMB 3.0 | SMB 2.1 | SMB 2.0 | SMB 1.0 |
| Windows 7, servidor 2008 R2 | SMB 2.1 | SMB 2.1 | SMB 2.1 | SMB 2.1 | SMB 2.0 | SMB 1.0 |
| Windows Vista, Server 2008 | SMB 2.0 | SMB 2.0 | SMB 2.0 | SMB 2.0 | SMB 2.0 | SMB 1.0 |
| Windows XP, 2003 y anteriores | SMB 1.0 | SMB 1.0 | SMB 1.0 | SMB 1.0 | SMB 1.0 | SMB 1.0 |
Por ejemplo, si una computadora cliente que ejecuta Windows 8.1 se conecta a un servidor de archivos con Windows Server 2016, se utilizará el protocolo SMB 3.0.2.
Según la tabla, Windows XP y Windows Server 2003 ( ya no es compatible ) solo puede usar SMB 1.0 para acceder a carpetas y archivos compartidos. SMBv1 está deshabilitado en las versiones más recientes de Windows Server (2012 R2 / 2016). Por lo tanto, si todavía usa dispositivos con Windows XP y Windows Server 2003 en su red, no podrán acceder a las carpetas compartidas en el servidor de archivos que ejecuta Windows Server 2016.
Si se usa Windows Server 2019/2016 con SMB v1.0 deshabilitado como controlador de dominio, los clientes de Windows XP / Server 2003 no podrán acceder a las carpetas SYSVOL y NETLOGON en los controladores de dominio y autenticarse con AD.
Puede recibir el siguiente error al intentar conectarse a una carpeta compartida en un servidor de archivos con SMBv1 deshabilitado:
The specified network name is no longer available
¿Cómo verificar la versión SMB en Windows?
Veamos cómo averiguar qué versiones de SMB están habilitadas en su dispositivo Windows.
En Windows 10 / 8.1 y Windows Server 2019/2016 / 2012R2, puede verificar el estado de varios dialectos del protocolo SMB usando PowerShell:
Get-SmbServerConfiguration | select EnableSMB1Protocol,EnableSMB2Protocol
Este comando devolvió que el protocolo SMB1 está deshabilitado (EnableSMB1Protocol = True) y los protocolos SMB2 y SMB3 están habilitados (EnableSMB1Protocol = False).
Tenga en cuenta que los protocolos SMBv3 y SMBv2 están estrechamente relacionados. No puede deshabilitar o habilitar SMBv3 o SMBv2 por separado. Siempre están habilitados / deshabilitados solo juntos porque comparten la misma pila.
En Windows 7, Vista y Windows Server 2008 R2 / 2008:
Get-Item HKLM:SYSTEMCurrentControlSetServicesLanmanServerParameters | ForEach-Object {Get-ItemProperty $_.pspath}
Si no hay parámetros nombrados SMB1 o SMB2 en esta clave de registro, los protocolos SMBv1 y SMBv2 están habilitados de forma predeterminada.
También en estas versiones de Windows, puede verificar qué dialectos de cliente SMB pueden conectarse a hosts remotos:
sc.exe query mrxsmb10
SERVICE_NAME: mrxsmb10 TYPE : 2 FILE_SYSTEM_DRIVER STATE : 4 RUNNING (STOPPABLE, NOT_PAUSABLE, IGNORES_SHUTDOWN) WIN32_EXIT_CODE : 0 (0x0) SERVICE_EXIT_CODE : 0 (0x0) CHECKPOINT : 0x0 WAIT_HINT : 0x0
sc.exe query mrxsmb20
SERVICE_NAME: mrxsmb20 TYPE : 2 FILE_SYSTEM_DRIVER STATE : 4 RUNNING (STOPPABLE, NOT_PAUSABLE, IGNORES_SHUTDOWN) WIN32_EXIT_CODE : 0 (0x0) SERVICE_EXIT_CODE : 0 (0x0) CHECKPOINT : 0x0 WAIT_HINT : 0x0
En ambos casos, los servicios se están ejecutando (STATE = 4 Running). Esto significa que el dispositivo Windows actual puede conectarse a hosts SMBv1 y SMBv2.
Comprobación de dialectos SMB usados con Get-SMBConnection
Al comunicarse a través de SMB, las computadoras utilizan la versión máxima de SMB admitida tanto por el cliente como por el servidor. La Get-SMBConnection El cmdlet de PowerShell se puede usar para verificar la versión SMB usada para acceder a una computadora remota:

La versión SMB utilizada para conectarse al servidor remoto (Nombre del servidor) aparece en el Dialecto columna.
Puede mostrar información sobre las versiones SMB utilizadas para acceder a un servidor específico:
Get-SmbConnection -ServerName srvfs01
Si desea mostrar si el cifrado SMB está en uso (introducido en SMB 3.0):
Get-SmbConnection | ft ServerName,ShareName,Dialect,Encrypted,UserName
$ sudo smbstatus
En el lado del servidor SMB de Windows, puede mostrar una lista de las versiones de los protocolos SMB que los clientes están usando actualmente. Ejecute el comando:
Get-SmbSession | Select-Object -ExpandProperty Dialect | Sort-Object -Unique
En este ejemplo, hay 898 clientes conectados al servidor mediante SMB 2.1 (Windows 7 / Windows 2008 R2) y 8 clientes SMB 3.02.
Puede usar PowerShell para habilitar la auditoría de las versiones SMB utilizadas para la conexión:
Set-SmbServerConfiguration –AuditSmb1Access $true
Los eventos de conexión SMB se pueden exportar desde los registros del Visor de eventos:
Get-WinEvent -LogName Microsoft-Windows-SMBServer/Audit
Dejar de usar el protocolo SMBv1 inseguro
Durante los últimos años, Microsoft ha deshabilitado sistemáticamente el protocolo SMB 1.0 heredado en todos los productos por razones de seguridad. Esto se debe a la gran cantidad de vulnerabilidades críticas en este protocolo (recuerde los incidentes con wannacrypt y petya ransomware, que explotaban una vulnerabilidad en el protocolo SMBv1). Microsoft y otras empresas de TI recomiendan encarecidamente que deje de utilizar SMBv1 en su red.
Sin embargo, deshabilitar SMBv1 puede causar problemas para acceder a archivos y carpetas compartidos en versiones más recientes de Windows 10 (Windows Server 2016/2019) desde clientes heredados (Windows XP, Windows Server 2003), SO de terceros (Mac OSX 10.8 Mountain Lion, Snow Leopard, Mavericks, distribuciones de Linux antiguas), dispositivos NAS antiguos.
Si no quedan dispositivos heredados en su red que solo admitan SMBv1, asegúrese de deshabilitar este dialecto SMB en Windows.
Si tiene clientes que ejecutan Windows XP, Windows Server 2003 u otros dispositivos que solo admiten SMBv1, deben actualizarse o aislarse.
¿Cómo habilitar y deshabilitar SMBv1, SMBv2 y SMBv3 en Windows?
Veamos formas de habilitar y deshabilitar diferentes versiones de SMB en Windows. Cubriremos la administración de servidores y clientes SMB (son componentes de Windows diferentes).
Windows 10, 8.1 y Windows Server 2019/2016 / 2012R2:
Deshabilite el cliente y el servidor SMBv1:
Disable-WindowsOptionalFeature -Online -FeatureName smb1protocol
Desactive solo el servidor SMBv1:
Set-SmbServerConfiguration -EnableSMB1Protocol $false
Habilite el cliente y el servidor SMBv1:
Enable-WindowsOptionalFeature -Online -FeatureName smb1protocol
Habilite solo el servidor SMBv1:
Set-SmbServerConfiguration -EnableSMB1Protocol $true
Deshabilite el servidor SMBv2 y SMBv3:
Set-SmbServerConfiguration -EnableSMB2Protocol $false
Habilite el servidor SMBv2 y SMBv3:
Set-SmbServerConfiguration -EnableSMB2Protocol $true

Windows 7, Vista y Windows Server 2008 R2 / 2008:
Deshabilitar el servidor SMBv1:
Set-ItemProperty -Path "HKLM:SYSTEMCurrentControlSetServicesLanmanServerParameters" SMB1 -Type DWORD -Value 0 –Force

Habilite el servidor SMBv1:
Set-ItemProperty -Path "HKLM:SYSTEMCurrentControlSetServicesLanmanServerParameters" SMB1 -Type DWORD -Value 1 –Force
Deshabilitar el cliente SMBv1:
sc.exe config lanmanworkstation depend= bowser/mrxsmb20/nsi
sc.exe config mrxsmb10 start= disabled
Habilite el cliente SMBv1:
sc.exe config lanmanworkstation depend= bowser/mrxsmb10/mrxsmb20/nsi
sc.exe config mrxsmb10 start= auto
Deshabilitar el servidor SMBv2:
Set-ItemProperty -Path "HKLM:SYSTEMCurrentControlSetServicesLanmanServerParameters" SMB2 -Type DWORD -Value 0 -Force
Habilite el servidor SMBv2:
Set-ItemProperty -Path "HKLM:SYSTEMCurrentControlSetServicesLanmanServerParameters" SMB2 -Type DWORD -Value 1 –Force
Deshabilitar el cliente SMBv2:
sc.exe config lanmanworkstation depend= bowser/mrxsmb10/nsi
sc.exe config mrxsmb20 start= disabled
Habilite el cliente SMBv2:
sc.exe config lanmanworkstation depend= bowser/mrxsmb10/mrxsmb20/nsi
sc.exe config mrxsmb20 start= auto
Puede deshabilitar el servidor SMBv1 en equipos unidos a un dominio implementando el siguiente parámetro de registro a través del GPO:
- Clave: HKEY_LOCAL_MACHINE SYSTEM CurrentControlSet Services LanmanServer Parameters
- Nombre: SMB1
- Tipo: REG_DWORD
- Valor: 0
Establecer el parámetro de registro SMB2=0 para deshabilitar el servidor SMBv2.
Para deshabilitar el cliente SMBv1, debe propagar la siguiente configuración de registro:
- Clave: HKEY_LOCAL_MACHINE SYSTEM CurrentControlSet services mrxsmb10
- Nombre: Inicio
- Tipo: REG_DWORD
- Valor: 4





