Как проверить, включить или отключить версии протокола SMB в Windows?

Блок сообщений сервера (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)
Samba используется для реализации протокола SMB в Linux/Unix. Samba 4.14 и более новые версии по умолчанию используют SMB 2.1.

При сетевом взаимодействии по протоколу 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

Как проверить, какая версия SMB включена в Windows с помощью PowerShell

Эта команда возвращает, что протокол SMB1 отключен (EnableSMB1Protocol = True), а протоколы SMB2 и SMB3 включены (EnableSMB1Protocol = False).

Обратите внимание, что протоколы SMBv3 и SMBv2 тесно связаны между собой. Вы не можете отключить или включить SMBv3 или SMBv2 по отдельности. Они всегда включаются/выключаются только вместе, поскольку используют один и тот же стек.

В 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 будут включены по умолчанию.

Проверка версии smb в Windows 7 SP1

Также в этих версиях 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 с помощью команды Get-SmbConnection

Версия SMB, используемая для подключения к удаленному серверу (ServerName) перечислены в Диалект рубрика.

Можно отобразить информацию о версиях SMB, используемых для доступа к определенному серверу:

Get-SmbConnection -ServerName srvfs01

Если вы хотите отобразить, используется ли шифрование SMB (представлено в SMB 3.0):

Get-SmbConnection | ft ServerName,ShareName,Dialect,Encrypted,UserName

В Linux вы можете отобразить список SMB-соединений и используемых диалектов в samba с помощью команды:$ sudo smbstatus

На стороне сервера Windows SMB можно отобразить список версий протоколов SMB, которые в настоящее время используют клиенты. Выполните команду:

Get-SmbSession | Select-Object -ExpandProperty Dialect | Sort-Object -Unique

Get-SmbSession used Dialect versionsВ этом примере к серверу подключено 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

Подробнее о протоколе SMBv1 в Windows 10 и Windows Server 2016/2019.

Отключите серверы SMBv2 и SMBv3:

Set-SmbServerConfiguration -EnableSMB2Protocol $false

Включить SMBv2 и SMBv3 сервер:

Set-SmbServerConfiguration -EnableSMB2Protocol $true

Отключите smb2 с помощью команды set-smbserverconfiguration

Windows 7, Vista и Windows Server 2008 R2/2008:

Отключите сервер SMBv1:

Set-ItemProperty -Path "HKLM:\SYSTEM\CurrentControlSet\Services\LanmanServer\Parameters" SMB1 -Type DWORD -Value 0 –Force

Как отключить SMB 1 в Windows 7 через реестр?

Включить сервер 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
При отключении поддержки общего доступа к файлам SMB 1.0/CIFS в Windows вы можете столкнуться с ошибкой 0x80070035 network path not found, получить ошибку при доступе к общим папкам SMB, а также проблемы с обнаружением сети. В этом случае необходимо использовать службу Discovery Service вместо службы Computer Browser.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *