treedown’s Report

システム管理者に巻き起こる様々な事象を読者の貴方へ報告するブログです。会社でも家庭でも"システム"に携わるすべての方の共感を目指しています。

※https化しました。その影響でしばらくリンク切れなどがあるかもしれませんが徐々に修正していきます。 リンク切れなどのお気づきの点がございましたらコメントなどでご指摘いただけますと助かります。

DebianのsambaサーバをSMB署名対応にするため調査する

Windows11 24H2では共有フォルダへのアクセスにSMB署名が必須となるらしい、ということで調べたことをご報告します。
今回は調べた内容です。実際の作業は完了しているのですが、まだまとめ切れていません。

現象:なにか遅い共有フォルダへのアクセス

社内ネットワークの共有フォルダへアクセスする際に、Windows11のPCだけなんとなく遅い、という現象に気づきました。(特にユーザから何か言われたわけではないのですが)

ログオン直後に最初の共有フォルダへのアクセスは、Windows10 22H2と比べるとWindows11の方で共有フォルダ一覧とか共有フォルダ内のリソースをエクスプローラ画面に一覧表示する時間が倍くらい遅いという状況でした。

Windows11のPCを調べていくと、23H2のものはWindows10(22H2)と同じくらいの時間で共有フォルダを開くことができるのに対して、同じWindows11でも24H2のPCで前述の遅延があるということに気づきました。

24H2の更新に要因があると考えて調べてみました。

SMB署名とは何か

調べてみたところ、Windows11 24H2ではSMB(サーバメッセージブロック)の通信にSMB署名というセキュリティが新たに要件として追加されたらしい、ということが分かりました。

※SMBプロトコルで通信するにあたって、通信内容にデジタル署名を追加するセキュリティがSMB署名ということです。共有フォルダへのアクセスにおいて安全性向上を狙った機能のようです。署名によってデータの改ざんを防止する狙いがありそうです。

この24H2で追加されたSMB署名によって(SMB署名未対応の)古いNASにアクセスできなくなったり、(完全対応していないゆえに)応答が遅延するという現象がよく起きているらしい、ということも巷で話題となっていました。(遅いかな、くらいだったので気づかなかったのですが、結構話題になっていたようです。)

※サーバー メッセージ ブロックの署名とは
https://learn.microsoft.com/ja-jp/windows-server/storage/file-server/smb-signing-overview

※SMB 署名動作の制御
https://learn.microsoft.com/ja-jp/windows-server/storage/file-server/smb-signing?tabs=group-policy

上記URL内の記述にWindows11 24H2の各エディションでは送信と受信の両方のSMB署名が必要になる(※Homeエディションだけ送信または受信SMB署名は必要ありません、と記述されている)という内容の記述が確認できます。つまりsambaサーバであるDebian側でもこのSMB署名に対応する必要があるということになりそう。

また、検索結果によく出てきたのがWindows11 24H2でSMB署名の動作を無効化してしまい、23H2と同じ状態にしてしまう、という回避策が採られているケースが多いようにみえましたが、今回はsambaサーバ側を24H2(で強制された)標準であるSMB署名に対応する方法を調べてみます。

対応させるためにsambaサーバのバージョン確認

前述のSMB署名が可能なsambaサーバでないと、Windows11 24H2以降でも表示遅延が発生する可能性が考えられましたので、根本的には問題が解消しないという結論に至りました。

そこでsambaサーバ側でSMB署名対応に必要な条件を調べてみることにしました。

これを調べたタイミングでLTSサポートのDebian 11 bullseyeはsamba-4.13、Debian 12 bookwormではsamba-4.17、がそれぞれインストールされています。Debian Stable版ではこれらのバージョンがインストールされます。

一方で、sambaサーバ自体はWindows11 24H2のSMB署名対応として、samba-4.18を推奨しているようです。ただDebianのStable版ではバージョン4.18がまだ提供されていないため、backportsを利用する必要がありそうです。

ただ、バージョン4.17でもSMB署名自体は対応しているようです。具体的には

  • バージョン4.13:SMB署名を常に要求するWindows11 24H2とは非互換、バージョンアップが必要。
  • バージョン4.17:SMB署名機能自体には対応しているが、既定では4.13と同じ動きをするため、明示的に「server signing = mandatory」をsmb.confに設定する必要がある。オプションを誤るとWindowsから接続できなくなる可能性がある。
  • バージョン4.18:SMB署名の強制や暗号化の面でWindows11 24H2と互換性が高いバージョン。4.18以降の最新バージョンで安定動作が見込める。

という相違点があるようです。
Debian 12 bookwormのStable版ではsamba-4.17が最新となるため、バージョン4.17でSMB署名対応にする方法を調べてみることにしました。

samba 4.17でSMB署名が処理出来るようにする

sambaサーバのバージョン4.17では以下のようにWindows11 24H2のSMB署名強制に対処します。

デフォルト(設定なしの場合の動作)では「server signing = auto」と同等の動作をするので、「server signing = mandatory」をsmb.confに明示的に設定することで、24H2のSMB署名を強制するWindows11クライアントと正常にやり取りが出来るようになるということのようです。

具体的には、

--------------------------------------------------------------

[global]
server signing = mandatory

--------------------------------------------------------------

このように[global]セクション内に、「server signing = mandatory」を記述することでWindows11 24H2がデフォルトでSMB署名を強制してくるのを、sambaサーバもSMB署名で応答出来るようにします。

これを実施した際に、まだ残存しているWindows10(22H2)やWindows11 23H2などの24H2以外のクライアントについて動作が気になりましたが、Windows11 24H2以前のバージョンであっても基本的にはSMB署名が強制された環境にアクセス可能なようです。

PowerShellコマンドレットで

Get-SmbClientConfiguration | Select-Object RequireSecuritySignature

を実行してみるとWindows側のSMB署名強制の有効・無効が分かります。

例えば、

このように、「RequireSecuritySignature」が「False」と表示された場合です。

これらは既定で署名を使うことができるが必須ではない状態で動作しているようです。(24H2でもFalseで動作しているケースがあるようです。いくつかのクライアントで確認しました。)サーバがSMB署名を強制したとしても、「RequireSecuritySignature」が「False」なクライアント側は任意(相手次第で挙動を変える)にSMB署名の動作を処理してくれるようなので、sambaサーバでSMB署名を強制してもアクセスが可能です。

実際に設定して動作を確認してみる

まだまとめていないのですが、テスト環境と実際の稼働中sambaサーバに前述の「server signing = mandatory」を設定して動作を確認してみました。特にアクセス出来ないクライアントもなく、SMB署名の強制が有効化できたようですが、次回に実際に設定した手順などを記事にしてみようと思います。