Windows Server 2012 R2 で「SMBv3を有効にしたい」「暗号化されているか確認したい」という場面は、NAS移行やセキュリティ強化のタイミングでよくあります。この記事ではSMB2/SMB3の有効化手順、暗号化設定、実際の接続Dialect確認までをPowerShellでまとめます。
SMBv3(SMB 3.x)の基本:Windows Server 2012 R2では何が「有効」なのか
Windowsのファイル共有で使われるSMB(Server Message Block)は、クライアントとサーバーが接続時に「どの方言(Dialect)」で通信するかを交渉して決めます。ここで重要なのが、Windows Server 2012以降は「SMB2系(SMB2/SMB3)」が1つのスイッチで制御されるという点です。
そのため「SMBv3だけを単独でONにする」という操作よりも、サーバー側でSMB2プロトコルを有効にしておき、実際の接続では交渉の結果として最も新しいDialect(=SMB3)が選ばれる、という理解が安全です。
| よくある誤解 | 実際の挙動(2012 R2) |
|---|---|
| SMB3をON/OFFできるはず | SMB2/SMB3はまとめて有効/無効になる(設定項目はEnableSMB2Protocol) |
| サーバーでSMB3を有効にしたら必ずSMB3でつながる | 接続相手(クライアント)が対応していないとSMB3にはならない(交渉で決まる) |
| 暗号化をONにしたら常に暗号化される | 暗号化は「サーバー全体」または「共有単位」で要求/許可する。実際の接続はEncryptedで確認 |
目安として、OS世代ごとの代表的なDialectは次の通りです(組み合わせにより「最も高い共通のDialect」が選ばれます)。
| クライアントOSの例 | 主なSMB世代 | Dialect表示の例 | 補足 |
|---|---|---|---|
| Windows 7 / Windows Server 2008 R2 | SMB 2.1 | 2.1 | SMB3非対応。暗号化(SMB Encryption)も非対応 |
| Windows 8 / Windows Server 2012 | SMB 3.0 | 3.0 | SMB3対応。2012 R2相手でも3.0で交渉されることがある |
| Windows 8.1 / Windows Server 2012 R2 | SMB 3.02 | 3.02 | 同世代同士なら3.02になりやすい |
| Windows 10/11 / Windows Server 2016以降 | SMB 3.1.1 | 3.02(※) | 相手が2012 R2なら上限は3.02(サーバー側の上限に合わせる) |
つまり、Windows Server 2012 R2 でやるべきことは大きく分けて次の2つです。
- サーバー側でSMB2/SMB3を有効にしておく(EnableSMB2Protocol=True)
- クライアントとの実通信が本当にSMB3(Dialect 3.x)になっているかを確認する(Get-SmbConnection / Get-SmbSession)
作業前に押さえるチェックポイント
SMBの設定変更は「すぐ反映される」ケースもありますが、運用中のファイルサーバーでは影響を最小化するために事前確認をおすすめします。
| チェック項目 | 見るべきポイント | 例(コマンド/観点) |
|---|---|---|
| 管理者権限 | PowerShellを管理者で実行できるか | Set-SmbServerConfiguration が失敗する場合は権限不足が多い |
| 接続中ユーザー | 共有に接続中のユーザーがいるか | Get-SmbSession でセッション数を把握しておく |
| クライアントの世代 | SMB3非対応クライアントが混在していないか | 古い端末(例:Windows 7)があるとDialectは2.1になり得る |
| 暗号化の方針 | サーバー全体か共有単位か | 全体強制(EncryptData=True)は接続できない端末が出る可能性 |
| 再起動可否 | メンテナンス枠があるか | 設定変更後に再起動した方が確実な環境もある |
SMBv3を有効化する方法(実質はSMB2/SMB3の有効化)
Windows Server 2012 R2 のSMBサーバー設定は、PowerShellの Set-SmbServerConfiguration で操作します。SMBv3(SMB 3.x)を使いたい場合、まずはSMB2プロトコルを有効にします。これによりSMB2とSMB3がまとめて利用可能になります。
現在の状態を確認する(最初にやる)
まずは現状がどうなっているか確認します。多くの環境ではデフォルトで EnableSMB2Protocol は True です(過去に無効化した場合のみFalseになります)。
Get-SmbServerConfiguration | Select EnableSMB1Protocol, EnableSMB2Protocol, EncryptData
出力例のイメージ:
EnableSMB1Protocol EnableSMB2Protocol EncryptData
----------------- ----------------- -----------
False True False
SMB2/SMB3を有効化する
EnableSMB2Protocol が False の場合は、次のコマンドで有効化します。確認プロンプトが出ることがあるため、運用では -Force も併用すると手戻りが減ります。
Set-SmbServerConfiguration -EnableSMB2Protocol $True -Force
設定変更後、環境によっては再起動が必要/推奨となる場合があります。接続中のユーザーがいるファイルサーバーでは、メンテナンス時間を確保したうえで再起動する方が安全です。
(推奨)SMB1は無効のまま維持する
「SMBv3を有効化したい」背景には、セキュリティ向上や古いプロトコルからの脱却が含まれることが多いです。SMB1は脆弱性の影響を受けやすく、可能な限り無効のままにします。
Set-SmbServerConfiguration -EnableSMB1Protocol $False -Force
有効/無効の状態を再確認する場合:
Get-SmbServerConfiguration | Select EnableSMB1Protocol, EnableSMB2Protocol
設定一覧を広く確認する
「何がどうなっているか」を一度に眺めたい場合は、次のように一覧表示が便利です。
Get-SmbServerConfiguration | Format-List
| コマンド | 用途 | 確認できる代表項目 |
|---|---|---|
Get-SmbServerConfiguration | SMBサーバーの設定を確認 | EnableSMB1Protocol / EnableSMB2Protocol / EncryptData など |
Set-SmbServerConfiguration | SMBサーバーの設定を変更 | SMB2/3有効化、暗号化要求など |
Get-SmbShare | 共有ごとの設定を確認 | 共有名、パス、EncryptData など |
Set-SmbShare | 共有ごとの設定を変更 | 共有単位の暗号化(EncryptData)など |
SMBv3が有効か確認する方法(サーバー側設定)
サーバー側の「SMB2/SMB3が有効か」は、EnableSMB2Protocol を見れば判断できます。True なら、SMB2/SMB3が有効です。
Get-SmbServerConfiguration | Select EnableSMB2Protocol
ただし、ここでわかるのは「サーバーとしてSMB2/SMB3を許可しているか」までです。実際にSMB3(Dialect 3.x)でつながっているかは別で確認します。
「実際にSMB3で通信しているか」を確認する方法(Dialect確認)
SMBは交渉でDialectが決まるため、「設定をONにした」だけではSMB3利用を断定できません。確実に判断したいなら、接続しているクライアント側で Get-SmbConnection を実行し、Dialectと暗号化の状態(Encrypted)を確認するのが定番です。
クライアント側:Get-SmbConnectionでDialect/Encryptedを確認
- 対象の共有へアクセスします(エクスプローラーで開く、またはネットワークドライブに割り当てる)。
- クライアントPCで管理者権限のPowerShellを開き、次を実行します。
Get-SmbConnection | Select ServerName, ShareName, Dialect, Encrypted, Signed
プロパティが表示されない場合は、全項目を出して探すと確実です。
Get-SmbConnection | Format-List *
確認の目安:
- Dialect が
3.0/3.02などならSMB3で通信しています。 - Encrypted が
TrueならSMB Encryptionで暗号化されています。
サーバー側:Get-SmbSessionで接続クライアントを俯瞰する
「どの端末がどのDialectでつながっているか」をサーバー側から見たい場合は、Get-SmbSession が役に立ちます(出力項目は環境で異なるため、まずは全項目を確認するのがおすすめです)。
Get-SmbSession | Select ClientComputerName, ClientUserName, NumOpens, Dialect
暗号化の状態も含めて確認したい場合は次のようにします。
Get-SmbSession | Format-List *
ポイントは、サーバー設定(EnableSMB2Protocol=True)だけ見て「SMB3になっているはず」と判断しないことです。クライアントが古ければDialectは2.1になり、SMB3の機能(暗号化など)も使われません。
SMB Encryption(暗号化)が有効か確認・有効化する方法
SMB Encryptionは「SMB通信を暗号化する機能」で、SMB3世代で利用できます。Windows Server 2012 R2では、暗号化は大きく分けてサーバー全体と共有ごとの2つのレベルで制御できます。
| 暗号化の設定単位 | 設定箇所 | 向いているケース | 注意点 |
|---|---|---|---|
| サーバー全体 | Set-SmbServerConfiguration -EncryptData | サーバー上のすべての共有で暗号化を徹底したい | SMB3暗号化非対応のクライアントは接続できなくなる可能性が高い |
| 共有単位 | Set-SmbShare -EncryptData | 機密共有だけ暗号化、既存クライアントとの互換性を残す | 設定漏れがあると暗号化されない共有が残る |
サーバー全体(サーバーレベル)の暗号化設定を確認する
Get-SmbServerConfiguration | Select EncryptData
EncryptData が True なら、サーバーはSMB暗号化を要求する設定です。逆に False でも、共有単位で暗号化をONにしていれば、その共有は暗号化されます。
サーバー全体で暗号化を有効化する
Set-SmbServerConfiguration -EncryptData $True -Force
この設定は影響が大きいので、次のような手順が安全です。
- 事前にクライアントのDialect(SMB3対応有無)を把握する
- まずは共有単位で暗号化を試し、問題がないことを確認してから全体強制に移行する
- 全体強制後は、接続できなくなる端末がないかを監視する
共有(ファイル共有)ごとの暗号化を確認する
共有単位の設定は次で確認できます。
Get-SmbShare -Name <共有名> | Select Name, Path, EncryptData
全共有の暗号化状態を一覧で見たい場合:
Get-SmbShare | Select Name, Path, EncryptData, Description | Format-Table -AutoSize
共有ごとに暗号化を有効化する
Set-SmbShare -Name <共有名> -EncryptData $True
機密データがある共有だけ暗号化したい場合は、この「共有単位」が最も現実的です。特に混在環境(古い端末が一部残っている)では、いきなりサーバー全体で強制すると、思わぬタイミングで業務が止まるリスクがあります。
暗号化が「有効」でもEncryptedがTrueにならないときの考え方
設定で暗号化をONにしたのに、Get-SmbConnection の Encrypted が False のまま…という相談はよくあります。ここは原因を切り分けると解決が早いです。
| 状況 | よくある原因 | 確認方法 | 対処の方向性 |
|---|---|---|---|
| Dialectが2.1以下 | クライアントがSMB3非対応(古いOS) | Get-SmbConnection のDialect | クライアント更新/置き換え。暗号化必須なら接続不可になる |
| Dialectが3.xだがEncryptedがFalse | 暗号化が「要求」されていない(サーバー全体も共有もOFF) | Get-SmbServerConfiguration / Get-SmbShare | 共有単位またはサーバー全体でEncryptDataをON |
| 暗号化を強制したら接続できない | クライアントが暗号化機能に非対応 | エラー発生端末のOS/パッチ状況 | 強制を解除するか、端末をSMB3対応にする |
| 一部共有だけ暗号化されない | 共有単位での設定漏れ | Get-SmbShare で一覧 | 該当共有のみ Set-SmbShare -EncryptData |
特に「SMB3でつながっているか」と「暗号化されているか」は別物です。SMB3接続でも暗号化はオプションなので、暗号化を必ず使いたいなら、共有単位またはサーバー全体でEncryptDataをTrueにする必要があります。
実務で使える:確認と設定をまとめた手順(コピペ用)
ここからは、現場でよく使う流れを「コマンド中心」にまとめます。まずは現状確認 → 必要な設定 → 最後に実通信確認、の順番が安定します。
サーバー側:現状をまとめて確認
# SMB1/SMB2(=SMB2/SMB3)と暗号化(サーバー全体)を確認
Get-SmbServerConfiguration | Select EnableSMB1Protocol, EnableSMB2Protocol, EncryptData
# 共有ごとの暗号化を一覧
Get-SmbShare | Select Name, Path, EncryptData, Description | Format-Table -AutoSize
# サーバーに接続しているクライアントを一覧
Get-SmbSession | Select ClientComputerName, ClientUserName, NumOpens, Dialect | Format-Table -AutoSize
サーバー側:SMB2/SMB3を有効化
Set-SmbServerConfiguration -EnableSMB2Protocol $True -Force
サーバー側:共有単位で暗号化を有効化(推奨パターン)
Set-SmbShare -Name <共有名> -EncryptData $True
クライアント側:実際のDialect/暗号化を確認
Get-SmbConnection | Select ServerName, ShareName, Dialect, Encrypted, Signed
よくある質問(FAQ)とトラブルシューティング
Set-SmbServerConfigurationを実行したら「アクセスが拒否されました」になる
多くの場合、PowerShellが管理者権限で起動されていません。Windows Server上で「Windows PowerShell(管理者)」として起動し直して実行してください。また、リモートから実行している場合は、リモートセッションの権限やUACの影響で失敗するケースがあります。
EnableSMB2ProtocolがTrueなのに、クライアントはDialect 2.1で接続される
サーバー側がSMB3を許可していても、クライアントがSMB3に対応していないとDialectは上がりません。代表例はWindows 7です。SMB3を必ず使いたいなら、クライアントのOS更新が前提になります。
EncryptDataをTrueにしたら一部の端末がつながらなくなった
サーバー全体で暗号化を要求すると、暗号化に対応しないクライアントは接続できなくなります。まずは影響端末のOS/パッチ状況を確認し、暫定策としてはサーバー全体の強制を戻し、共有単位で暗号化する運用へ切り替えるのが現実的です。
共有単位でEncryptDataをTrueにしたのにEncryptedがTrueにならない
クライアントがその共有に「別の経路」で接続している、または古い接続が残っている場合があります。いったん共有への接続を切ってから再接続し、Get-SmbConnection を取り直してください。ネットワークドライブ割り当てがある場合は解除→再割り当ても有効です。
暗号化と署名(SMB Signing)は何が違う?
暗号化は通信内容そのものを読めないようにする対策です。一方、署名(Signing)は改ざん検知の性質が強く、通信の完全性を担保します。要件によっては両方必要になります。署名設定は次のように確認できます。
Get-SmbServerConfiguration | Select EnableSecuritySignature, RequireSecuritySignature
暗号化を一括で有効化したい(複数共有)
共有が多い場合は、Special共有(IPC$など)を除外して一括設定する方法があります。まずは一覧を出し、対象を十分に確認してから実行してください。
# 例:Special共有を除外してEncryptDataを有効化(事前にGet-SmbShareで対象確認推奨)
Get-SmbShare |
Where-Object { $_.Special -eq $false } |
ForEach-Object { Set-SmbShare -Name $_.Name -EncryptData $True }
本番反映前に「影響が出そうな端末」を見つけたい
暗号化を強制する前に、まずはサーバー側でセッションを一覧し、古いDialectが混ざっていないかを把握するのが安全です。
Get-SmbSession | Select ClientComputerName, Dialect | Sort-Object Dialect, ClientComputerName
ここで2.1などが出てくる場合、その端末はSMB3暗号化に対応していない可能性が高いので、全体強制(EncryptData=True)は慎重に判断してください。
まとめ:Windows Server 2012 R2でSMBv3を確実に使うための要点
- 2012 R2ではSMB2/SMB3はまとめて有効化されるため、
EnableSMB2ProtocolをTrueにするのが基本。 - 「有効化した」だけでは不十分。実際の接続Dialectは
Get-SmbConnection(クライアント側)で確認する。 - 暗号化はサーバー全体または共有単位で制御。混在環境では共有単位が安全。
- 暗号化を強制すると、SMB3非対応クライアントは接続できない可能性がある。事前にDialectを洗い出す。

コメント