ディスクの暗号化は、保存されたデータを保護します。VPS ではホストがハイパーバイザーを管理しているため、その気になったプロバイダーがメモリを読み取るのは防げません。得意なのは、紛失したバックアップ、再利用されたディスク、盗難や押収されたストレージへの対策です。時間をかける前に、そのどれから守りたいのかを把握しておきましょう。
何から守るのかを決める
- 廃棄またはコピーされたディスク:暗号化が大いに役立ちます。
- 流出したスナップショット:鍵がスナップショットと一緒に保存されていなければ、暗号化が役立ちます。
- 稼働中のシステム上の攻撃者:ボリュームがロック解除されているため、暗号化は役に立ちません。
- 悪意のあるハイパーバイザー:VPS では暗号化は役に立ちません。ハードウェアを完全に管理できる専用サーバーの方が強力な選択肢です。
方法 1:暗号化したデータボリューム
これが最も安全な出発点です。2 台目のディスクを接続するかループファイルを作成し、機密データをそこに置きます。この例では、/dev/vdb という空のデバイスを使います。フォーマットすると内容が消えるため、デバイス名をよく確認してください。
sudo apt install -y cryptsetup
sudo cryptsetup luksFormat /dev/vdb
sudo cryptsetup open /dev/vdb secure
sudo mkfs.ext4 /dev/mapper/secure
sudo mkdir -p /srv/secure
sudo mount /dev/mapper/secure /srv/secure
再度閉じるには:sudo umount /srv/secure && sudo cryptsetup close secure。
方法 2:ファイルベースのコンテナ
予備のディスクがない場合は、ファイルをコンテナとして使います。
sudo fallocate -l 20G /root/vault.img
sudo cryptsetup luksFormat /root/vault.img
sudo cryptsetup open /root/vault.img vault
sudo mkfs.ext4 /dev/mapper/vault
sudo mount /dev/mapper/vault /srv/vault
方法 3:リモートでロック解除するルートディスク
ルートディスクを暗号化するには、ネットワークが起動する前の起動時にパスフレーズを入力する手段が必要です。通常の解決策は、initramfs 内の小さな SSH サーバー(dropbear)です。これは、プロバイダーがカスタムイメージのインストールや独自のパーティション構成での再インストールを許可していることが前提となるため、まず確認してください。多くの VPS パネルでは許可されておらず、ミスをするとサーバーが起動不能になる可能性があるため、レスキュー手段を用意しておきましょう。
概要:暗号化したルートでインストールし、dropbear-initramfs を追加し、SSH 公開鍵を /etc/dropbear/initramfs/authorized_keys に置き、initramfs を再生成してから、再起動して cryptroot-unlock で SSH 経由でロックを解除します。
鍵を適切に扱う
- 長いパスフレーズを使い、サーバー上ではなくパスワードマネージャーに保管します。
- LUKS ヘッダーをバックアップします:
sudo cryptsetup luksHeaderBackup /dev/vdb --header-backup-file header.img。オフラインで保管してください。 - 同じディスクに保存した鍵ファイルで自動ロック解除しないでください。それでは意味がなくなります。
- 起動時にロック解除が必要ということは、再起動のたびに自分が対応する必要があるということを忘れないでください。