Клиент-серверный сетевой протокол SMB (Server Message Block) используется в сетях Windows для предоставления общего удаленного доступа к файлам (общие сетевые папки), принтерам, другим сетевым ресурсам и межпроцессорного взаимодействия. Для коммуникации между клиентом и сервером SMB используется порт TCP 445. В этой статье мы рассмотрим какие версии протокола SMB доступны в различных версиях Windows (и как они соотносятся с версиями samba в Linux); как определить версию SMB на вашем компьютере; и как включить/отключить протокол SMBv1, SMBv2 и SMBv3 на Windows компьютере (клиенте или сервере).
Версии протокола SMB в Windows
Есть несколько версии протокола SMB (диалектов), которые появлялись в новых версиях Windows:
- 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 клиент получает к нему доступ.
При сетевом взаимодействии по протоколу SMB между клиентом и сервером используется максимальная версия протокола, поддерживаемая одновременно и клиентом, и сервером.
Ниже представлена сводная таблица, по которой можно определить версию протокола SMB, которая выбирается при взаимодействии разных версий Windows:
| Операционная система | Win 10/11, Server 2016/2019/2022/2025 | Windows 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/2025 | 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). Таким образом, если в вашей инфраструктуре остались компьютеры с 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

Данная команда вернула, что протокол SMB1 отключен ( EnableSMB1Protocol=False ), а протоколы SMB2 и SMB3 включены ( EnableSMB1Protocol=False ).
Функционал SMB клиента реализуется службой LanmanWorkstation, а SMB-сервера – LanmanServer. Проверьте, что эти службы запущены:
Get-Service LanmanServer,LanmanWorkstation

В старых версиях Windows (Windows 7, Vista, Windows Server 2008 R2/2008) проверить включенные SMB протоколы можно через реестр:
Get-Item HKLM:SYSTEMCurrentControlSetServicesLanmanServerParameters | ForEach-Object {Get-ItemProperty $_.pspath}
Если в данной ветке реестра нет параметров с именами SMB1 или SMB2, значить оба этих протокола включены (по умолчанию для этих версий 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 :

Версия SMB, используемая для подключения к удаленному серверу (ServerName) указана в столбце Dialect.
Если нужно узнать, используется ли SMB шифрование (появилось в SMB 3.0), выполните:
Get-SmbConnection -ServerName servername
Если нужно отобразить, используется ли SMB шифрование (появилось в SMB 3.0), выполните:
Get-SmbConnection | ft ServerName,ShareName,Dialect,Encrypted,UserName
$ sudo smbstatus
Вывести статистику об диалектах SMB, которые используются активными клиентами для подключения к серверу, и количество коннектов:
Get-SmbSession | Select-Object -ExpandProperty Dialect | Sort-Object -Unique

В нашем примере имеется 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

Несмотря, на то, что в 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
Включить только 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:SYSTEMCurrentControlSetServicesLanmanServerParameters" SMB1 -Type DWORD -Value 0 –Force

Включить SMBv1 сервер:
Set-ItemProperty -Path "HKLM:SYSTEMCurrentControlSetServicesLanmanServerParameters" 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:SYSTEMCurrentControlSetServicesLanmanServerParameters" SMB2 -Type DWORD -Value 0 -Force
Включить SMBv2 сервер
Set-ItemProperty -Path "HKLM:SYSTEMCurrentControlSetServicesLanmanServerParameters" 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
Для отключения SMBv2 нужно в этой же ветке установить параметр SMB2=0.
Для отключения SMBv1 клиента нужно распространить такой параметр реестра:
- Key: HKEY_LOCAL_MACHINESYSTEMCurrentControlSetservicesmrxsmb10
- 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 
Для доменной среды 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


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