Windows 7
 Computer >> コンピューター >  >> システム >> Windows 7

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 \ 相手OSWin 10 / Server 2016Win 8.1 / Server 2012 R2Win 8 / Server 2012Win 7 / Server 2008 R2Vista / Server 2008XP / Server 2003以前
Windows 10 / Server 2016SMB 3.1.1SMB 3.02SMB 3.0SMB 2.1SMB 2.0SMB 1.0
Windows 8.1 / Server 2012 R2SMB 3.02SMB 3.02SMB 3.0SMB 2.1SMB 2.0SMB 1.0
Windows 8 / Server 2012SMB 3.0SMB 3.0SMB 3.0SMB 2.1SMB 2.0SMB 1.0
Windows 7 / Server 2008 R2SMB 2.1SMB 2.1SMB 2.1SMB 2.1SMB 2.0SMB 1.0
Windows Vista / Server 2008SMB 2.0SMB 2.0SMB 2.0SMB 2.0SMB 2.0SMB 1.0
Windows XP / Server 2003以前SMB 1.0SMB 1.0SMB 1.0SMB 1.0SMB 1.0SMB 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}

このレジストリキーにSMB1SMB2というパラメーターが存在しない場合、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など)を使用する必要があります。

  1. Windows 11でサービスを有効・無効にする方法をわかりやすく解説

    多くのアプリケーションや機能は、ユーザーの操作を必要とせずバックグラウンドで動作することで、OS全体の円滑な稼働を支えています。Windows OSの中核を担う「サービス」もその代表例です。これらのコンポーネントは、エクスプローラー、Windows Update、システム全体の検索といったWindowsの基本機能が常に正常に動作できるよう準備を整え、支障なく利用できる状態を維持しています。本記事では、Windows 11で任意のサービスを有効または無効にする方法を詳しく解説します。 Windows 11でサービスを有効/無効にするには すべてのサービスが常時バックグラウンドで動作している

  2. Windows 11でコンパクトOSを有効・無効にする方法をわかりやすく解説

    Windows 11は気に入っているけれど、ディスク容量が足りなくなるのが心配…そんな悩みを抱えている方はいませんか?ご安心ください。Windows 11には「コンパクトOS(Compact OS)」という機能が搭載されており、Windows関連のファイルやイメージを圧縮して、より小さなサイズで管理できます。この機能は前世代のWindows 10にも搭載されています。 コンパクトOSの仕組みは、圧縮されたシステムファイルからWindowsを動作させるというものです。そのため、通常のインストールよりも少ないディスク容量で済みます。本記事では、Windows 11でコンパクトOSを有効または無効に