WindowsでSMBプロトコルのバージョンを確認・有効化・無効化する方法【完全ガイド】
Server Message Block(SMB)は、ネットワーク上(TCPポート445)でフォルダーやファイル、プリンターなどのデバイスを共有・アクセスするために使われるネットワークプロトコルです。本記事では、Windowsの各バージョンで利用可能なSMBのバージョン(ダイアレクト)とLinuxのSambaとの対応関係、使用中のPCでSMBバージョンを確認する方法、そしてSMBv1・SMBv2・SMBv3の有効化/無効化の手順について詳しく解説します。
WindowsにおけるSMBプロトコルのバージョン
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は非対応)
Linux/Unix環境ではSambaによってSMBプロトコルが実装されています。Samba 4.14以降では、デフォルトでSMB 2.1が使用されます。
SMB通信では、クライアントとサーバーの両方が対応している中で最も高いバージョンのプロトコルが自動的に選択されます。以下の互換性表を使えば、異なるバージョンのWindows同士が通信する際にどのSMBバージョンが使われるかを確認できます。
| OS \ 相手OS | Win 10 / Server 2016 | Win 8.1 / Server 2012 R2 | Win 8 / Server 2012 | Win 7 / Server 2008 R2 | Vista / Server 2008 | XP / Server 2003以前 |
|---|---|---|---|---|---|---|
| Windows 10 / 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 / Server 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.02です。
表から分かるように、Windows XPやWindows Server 2003は共有フォルダーへのアクセスにSMB 1.0しか使えません。しかし、新しいWindows Server(2012 R2/2016以降)ではSMBv1が無効化されているため、これらの旧OSからはWindows Server 2016上の共有フォルダーへアクセスできません。
また、SMB v1.0を無効化したWindows Server 2019/2016をドメインコントローラーとして運用している場合、Windows XP/Server 2003クライアントはドメインコントローラー上のSYSVOLやNETLOGONフォルダーにアクセスできず、Active Directoryでの認証も行えなくなります。
SMBv1が無効なファイルサーバーの共有フォルダーに接続しようとすると、次のようなエラーが表示されることがあります。
The specified network name is no longer available(指定されたネットワーク名は現在利用できません)
WindowsでSMBのバージョンを確認する方法
ここでは、自分のWindowsデバイスでどのSMBバージョンが有効になっているかを調べる方法を紹介します。
PowerShellでサーバー側の設定を確認する
Windows 10/8.1およびWindows Server 2019/2016/2012 R2では、PowerShellを使って各SMBダイアレクトの状態を確認できます。
Get-SmbServerConfiguration | select EnableSMB1Protocol,EnableSMB2Protocol
このコマンドの実行結果で、EnableSMB1Protocol = FalseならSMB1は無効、EnableSMB2Protocol = TrueならSMB2およびSMB3が有効であることを意味します。
注意: SMBv3とSMBv2は密接に関連しており、同じスタックを共有しているため、個別に有効化/無効化することはできません。必ず両方まとめて切り替わります。
Windows 7/Vista/Server 2008 R2/2008での確認方法
旧バージョンのWindowsでは、以下のコマンドでレジストリを確認します。
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)
sc.exe query mrxsmb20
SERVICE_NAME: mrxsmb20 TYPE : 2 FILE_SYSTEM_DRIVER STATE : 4 RUNNING (STOPPABLE, NOT_PAUSABLE, IGNORES_SHUTDOWN)
どちらもSTATE = 4 Runningであれば、そのWindowsデバイスはSMBv1とSMBv2の両方のホストに接続できる状態です。
Get-SMBConnectionで実際に使用されているSMBダイアレクトを確認する
SMB通信では、クライアントとサーバーの両方が対応する最大のバージョンが使用されます。リモートコンピューターへのアクセスに実際に使われているSMBバージョンは、PowerShellのGet-SMBConnectionコマンドレットで確認できます。
リモートサーバー(ServerName)への接続に使用されているSMBバージョンは、Dialect列に表示されます。
特定のサーバーへの接続情報だけを表示することも可能です。
Get-SmbConnection -ServerName srvfs01
SMB 3.0で導入されたSMB暗号化が使用されているかどうかを表示するには、次のコマンドを実行します。
Get-SmbConnection | ft ServerName,ShareName,Dialect,Encrypted,UserName
Linux環境では、sambaのSMB接続と使用中のダイアレクト一覧を次のコマンドで表示できます。
$ sudo smbstatus
サーバー側でクライアントの使用バージョンを確認する
Windows SMBサーバー側では、クライアントが現在使用しているSMBプロトコルのバージョン一覧を表示できます。
Get-SmbSession | Select-Object -ExpandProperty Dialect | Sort-Object -Unique
例えば、あるサーバーにSMB 2.1(Windows 7/Windows Server 2008 R2)で接続しているクライアントが898台、SMB 3.02のクライアントが8台という具合に確認できます。
さらに、接続に使用されたSMBバージョンの監査を有効にすることもできます。
Set-SmbServerConfiguration -AuditSmb1Access $true
SMB接続のイベントは、イベントビューアーのログからエクスポートできます。
Get-WinEvent -LogName Microsoft-Windows-SMBServer/Audit
危険なSMBv1プロトコルの使用をやめよう
ここ数年、Microsoftはセキュリティ上の理由から、すべての製品でレガシーなSMB 1.0プロトコルを段階的に無効化してきました。これは、このプロトコルに存在する多数の重大な脆弱性が原因です(SMBv1の脆弱性を悪用したWannaCryやPetyaランサムウェアの被害を覚えている方も多いでしょう)。MicrosoftをはじめとするIT企業は、ネットワークでのSMBv1の使用中止を強く推奨しています。
ただし、SMBv1を無効化すると、古いクライアント(Windows XP、Windows Server 2003)、サードパーティOS(Mac OSX 10.8 Mountain Lion、Snow Leopard、Mavericks、古いLinuxディストリビューション)、旧型NASデバイスから、新しいWindows 10(Windows Server 2016/2019)上の共有ファイルやフォルダーへアクセスできなくなる可能性があります。
ネットワーク内にSMBv1しかサポートしないレガシーデバイスが残っていないのであれば、WindowsでこのSMBダイアレクトは必ず無効化しましょう。
逆に、Windows XPやWindows Server 2003などSMBv1専用のクライアントがまだ存在する場合は、それらをアップデートするか、ネットワークから隔離することが推奨されます。
WindowsでSMBv1・SMBv2・SMBv3を有効化/無効化する方法
ここからは、Windowsで各SMBバージョンを有効化/無効化する具体的な方法を解説します。SMBにはクライアント機能とサーバー機能があり、それぞれ別のWindowsコンポーネントとして管理される点に注意してください。
Windows 10 / 8.1 / Windows Server 2019/2016/2012 R2の場合
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
GPOでドメイン全体に設定を展開する
ドメイン参加コンピューターのSMBv1サーバーを無効化するには、グループポリシー(GPO)経由で次のレジストリパラメーターを配布します。
- キー:HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\LanmanServer\Parameters
- 名前:SMB1
- 種類:REG_DWORD
- 値:0
SMBv2サーバーを無効化したい場合は、同様にSMB2=0を設定します。
SMBv1クライアントを無効化するには、次のレジストリ設定を展開します。
- キー:HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\mrxsmb10
- 名前:Start
- 種類:REG_DWORD
- 値:4
注意: Windowsで「SMB 1.0/CIFS File Sharing Support」を無効化した際に、エラー0x80070035(ネットワークパスが見つかりません)が発生したり、SMB共有フォルダーへのアクセスやネットワーク探索に問題が生じたりすることがあります。その場合は、Computer Browserサービスの代わりにDiscovery Service(Function Discovery Provider Hostなど)を使用する必要があります。
-
Windows 11でサービスを有効・無効にする方法をわかりやすく解説
多くのアプリケーションや機能は、ユーザーの操作を必要とせずバックグラウンドで動作することで、OS全体の円滑な稼働を支えています。Windows OSの中核を担う「サービス」もその代表例です。これらのコンポーネントは、エクスプローラー、Windows Update、システム全体の検索といったWindowsの基本機能が常に正常に動作できるよう準備を整え、支障なく利用できる状態を維持しています。本記事では、Windows 11で任意のサービスを有効または無効にする方法を詳しく解説します。 Windows 11でサービスを有効/無効にするには すべてのサービスが常時バックグラウンドで動作している
-
Windows 11でコンパクトOSを有効・無効にする方法をわかりやすく解説
Windows 11は気に入っているけれど、ディスク容量が足りなくなるのが心配…そんな悩みを抱えている方はいませんか?ご安心ください。Windows 11には「コンパクトOS(Compact OS)」という機能が搭載されており、Windows関連のファイルやイメージを圧縮して、より小さなサイズで管理できます。この機能は前世代のWindows 10にも搭載されています。 コンパクトOSの仕組みは、圧縮されたシステムファイルからWindowsを動作させるというものです。そのため、通常のインストールよりも少ないディスク容量で済みます。本記事では、Windows 11でコンパクトOSを有効または無効に