TrueNAS SCALEのインストールと設定ガイド:ランサムウェアに強いZFS HomeLabの構築

HomeLab tutorial - IT technology blog
HomeLab tutorial - IT technology blog

背景と導入理由:標準的なNAS構成がランサムウェアに屈する理由

一般的なファイル共有構成の多くは、HomeLabを致命的なリスクに晒しています。クライアント側のワークステーションがランサムウェアに感染すると、ネットワークドライブを巡回し、配置されているファイルを直接暗号化してしまいます。EXT4やNTFSなどの従来型ファイルシステムはインプレース(上書き)で書き込みを処理するため、マルウェアは元ファイルを読み込み、クライアントのメモリ上で暗号化して、元の領域を破損したデータで上書きしてしまいます。

一方、Debian LinuxとOpenZFSを組み合わせたTrueNAS SCALEはこの仕組みを根本から覆します。ZFSはコピーオンライト(Copy-on-Write: CoW)トランザクションアーキテクチャを採用しており、既存のデータブロックを直接変更することはありません。クライアントがファイルを変更した場合、ZFSはまず未割り当てのセクタへ新しいペイロードを書き込み、書き込みが成功した後にのみメタデータツリーを更新します。

この設計により、スナップショットは本質的にイミュータブル(変更不可)となります。仮にランサムウェアがSMB共有への完全な書き込み権限を取得し、すべてのフォルダを暗号化しようとしても、書き込まれるのは新しいブロックのみです。ZFSデータセット内にロックされた過去のスナップショットに手が加えられたり、上書きされたりすることはありません。適切なスナップショットスケジュールを設定しておけば、数百ギガバイトもの暗号化されたファイルを10秒未満でロールバックできます。

ハードウェア構成とサイジングのポイント

後々の安定性トラブルを防ぐために、適切なハードウェアを選定しておくことが重要です:

  • ホストバスアダプタ(HBA):ITモードにファームウェア更新されたLSI Broadcom SAS 9300-8iや9207-8iなどのHBAを選択してください。ハードウェアRAIDカードは避ける必要があります。ZFSがデータの整合性管理、タイムアウト処理、パリティ計算を正常に行うには、各物理ドライブを低レイヤーで直接制御できる環境が不可欠です。
  • メモリ:基本構成として16 GB以上のRAMを用意します。大規模なストレージプールの場合は、ストレージ容量1 TBあたり約1 GBのRAMを目安にしてください。CPUとマザーボードがサポートしている場合は、ECCメモリの採用を推奨します。ZFSはリードキャッシュ(Adaptive Replacement Cache: ARC)をRAM上に保持するため、メモリのエラーはキャッシュされた書き込みデータの破損につながるリスクがあります。
  • 専用ブートドライブ:TrueNAS SCALEはブートディスク全体を占有します。データ保存用のドライブをOS用にパーティション分割してはいけません。120 GB〜250 GB程度の手頃なSATA SSDまたはM.2 NVMeドライブを用意してください。USBメモリはSCALEのログ書き込み負荷によって短期間で劣化するため避けてください。

インストール:ベアメタルへのTrueNAS SCALE導入

最新のTrueNAS SCALE ISOをダウンロードし、RufusやVentoyなどを使用して作業用USBドライブに書き込みます。

ステップ1:インストーラーの実行

  1. インストーラーUSBをサーバーに接続します。BIOS/UEFI画面に入り、AHCIモードを有効化し、UEFI USBブートの優先順位を最上位に設定してシステムを起動します。
  2. 初期メニュー画面でInstall/Upgradeを選択します。
  3. 専用のブートSSD(例: /dev/sda または /dev/nvme0n1)を選択します。データ用ドライブを誤って選択しないよう、ディスク容量を必ず再確認してください。
  4. Administrative user (admin)を選択し、強固で複雑なパスワードを設定します。
  5. Boot via UEFIを選択します。
  6. インストールが完了したら、USBドライブを取り外してサーバーを再起動します。

ステップ2:初期コンソール接続とネットワーク設定

システムが起動すると、コンソール画面にDHCPで取得したIPアドレスが表示されます。ルーターの再起動による接続切断を防ぐため、物理コンソールから直接静的IPを割り当てます。メニューから1) Configure Network Interfacesを選択します:

# 物理コンソールでのネットワーク設定
1) Configure network interfaces
Select an interface: enp3s0
Delete existing interface? (y/n): n
Configure IPv4? (y/n): y
DHCP? (y/n): n
IPv4 address: 192.168.1.50
IPv4 netmask: 255.255.255.0
Configure IPv6? (y/n): n
Restart network services? (y/n): y

ブラウザを開き、https://192.168.1.50にアクセスしてTrueNASのWebダッシュボードにログインします。

設定:ZFSプールとスナップショット防御の強化

ステップ1:耐障害性に優れたZFSプールの作成

ダッシュボードを開き、Storage > Create Poolへ進みます。

  • Pool Name: tank-storage
  • Topology Layout: 6〜8台のHDDを使用する場合は、RAID-Z2(二重パリティ、最大2台のディスク障害を許容)を選択します。仮想マシンや高速なiSCSI共有で高いIOPSが必要な場合、または大容量ディスクのリビルド時間を短縮したい場合は、Mirrored VDEVs(RAID 10相当)を選択してください。
  • 対象のドライブを選択し、Createをクリックします。

ステップ2:最適化プロパティを適用したデータセットの作成

ルートプールディレクトリを直接共有するのは避けてください。圧縮設定、レコードサイズ、アクセス権限を個別に管理できるよう、専用のデータセットを作成します。Storage > tank-storage > Add Datasetへ進みます:

  • Dataset Name: documents
  • Sync: Standard(システムRAMキャッシュおよびZILによって安全な書き込みを担保)
  • Compression: ZSTD(CPU負荷を最小限に抑えつつ優れた圧縮率を実現)
  • Atime: Off(読み取り時のアクセス日時更新を無効化し、ディスクIOPSを節約)
  • Record Size: 一般的なファイル保存用途では128 KiBを維持し、非圧縮動画ライブラリなどの大容量データ用には1 MiBに変更します。

ステップ3:ランサムウェア対策スナップショットパイプラインの構築

高頻度なスナップショット取得がデータ復旧戦略の要となります。仮に14時15分にマルウェア感染が発生しても、14時00分のクリーンなスナップショットがあれば、失われるデータはわずか15分間の作業内容にとどまります。

Data Protection > Periodic Snapshot Tasks > Addへ進み、以下の3階層のスナップショットを設定します:

  1. 第1層 — 高頻度スナップショット:
    • Dataset: tank-storage/documents
    • Recursive: 有効(Enabled)
    • Snapshot Lifetime: 48 Hours
    • Schedule: カスタムcron(08:00から20:00の間、15分間隔で実行)
  2. 第2層 — 日次スナップショット:
    • Dataset: tank-storage/documents
    • Snapshot Lifetime: 14 Days
    • Schedule: 毎日 00:00
  3. 第3層 — 長期保持用週次スナップショット:
    • Dataset: tank-storage/documents
    • Snapshot Lifetime: 8 Weeks
    • Schedule: 毎週日曜日 01:00

ステップ4:シャドウコピー(VSS)対応SMB共有の設定

ZFSスナップショットをWindowsのボリュームシャドウコピーサービス(VSS)と連携させることで、Windowsクライアントの「以前のバージョン」タブから、管理者権限なしでユーザー自身がファイルを復元できるようになります。

  1. Shares > Windows (SMB) Shares > Addへ進みます。
  2. パスに/mnt/tank-storage/documentsを指定します。
  3. Advanced Optionsを展開し、Enable Shadow Copiesにチェックを入れます。
  4. 変更を保存し、System Settings > ServicesからSMBサービスを有効化します。

検証とモニタリング:復旧手順の確認とプール健全性の監視

攻撃のシミュレーションと即時リカバリ

テストしていないバックアップポリシーを過信してはいけません。SMB共有上でファイルの破損・暗号化をシミュレーションし、ロールバック手順が正常に機能するか検証します。

SSHセッションまたはTrueNASのWebシェルを開き、利用可能なスナップショット一覧を確認します:

# documentsデータセットの利用可能なスナップショットを確認
zfs list -t snapshot -r tank-storage/documents

以下のような出力が表示されます:

NAME                                                    USED  AVAIL     REFER  MOUNTPOINT
tank-storage/documents@auto-2026-10-03_14-00            120K      -     4.50G  -
tank-storage/documents@auto-2026-10-03_14-15            140K      -     4.50G  -

14時15分の直後に共有フォルダがマルウェアによって暗号化された場合、以下の3つのコマンドでデータセットを瞬時に健全な状態へロールバックできます:

# 1. クライアントのアクティブな接続を切断するためSMBサービスを停止
midclt call service.stop smb

# 2. クリーンなスナップショットの状態へデータセットをロールバック
zfs rollback -r tank-storage/documents@auto-2026-10-03_14-15

# 3. SMBサービスを再開
midclt call service.start smb

ロールバックはほぼ一瞬で完了します。ZFSはメタデータのポインタを切り替えるだけで処理を行うため、10 TBの復元でも10 MBの復元と同じ時間で完了します。

自動メンテナンスタスクとアラート設定

ドライブは経年劣化します。自動メンテナンスタスクを設定し、プールの冗長性が損なわれる前にビット腐敗(Bit Rot)やセクタ障害を検知できるようにします:

  1. ZFS Scrub タスク: Data Protection > Scrub Tasks > Addへ進みます。tank-storageに対して2週間ごとにスクラブを実行し、全ブロックを読み出してチェックサムを検証します。
  2. S.M.A.R.T. テスト: Data Protection > S.M.A.R.T. Tasks > Addへペ進みます。全ドライブを対象に、毎日03:00にショートテスト、毎月1日に拡張テスト(Extended Test)を実行するよう設定します。
  3. アラート通知サービス: 画面右上のAlerts(ベルアイコン)> Alert Settingsをクリックします。DiscordのWebhookや認証付きSMTPメールを設定してください。ドライブのI/Oエラー発生時やプールがデグレード状態(縮退状態)に陥った際に、即座に通知を受け取ることができます。

ターミナルからいつでもストレージの健全性を確認できます:

zpool status tank-storage

ステータスがstate: ONLINEであり、READ、WRITE、CKSUMの各カラムのエラーカウントがすべてゼロであることを確認してください。自動スナップショット、定期的なスクラブ、そして即時ロールバック機能を組み合わせることで、ディスク障害にもランサムウェアの脅威にも屈しない堅牢なHomeLab環境が完成します。

Share: