
Блок сообщений сервера (SMB) сетевой протокол, используемый для совместного использования и доступа к папкам, файлам, принтерам и другим устройствам по сети (TCP-порт 445). В этой статье мы рассмотрим, какие версии (диалекты) SMB доступны в разных версиях Windows (и как они связаны с samba версии в Linux); как проверить версию SMB, используемую на вашем компьютере; как включить или отключить диалекты SMBv1, SMBv2 и SMBv3.
Версии протокола SMB в Windows
Существует несколько версий протокола SMB (диалектов), которые постоянно появляются в новых версиях Windows (и samba):
- CIFS — Windows NT 4.0
- SMB 1.0 — Windows 2000
- SMB 2.0 — Windows Server 2008 и Windows Vista SP1 (поддерживается в Samba 3.6)
- SMB 2.1 — Windows Server 2008 R2 и Windows 7 (Samba 4.0)
- SMB 3.0 — Windows Server 2012 и Windows 8 (Samba 4.2)
- SMB 3.02 — Windows Server 2012 R2 и Windows 8.1 (не поддерживается в Samba)
- SMB 3.1.1 — Windows Server 2016 и Windows 10 (не поддерживается в Samba)
При сетевом взаимодействии по протоколу SMB клиент и сервер используют максимальную версию протокола SMB, поддерживаемую клиентом и сервером.
Сводная таблица совместимости версий SMB выглядит следующим образом. С помощью этой таблицы можно определить версию протокола SMB, которая выбирается при взаимодействии разных версий Windows:
Операционная система | Windows 10, Win Server 2016 | Windows 8.1, Win Server 2012 R2 | Windows 8, Server 2012 | Windows 7, Server 2008 R2 | Windows Vista, Server 2008 | Windows XP, Server 2003 и более ранние версии |
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, Server 2012 R2 | SMB 3.02 | SMB 3.02 | SMB 3.0 | SMB 2.1 | SMB 2.0 | SMB 1.0 |
Windows 8, Server 2012 | SMB 3.0 | SMB 3.0 | SMB 3.0 | SMB 2.1 | SMB 2.0 | SMB 1.0 |
Windows 7, Server 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 и более ранние версии | SMB 1.0 | SMB 1.0 | SMB 1.0 | SMB 1.0 | SMB 1.0 | SMB 1.0 |
Например, если клиентский компьютер под управлением Windows 8.1 подключается к файловому серверу с Windows Server 2016, будет использоваться протокол SMB 3.0.2.
Согласно таблице, Windows XP и Windows Server 2003 могут использовать только SMB 1.0 для доступа к общим папкам и файлам. В новых версиях Windows Server (2012 R2/2016) протокол SMBv1 отключен. Поэтому, если в вашей сети все еще используются устройства с Windows XP и Windows Server 2003, они не смогут получить доступ к общим папкам на файловом сервере под управлением Windows Server 2016.
Если в качестве контроллера домена используется Windows Server 2019/2016 с отключенным SMB v1.0, клиенты Windows XP/Server 2003 не смогут получить доступ к папкам SYSVOL и NETLOGON на контроллерах домена и аутентифицироваться в AD.
При попытке подключения к общей папке на файловом сервере с отключенным SMBv1 вы можете получить следующую ошибку:
The specified network name is no longer available
Как проверить версию SMB в Windows?
Давайте рассмотрим, как узнать, какие версии SMB включены на вашем устройстве Windows.
В Windows 10/8.1 и Windows Server 2019/2016/2012R2 можно проверить состояние различных диалектов протокола SMB с помощью PowerShell:
Get-SmbServerConfiguration | select EnableSMB1Protocol,EnableSMB2Protocol
Эта команда возвращает, что протокол SMB1 отключен (EnableSMB1Protocol = True
), а протоколы SMB2 и SMB3 включены (EnableSMB1Protocol = False
).
В Windows 7, Vista и Windows Server 2008 R2/2008:
Get-Item HKLM:\SYSTEM\CurrentControlSet\Services\LanmanServer\Parameters | ForEach-Object {Get-ItemProperty $_.pspath}
Если нет параметров с именем SMB1
или SMB2
в этом ключе реестра, то протоколы SMBv1 и SMBv2 будут включены по умолчанию.
Также в этих версиях Windows можно проверить, какие диалекты SMB-клиента разрешены для подключения к удаленным узлам:
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
В обоих случаях запущены службы (STATE = 4 Running
). Это означает, что текущее устройство Windows может подключаться как к хостам SMBv1, так и к хостам SMBv2.
Проверка используемых диалектов SMB с помощью Get-SMBConnection
При взаимодействии по SMB компьютеры используют максимальную версию SMB, поддерживаемую клиентом и сервером. На сайте Get-SMBConnection
Команда PowerShell может использоваться для проверки версии SMB, используемой для доступа к удаленному компьютеру:
Версия SMB, используемая для подключения к удаленному серверу (ServerName) перечислены в Диалект рубрика.
Можно отобразить информацию о версиях SMB, используемых для доступа к определенному серверу:
Get-SmbConnection -ServerName srvfs01
Если вы хотите отобразить, используется ли шифрование SMB (представлено в SMB 3.0):
Get-SmbConnection | ft ServerName,ShareName,Dialect,Encrypted,UserName
$ sudo smbstatus
На стороне сервера Windows SMB можно отобразить список версий протоколов SMB, которые в настоящее время используют клиенты. Выполните команду:
Get-SmbSession | Select-Object -ExpandProperty Dialect | Sort-Object -Unique
В этом примере к серверу подключено 898 клиентов, использующих SMB 2.1 (Windows 7/ Windows 2008 R2), и 8 клиентов SMB 3.02.
Вы можете использовать PowerShell для включения аудита версий SMB, используемых для подключения:
Set-SmbServerConfiguration –AuditSmb1Access $true
Затем события SMB-соединения можно экспортировать из журналов Event Viewer:
Get-WinEvent -LogName Microsoft-Windows-SMBServer/Audit
Прекратите использовать небезопасный протокол SMBv1
В течение последних нескольких лет Microsoft систематически отключает устаревший протокол SMB 1.0 во всех продуктах по соображениям безопасности. Это связано с большим количеством критических уязвимостей в этом протоколе (вспомните инциденты с wannacrypt и petya ransomware, которые использовали уязвимость в протоколе SMBv1). Microsoft и другие ИТ-компании настоятельно рекомендуют отказаться от использования SMBv1 в своей сети.
Однако отключение SMBv1 может вызвать проблемы с доступом к общим файлам и папкам на новых версиях Windows 10 (Windows Server 2016/2019) со старых клиентов (Windows XP, Windows Server 2003), сторонних ОС (Mac OSX 10.8 Mountain Lion, Snow Leopard, Mavericks, старые дистрибутивы Linux), старых NAS-устройств.
Если в вашей сети не осталось устаревших устройств, поддерживающих только SMBv1, обязательно отключите этот SMB-диалект в Windows.
Если у вас есть клиенты под управлением Windows XP, Windows Server 2003 или других устройств, которые поддерживают только SMBv1, их следует обновить или изолировать.
Как включить и отключить SMBv1, SMBv2 и SMBv3 в Windows?
Давайте рассмотрим способы включения и отключения различных версий SMB в Windows. Мы рассмотрим управление SMB-клиентом и сервером (это разные компоненты Windows).
Windows 10, 8.1 и Windows Server 2019/2016/2012R2:
Отключите клиент и сервер SMBv1:
Disable-WindowsOptionalFeature -Online -FeatureName smb1protocol
Отключить только сервер SMBv1:
Set-SmbServerConfiguration -EnableSMB1Protocol $false
Включить SMBv1 клиент и сервер:
Enable-WindowsOptionalFeature -Online -FeatureName smb1protocol
Включить только сервер SMBv1:
Set-SmbServerConfiguration -EnableSMB1Protocol $true
Отключите серверы SMBv2 и SMBv3:
Set-SmbServerConfiguration -EnableSMB2Protocol $false
Включить SMBv2 и SMBv3 сервер:
Set-SmbServerConfiguration -EnableSMB2Protocol $true
Windows 7, Vista и Windows Server 2008 R2/2008:
Отключите сервер SMBv1:
Set-ItemProperty -Path "HKLM:\SYSTEM\CurrentControlSet\Services\LanmanServer\Parameters" SMB1 -Type DWORD -Value 0 –Force
Включить сервер SMBv1:
Set-ItemProperty -Path "HKLM:\SYSTEM\CurrentControlSet\Services\LanmanServer\Parameters" SMB1 -Type DWORD -Value 1 –Force
Отключить SMBv1-клиент:
sc.exe config lanmanworkstation depend= bowser/mrxsmb20/nsi
sc.exe config mrxsmb10 start= disabled
Включить SMBv1-клиент:
sc.exe config lanmanworkstation depend= bowser/mrxsmb10/mrxsmb20/nsi
sc.exe config mrxsmb10 start= auto
Отключить сервер SMBv2:
Set-ItemProperty -Path "HKLM:\SYSTEM\CurrentControlSet\Services\LanmanServer\Parameters" SMB2 -Type DWORD -Value 0 -Force
Включить SMBv2-сервер:
Set-ItemProperty -Path "HKLM:\SYSTEM\CurrentControlSet\Services\LanmanServer\Parameters" SMB2 -Type DWORD -Value 1 –Force
Отключить SMBv2-клиент:
sc.exe config lanmanworkstation depend= bowser/mrxsmb10/nsi
sc.exe config mrxsmb20 start= disabled
Включить SMBv2-клиент:
sc.exe config lanmanworkstation depend= bowser/mrxsmb10/mrxsmb20/nsi
sc.exe config mrxsmb20 start= auto
Вы можете отключить сервер SMBv1 на компьютерах, подключенных к домену, установив следующий параметр реестра через GPO:
- Ключ: HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\LanmanServer\Parameters
- Имя: SMB1
- Тип: REG_DWORD
- Значение: 0
Установите параметр реестра SMB2=0
, чтобы отключить сервер SMBv2.
Чтобы отключить клиента SMBv1, необходимо распространить следующий параметр реестра:
- Ключ: HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\mrxsmb10
- Имя: Start
- Тип: REG_DWORD
- Значение: 4