Linux クライアントで SMB 1 を無効にする
SMB での通信に使用されるポート (445) は、多くの組織とインターネット サービス プロバイダー (ISP) でブロックされています。 この慣例の由来は、今や非推奨の古いバージョンの SMB プロトコルに関するセキュリティ ガイダンスです。 SMB 3.x はインターネットでも安全に使用できるプロトコルですが、以前のバージョンの SMB、特に SMB 1 はそうではありません。 SMB 1 は CIFS (Common Internet File System) とも呼ばれ、多くの Linux ディストリビューションに備わっています。
SMB 1 は、旧式で効率が悪く、またセキュリティに不安があるプロトコルです。 さいわいなことに、Azure Files では SMB 1 はサポートされていません。 また、Linux カーネル バージョン 4.18 以降では、Linux で SMB 1 を無効にすることができます。 運用環境で SMB ファイル共有を使用する前に、Linux クライアント上で SMB 1 を無効にすることを強くお勧めします。
注意事項
この記事では、2024 年 6 月以降はサポートされなくなる Linux ディストリビューションである CentOS について言及します。 適宜、使用と計画を検討してください。 詳細については、「CentOS のサポート終了に関するガイダンス」を参照してください。
Linux ディストリビューション ステータス
Linux カーネル 4.18 以降、レガシの理由から cifs
と呼ばれる SMB カーネル モジュールでは、disable_legacy_dialects
と呼ばれる新しいモジュール パラメーター (各種外部ドキュメントでは "parm" と呼ばれることが多い) を公開しています。 Linux カーネル 4.18 で導入されましたが、一部のベンダーでは、サポート対象の旧カーネルにこの変更を移植しています。 次の表では、よく知られた Linux ディストリビューションでこのモジュール パラメーターを使用できるかどうかについて詳しく示しています。
Distribution | SMB 1 を無効にできる |
---|---|
Ubuntu 14.04-16.04 | No |
Ubuntu 18.04 | Yes |
Ubuntu 19.04+ | Yes |
Debian 8-9 | No |
Debian 10+ | Yes |
Fedora 29+ | Yes |
CentOS 7 | No |
CentOS 8+ | Yes |
Red Hat Enterprise Linux 6.x-7.x | No |
Red Hat Enterprise Linux 8+ | Yes |
openSUSE Leap 15.0 | No |
openSUSE Leap 15.1+ | Yes |
openSUSE Tumbleweed | Yes |
SUSE Linux Enterprise 11.x-12.x | No |
SUSE Linux Enterprise 15 | No |
SUSE Linux Enterprise 15.1 | No |
次のコマンドを使用して、Linux ディストリビューションで disable_legacy_dialects
モジュール パラメーターがサポートされているかどうかを確認できます。
sudo modinfo -p cifs | grep disable_legacy_dialects
このコマンドを実行すると、次のメッセージが出力されます。
disable_legacy_dialects: To improve security it may be helpful to restrict the ability to override the default dialects (SMB2.1, SMB3 and SMB3.02) on mount with old dialects (CIFS/SMB1 and SMB2) since vers=1.0 (CIFS/SMB1) and vers=2.0 are weaker and less secure. Default: n/N/0 (bool)
SMB 1 を削除する
SMB 1 を無効にする前に、SMB モジュールがご利用のシステムに現在読み込まれていないことを確認してください (これは、SMB 共有をマウントしている場合に自動的に発生します)。 次のコマンドを実行します。SMB が読み込まれていない場合は、何も出力されません。
lsmod | grep cifs
モジュールをアンロードするには、最初に umount
コマンドを使用してすべての SMB 共有のマウントを解除します。 次のコマンドを使用して、システム上にマウントされているすべての SMB 共有を特定できます。
mount | grep cifs
すべての SMB ファイル共有のマウントを解除したら、モジュールをアンロードしても安全です。 modprobe
コマンドを実行します。
sudo modprobe -r cifs
modprobe
コマンドを使用して、SMB 1 をアンロードしてモジュールを手動で読み込むことができます。
sudo modprobe cifs disable_legacy_dialects=Y
最後に、/sys/module/cifs/parameters
の読み込み済みパラメーターを参照すると、パラメーターを使用して SMB モジュールが読み込まれていることを確認できます。
cat /sys/module/cifs/parameters/disable_legacy_dialects
Ubuntu および Debian ベースのディストリビューションで SMB 1 を永続的に無効にするには、設定を使用して /etc/modprobe.d/local.conf
という新しいファイルを作成する必要があります (他のモジュールのカスタム オプションがまだない場合)。 次のコマンドを実行します。
echo "options cifs disable_legacy_dialects=Y" | sudo tee -a /etc/modprobe.d/local.conf > /dev/null
SMB モジュールを読み込むと、これが動作していることを確認できます。
sudo modprobe cifs
cat /sys/module/cifs/parameters/disable_legacy_dialects
次のステップ
Azure Files の詳細については、次のリンクをご覧ください。