Протокол SMB: определить, включить или отключить определенную версию SMB в Windows

Клиент-серверный сетевой протокол SMB (Server Message Block) используется в сетях Windows для предоставления общего удаленного доступа к файлам (общие сетевые папки), принтерам, другим сетевым ресурсам и межпроцессорного взаимодействия. Для коммуникации между клиентом и сервером SMB используется порт TCP 445. В этой статье мы рассмотрим какие версии протокола SMB доступны в различных версиях Windows (и как они соотносятся с версиями samba в Linux); как определить версию SMB на вашем компьютере; и как включить/отключить протокол SMBv1, SMBv2 и SMBv3 на Windows компьютере (клиенте или сервере).

Версии протокола SMB в Windows

Есть несколько версии протокола SMB (диалектов), которые появлялись в новых версиях Windows:

Для реализации протокола SMB в Linux/Unix системах используется пакет samba. В скобках мы указали в каких версиях samba поддерживается каждый диалект SMB.
  • 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 4.3 и на данный момент используется по-умолчанию)
  • SMB 3.1.1 (*) – эта версия SMB в Windows 11 и Windows Server 2022 получила поддержку SMB over QUIC, сжатие файлового трафика SMB, шифрование с поддержкой AES-256-GCM и AES-256-CCM. Также, начиная с Windows 11 24H2 включено обязательное подписывание SMB пакетов.

SMB это клиент-серверный протокол, в котором SMB сервер предоставляет общий ресурс, а SMB клиент получает к нему доступ.

На компьютерах с дестопными версиями ОС (таких как Windows 10 или 11), использующихся в качестве SMB сервера, максимальное количество одновременных подключений по SMB ограничено 20.

При сетевом взаимодействии по протоколу SMB между клиентом и сервером используется максимальная версия протокола, поддерживаемая одновременно и клиентом, и сервером.

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

Операционная системаWin 10/11, Server 2016/2019/2022/2025Windows 8.1,
Server 2012 R2
Windows 8,
Server 2012
Windows 7,
Server 2008 R2
Windows Vista,
Server 2008
Windows XP, Server 2003 и ниже
Windows 10 и 11, Windows Server 2016/2019/2022/2025SMB 3.1.1SMB 3.02SMB 3.0SMB 2.1SMB 2.0SMB 1.0
Windows 8.1 ,
Server 2012 R2
SMB 3.02SMB 3.02SMB 3.0SMB 2.1SMB 2.0SMB 1.0
Windows 8 ,
Server 2012
SMB 3.0SMB 3.0SMB 3.0SMB 2.1SMB 2.0SMB 1.0
Windows 7,
Server 2008 R2
SMB 2.1SMB 2.1SMB 2.1SMB 2.1SMB 2.0SMB 1.0
Windows Vista,
Server 2008
SMB 2.0SMB 2.0SMB 2.0SMB 2.0SMB 2.0SMB 1.0
Windows XP, 2003 и нижеSMB 1.0SMB 1.0SMB 1.0SMB 1.0SMB 1.0SMB 1.0

Например, если клиентский компьютер с Windows 8.1 подключается к файловому серверу с Windows Server 2016, то для коммуникации будет использоваться протокол SMB 3.0.2.

Согласно этой таблице, Windows XP и Windows Server 2003 для доступа к общим файлам и папкам на сервере могут использовать только SMB 1.0 (эта версия протокола по-умолчанию отключена в современных версиях Windows). Таким образом, если в вашей инфраструктуре остались компьютеры с Windows XP (снятой с поддержки) или Windows Server 2003/R2, то с этих хостов не получиться получить доступ к общим папкам на машинах с более новыми версиями Windows.

Так, например, если Windows Server 2012R2+ используется в качестве контроллера домена, то устаревшие клиенты с Windows XP/Server 2003 не смогут получить доступ к каталогам SYSVOL и NETLOGON на контроллерах домена и авторизоваться в AD.

На старых клиентах при попытке подключиться к ресурсу на файловом сервере с отключенным SMB v1 появляется ошибка:

The specified network name is no longer available

Как проверить поддерживаемые версии SMB в Windows?

Чтобы определить какие версии протокола SMB доступны на вашем компьютере, выполните PowerShell команду:

Get-SmbServerConfiguration | select EnableSMB1Protocol,EnableSMB2Protocol

Get-SmbServerConfiguration | select EnableSMB1Protocol,EnableSMB2Protocol

Данная команда вернула, что протокол SMB1 отключен ( EnableSMB1Protocol=False ), а протоколы SMB2 и SMB3 включены ( EnableSMB1Protocol=False ).

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

Функционал SMB клиента реализуется службой LanmanWorkstation, а SMB-сервера – LanmanServer. Проверьте, что эти службы запущены:

Get-Service LanmanServer,LanmanWorkstation

Службы lanmanserver и lanworsktation в Windows

В старых версиях Windows (Windows 7, Vista, Windows Server 2008 R2/2008) проверить включенные SMB протоколы можно через реестр:

Get-Item HKLM:\SYSTEM\CurrentControlSet\Services\LanmanServer\Parameters | ForEach-Object {Get-ItemProperty $_.pspath}

Если в данной ветке реестра нет параметров с именами SMB1 или SMB2, значить оба этих протокола включены (по умолчанию для этих версий Windows).

проверить какие версии smb включены в windows

В старых версиях версиях 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, с помощью которых клиенты подключаются к SMB серверу с помощью PowerShell командлета:

Get-SMBConnection :

Get-SMBConnection вывести в powershell версии smb, исопльзуемые для подключения

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

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

Get-SmbConnection -ServerName servername

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

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

В Linux вывести список SMB подключения и используемые диалекты в samba можно командой:

$ sudo smbstatus

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

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

Get-SmbSession Получить количество клиентов, использующих разные версии SMB

В нашем примере имеется 825 клиентов, подключенных к серверу с помощью SMB 2.1 (Windows 7/Windows Server 2008 R2) и 12 клиентов SMB 3.02.

С помощью PowerShell можно включить аудит версий SMB, используемых для подключения:

Set-SmbServerConfiguration –AuditSmb1Access $true

События подключения затем можно извлечь из журналов Event Viewer с помощью PowerShell:

Get-WinEvent -LogName Microsoft-Windows-SMBServer/Audit

Почему SMBv1 отключен в новых версиях Windows?

Версия протокола SMB 1.0 отключена по-умолчанию в современных версиях Windows из-за серьёзных проблем с безопасностью и критических уязвимостей (вспомните историю с эпидемиями вирусов-шифровальщиков wannacrypt и petya, которые использовали уязвимость именно в протоколе SMBv1). Устаревший SMB1 замен более новыми и безопасными версиями SMB2 и SMB3.

Начиная с Windows 10 1809 клиентская и серверная службы SMB1 отключены при чистой установке ОС.

Проверить, что SMB 1.0 отключен можно с помощью команды:

Get-WindowsOptionalFeature -Online -FeatureName SMB1Protocol

Протокол SMB1Protocol отключен в Windows

Несмотря, на то, что в Windows все еще можно принудительно включить устаревший протокол SMB 1.0, делать это не рекомендуется по соображениям безопасности. Отключенный SMB 1 может вызывать проблемы с доступом из Windows к общим папкам на устаревших системах (старые версии NAS, сетевые принтеры, устройства с Windows XP/Server 2003, старые версии Linux и т.д.), которые не поддерживают более новые версии протокола.

Если в вашей сети не осталось legacy устройств с поддержкой только SMBv1, обязательно отключайте эту версию диалекта в Windows.

Включение и отключение SMBv1, SMBv2 и SMBv3 в Windows

Рассмотрим способы включения, отключения различных версий SMB в Windows. Мы рассматриваем отдельно включение клиента и сервера SMB (это разные компоненты).

Windows 11, 10, 8.1, Windows Server 2025/2022/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

Встроенный компонент SMB1ProtocolDeprecation автоматически отключает SMB1 в Windows, если он не используется более 15 дней.

Включить только SMBv1 сервер:
Set-SmbServerConfiguration -EnableSMB1Protocol $true

Отключить сервер SMBv2 и SMBv3:
Set-SmbServerConfiguration -EnableSMB2Protocol $false

Включить сервер SMBv2 и SMBv3:
Set-SmbServerConfiguration -EnableSMB2Protocol $true

Set-SmbServerConfiguration - powershell отключить SMBv2 и SMBv3

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 сервер в windows 7 через powershell

Включить 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

В случае с Windows Server 20212 чтобы включить SMB1 нужно дополнительно в реестре HKLM\SYSTEM\CurrentControlSet\Services\LanmanServer изменить значение DependOnService c SamSS Srv2 на SamSS Srv. Если SMB1 отключается, нужно вернуть значение SamSS Srv2.

Отключить 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 на всех компьютерах независимо от версии Windows, можно через GPO распространить параметр реестра типа REG_DWORD с именем SMB1 и значением 0 (HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\LanmanServer\Parameters)

Для отключения SMBv2 нужно в этой же ветке установить параметр SMB2=0.

Для отключения SMBv1 клиента нужно распространить такой параметр реестра:

  • Key: HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\mrxsmb10
  • Name: Start
  • Type: REG_DWORD
  • Value: 4

При отключении SMB 1.0/CIFS File Sharing Support в Windows вы можете столкнуться с ошибкой “0x80070035, не найден сетевой путь”, ошибкой при доступе к общим папкам, и проблемами обнаружения компьютеров в сетевом окружении. В этом случае вместо служба обозревателя компьютеров (Computer Browser) нужно использовать службы обнаружения (линк).

Как определить версии SMB на устройствах в сети?

Для поиска в сети устройств, на которых включен небезопасный протокол SMBv1 можно выполнить сканирование сети с помощью nmap. Следущая команда просканирует указанную IP подсеть и выведет версии SMB на устройствах:

nmap -p445 --script smb-protocols 192.168.22.0/24 -Pn
nmap определение версий smb на хосте

На компьютерах должен быть включен общий доступ к файлам и папкам, а порт TCP 445 открыт в файерволе.

Для доменной среды Active Directory можно использовать следующий PowerShell скрипт, который выведет информацию о версиях SMB включенных на компьютерах:

$serverList = Get-ADComputer -Filter {(OperatingSystem -like "Windows Server*") -and (Enabled -eq $true)} | Select-Object -ExpandProperty Name
$results = @()
foreach ($server in $serverList) {
$serverStatus = Test-Connection -ComputerName $server -Count 1 -Quiet
if ($serverStatus) {
$smbStatus = Invoke-Command -ComputerName $server -ScriptBlock {
Get-SmbServerConfiguration | Select-Object EnableSMB1Protocol, EnableSMB2Protocol
}
$results += [PSCustomObject]@{
ServerName = $server
IsOnline = $true
SMBv1Enabled = $smbStatus.EnableSMB1Protocol
SMBv2Enabled = $smbStatus.EnableSMB2Protocol
}
}
else {
# Если сервер недоступен
$results += [PSCustomObject]@{
ServerName = $server
IsOnline = $false
SMBv1Enabled = $null
SMBv2Enabled = $null
}
}
}
$results | Format-Table -AutoSize
# Сохранение результатов в CSV-файл
$results | Export-Csv -Path "C:\SMB_Status.csv" -NoTypeInformation

powershell скрипт проверить включенные версии SMB

В данном примере с помощью фильтров Get-ADComputer мы просканировали только хосты с Windows Server.

Предыдущая статья Следующая статья


Комментариев: 13 Оставить комментарий

Оставить комментарий

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

Я не робот( Обязательно отметьте)