Server Message Block (SMB) プロトコルを理解し、トラブルシューティングする

サーバー メッセージ ブロック (SMB) は、ユーザーやアプリケーションがネットワーク経由でファイル、プリンター、その他の共有リソースにアクセスできるようにする、重要なネットワーク ファイル共有プロトコルです。Windows 環境で一般的に使用される SMB は、クライアント システムとサーバー システム間のシームレスな通信を実現します。この記事では、SMB の仕組み、そのコンポーネント、一般的なトラブルシューティング手順、SMB 関連の問題を解決するためのベスト プラクティスについて説明します。



SMB とは

サーバー メッセージ ブロック (SMB)は、ユーザーがリモート サーバー上のファイルをローカルであるかのように読み取り、書き込み、管理できるようにするネットワーク プロトコルです。SMB は Windows ネットワークで広く使用され、ファイル、プリンター、シリアル ポートへの共有アクセスを実現します。Linux や macOS システムでもサポートされており、クロスプラットフォーム通信のための汎用性の高いプロトコルとなっています。


SMB の仕組み

  1. クライアント要求:SMB クライアント(Windows、Linux、macOS など)が、共有リソースにアクセスするために SMB サーバーに要求を送信します。
  2. サーバー応答:SMB サーバーは、認証とアクセス許可に基づいて要求を検証します。
  3. リソース アクセス:アクセスが許可されると、クライアントはローカル ドライブ上にあるかのようにファイルを読み取り、書き込み、変更できます。

SMB の主要な用語

  • SMB サーバー (SRV):共有ファイル システムをホストするシステム。
  • SMB クライアント (CLI):共有ファイル システムにアクセスするシステム。

たとえば、Windows Server 2016 マシンが SMB 共有\\MyWorkstation\Data(Windows 10 コンピューター上)にアクセスする場合、サーバーはSMB クライアントとなり、ワークステーションはSMB サーバー.


SMB のバージョン

1. SMB 1.0 (レガシー)

  • WannaCry や EternalBlue のような攻撃に対して脆弱です。
  • 最新のセキュリティ機能がありません。

2. SMB 2.0 / 2.1

  • パフォーマンスとセキュリティが向上しました。
  • データ転送速度を向上させるため、より大きなバッファ サイズをサポートしています。

3. SMB 3.0+

  • セキュリティ強化のために暗号化が導入されました。
  • 高速ファイル転送のための SMB Multichannel や SMB Direct などの機能があります。

SMB のコンポーネント

1. バイナリ

  • SMB クライアント バイナリ:場所は%windir%\system32\Drivers:
    • RDBSS.sys
    • MRXSMB.sys
    • MRXSMB10.sys
    • MRXSMB20.sys
    • MUP.sys
    • SMBdirect.sys
  • SMB サーバー バイナリ:
    • %windir%\system32: Srvsvc.dll
    • %windir%\system32\Drivers: SRVNET.sys, SRV.sys, SRV2.sys, SMBdirect.sys

2. バインド

  • SMB クライアント バインド: Client for Microsoft Networks
  • SMB サーバー バインド: File and Printer Sharing for Microsoft Networks

SMB のポートと通信

SMB は、使用するプロトコルに応じて異なるポートで動作します:

プロトコルポート説明
NetBIOS over TCP/IPUDP 137名前解決
NetBIOS over TCP/IPUDP 138データグラム サービス
NetBIOS over TCP/IPTCP 139セッション サービス
TCP 経由のダイレクト SMBTCP 445既定の SMB 通信

最新のネットワークでは主にTCP 445を使用し、古いシステムでは NetBIOS に依存する場合があります。


SMB の問題をトラブルシューティングする方法

1. 接続を確認する

  • クライアントが次のポートでサーバーに接続できることを確認します。TCP 445:
Test-NetConnection <server_IP_or_hostname> -Port 445
  • 失敗した場合は、Azure Firewall、NSG、またはローカル ファイアウォールで SMB トラフィックがブロックされていないか確認します。

2. 名前解決を確認する

  • ホスト名と IP でサーバーへのアクセスをテストします:
nslookup <server_hostname>
  • ホスト名で失敗した場合は、DNS 構成を確認します。

3. SMB サービスを確認する

  • 必要なサービスが実行中であることを確認します:
Get-Service -Name LanmanServer, LanmanWorkstation
  • 停止している場合はサービスを開始します:
Start-Service -Name LanmanServer, LanmanWorkstation

4. ファイアウォール規則を確認する

  • SMB 規則が有効になっていることを確認します:
netsh advfirewall firewall show rule name="File and Printer Sharing (SMB-In)"

5. アクセス許可を確認する

  • フォルダーのプロパティまたは CMD を使用して、共有アクセス許可と NTFS アクセス許可を確認します:
net share <sharename>
icacls <folder_path>

6. UNC パスを使用してアクセスをテストする

  • 「Run (Win + R) を開き、次のように入力します:
\\<server_IP_or_hostname>\sharename

高度なトラブルシューティングとデータ収集

1. SMB セッションを確認する

  • アクティブな SMB セッションを表示します:
Get-SmbSession

2. SMB 構成をリセットする

  • SMB 2 と 3 を無効化してから再度有効化します:
Set-SmbServerConfiguration -EnableSMB2Protocol $true -Force

3. ネットワーク トレース

  • Wireshark を使用して SMB 関連のネットワーク パケットを収集します:
    1. SMB クライアントとサーバーの両方でトラフィックのキャプチャを開始します。
    2. 問題を再現します。
    3. パケットを分析して SMB エラーやタイムアウトを探します。

4. イベント ログを収集する

  • さらに分析するために、SMB 関連のイベント ログをエクスポートします:
    • SMB クライアント ログ。
    • SMB サーバー ログ。
SMB

参考ドキュメント:

Server Message Block (SMB) の高度なトラブルシューティング | Microsoft Learn

SMB の既知の問題 | Microsoft Learn

SMB のトラブルシューティング ガイダンス – Windows Server | Microsoft Learn

Microsoft SMB プロトコルと CIFS プロトコルの概要 – Win32 アプリ | Microsoft Learn

Windows で SMBv1、SMBv2、SMBv3 を検出、有効化、無効化する | Microsoft Learn

Windows Server における SMB 3 プロトコルを使用したファイル共有の概要 | Microsoft Learn

Server Message Block の署名の概要 – Windows Server | Microsoft Learn

SMB のセキュリティ強化 | Microsoft Learn


まとめ

SMB はファイル共有とリソース アクセスのための強力なプロトコルですが、設定ミス、ネットワーク制限、古いコンポーネントが原因で問題が発生することがあります。上記のトラブルシューティング手順に従うことで、SMB 関連の問題を効果的に特定し、解決できます。複雑な問題については、ネットワーク トレースやイベント ログなどの高度な診断により、より深い洞察が得られます。

コメントを残す