「3-2-1ルール」を格安で実現する:Rcloneとオブジェクトストレージ(B2/S3)を使ったランサムウェアに強いバックアップ構築

ランサムウェア被害のニュースが後を絶ちません。「うちは大したデータがないから大丈夫」などという牧歌的な時代は完全に終わりました。攻撃者は企業の規模など見ていません。無差別にばら撒かれた網にかかるか、あるいはサプライチェーンの弱点として狙い撃ちされるかのどちらかです。

ひとたび感染すれば、NAS内の共有フォルダはすべて暗号化され、業務は即座に停止します。ここで経営者を絶望の淵に叩き落とすのが、「バックアップも同時に暗号化されてしまった」という事実です。多くの企業が、バックアップ先を「同じネットワーク上の別のNAS」や「USB接続のHDD」に設定しています。これらは攻撃者から見れば、単なる「ドライブ」に過ぎず、メインのデータと一緒に破壊されます。

サイバーセキュリティの世界には、古くから伝わる鉄壁の防衛ドクトリンがあります。それが 「3-2-1ルール」です。

  • 3つ以上のデータコピーを持つ(オリジナル + バックアップ2つ)
  • 2種類の異なる媒体に保存する(ディスクとテープ、NASとクラウドなど)
  • 1つは遠隔地(オフサイト)に保管する

これをまともに商用のバックアップアプライアンスや大手ベンダーのソリューションで実現しようとすると、中小企業には到底支払えない金額の見積書が出てきます。しかし、諦める必要はありません。オープンソースの万能ツール 「Rclone」と、安価なオブジェクトストレージ(クラウドストレージ)を組み合わせることで、月額数千円からこの「最強のバックアップ環境」を構築できます。

本稿では、高価な専用ソフトを使わず、エンジニアリングの力で堅牢なバックアップシステムを構築する具体的な手法を解説します。

なぜ「Rclone」なのか?最強の理由

Rcloneは、“rsync for cloud storage” と形容される通り、コマンドラインからクラウドストレージに対してファイルを同期・転送するためのオープンソースツールです。

Windows、macOS、Linux、BSDなどあらゆるOSで動作し、対応しているストレージサービスは70種類を超えます。AWS S3、Google Cloud Storage、Azure Blob Storageといったメジャーどころはもちろん、Backblaze B2、Wasabi、Cloudflare R2といった「S3互換の安価なストレージ」、さらにはGoogle DriveやDropbox、OneDriveといったコンシューマー向けストレージまで、これ1つですべて操作できます。

情シス担当者としてRcloneを選ぶ最大のメリットは以下の3点です。

  • ベンダーロックインの回避: 特定のバックアップソフトに依存しないため、保存先のクラウドサービスをいつでも乗り換えられます。「AWSが高くなったからWasabiに移そう」といった判断が、設定ファイルの書き換えだけで完結します。
  • 強力な暗号化機能: Rclone自体がクライアントサイドでの暗号化(Crypt)機能を持っています。クラウドにアップロードする前にファイルを暗号化するため、ストレージプロバイダーにすら中身を見られることはありません。これは機密情報を扱う企業にとって必須の要件です。
  • 圧倒的なコストパフォーマンス: ソフトウェア自体は無料(MITライセンス)。かかる費用は純粋にストレージ利用料だけです。

バックアップ先の選定:AWS S3か、Backblaze B2か

「3-2-1ルール」の「1(遠隔地)」と「2(別媒体)」を同時に満たすのがクラウドストレージです。しかし、選び方を間違えると請求額に青ざめることになります。

AWS S3 Glacier Deep Archive

もし、「バックアップからデータを戻すことは、会社が燃えるような緊急事態以外には絶対にない」と断言できるなら、AWS S3のストレージクラス「Glacier Deep Archive」が最安の選択肢です。執筆時点での東京リージョンの価格は、1GBあたり約0.002ドル/月(約0.3円)。1TB保存しても月額300円程度です。 ただし、これには重大な罠があります。「取り出し」に莫大なコストと時間がかかるのです。復旧には数時間〜数十時間の待機時間が必要で、データ転送料も別途発生します。あくまで「最後の保険」としての用途です。

Backblaze B2 Cloud Storage

中小企業の常用バックアップとして私が最も推奨するのは、Backblaze B2です。 価格はストレージクラスに関わらず一律で、1GBあたり約0.006ドル/月(約0.9円)。S3の標準クラスの約5分の1という低価格でありながら、データの出し入れ即応性が高い「ホットストレージ」です。さらに、後述する「Object Lock(変更不可設定)」にも標準対応しており、ランサムウェア対策として理想的な特性を持っています。

Cloudflare R2:国内リージョンと通信速度の覇者

Cloudflare R2は、 エグレス料金(データのダウンロード料金)が無料という強烈なメリットに加え、 日本国内(東京・大阪)にデータが配置される可能性が高い(APACリージョン)という特徴があります。

  • メリット: 国内にデータがあるため遅延が非常に少ない。リストア(復旧)時のダウンロード速度が爆速。
  • デメリット: 保管料が 1GBあたり $0.015/月 と、Backblaze B2($0.006)の2.5倍ほど高い。

日本の企業としてどちらを選ぶべきか?

データ主権(カントリーリスク)」と「コスト」の天秤になります。

  • Backblaze B2: 日本リージョンがないため、データは米国西部(US West)などに保存されます。「物理的に日本国内にデータがないとコンプライアンス違反になる」という厳しい規定がある企業には不向きですが、遅延については「バックアップ」という用途に限れば、数秒の差は誤差であり実用上問題になりません。 圧倒的な安さを優先するならこちらです。
  • Cloudflare R2: 「データは国内に置きたい」「頻繁にファイルを取り出す」ならこちらが推奨です。

本稿では、中小企業の「コスト削減」と「ランサムウェア対策(めったに戻さない)」という観点から、コストパフォーマンスに優れる「Backblaze B2」をターゲットに解説を進めます。ただし、Rcloneの設定手順はほとんど同じ(S3互換)なので、R2を選ぶ場合も読み替えて進められます。

ランサムウェア対策の要、「イミュータブル(不変)」バックアップ

バックアップデータをクラウドに送っても、PCがマルウェアに感染し、そのPCが持っているクラウドへのアクセス権限(APIキー)を奪われれば、クラウド上のバックアップも削除・上書きされてしまいます。これでは意味がありません。

ここで登場するのが 「Object Lock(オブジェクトロック)」や 「Immutable(不変)」と呼ばれる機能です。 これはストレージ側で「一度保存されたファイルは、指定した期間(例:30日間)いかなる権限を持っても削除・変更できない」ように強制する機能です。たとえ管理者権限を持つアカウントが乗っ取られても、データを消すことは物理的に(システム的に)不可能です。

Backblaze B2でバケットを作成する際は、必ず「Object Lock: Enable」に設定してください。Rclone側では特に意識せずとも、バケットの設定に従って保護されます。

実装:Docker Composeによる自動バックアップ基盤

具体的な実装に入ります。社内のLinuxサーバー(あるいは常時稼働のNAS上のDocker環境)でRcloneコンテナを動かし、定期的にデータを吸い上げてクラウドに送る構成を作ります。

ここでは「社内のファイルサーバー(SMBマウント済み、あるいはローカルディスク)」のデータを、毎日深夜にBackblaze B2へ「暗号化しつつ」同期する構成例を示します。

ディレクトリ構成

/opt/backup-system/
├── compose.yaml
├── config/
│   └── rclone.conf (初回セットアップ後に生成)
└── scripts/
    └── backup-job.sh

compose.yaml

Rclone公式のDockerイメージを使用します。定期実行にはホスト側のcronを使っても良いですが、コンテナ内で完結させるために軽量なcron機能を持つベースイメージや、今回はシンプルにAlpineベースでスクリプトをループさせる、あるいはホストのcronから docker compose run を叩く方式が管理しやすいです。ここではエントリーポイントを上書きして、定期実行を行う簡易的な例を示します。

services:
  rclone:
    image: rclone/rclone:latest
    container_name: rclone_backup
    restart: unless-stopped
    volumes:
      - ./config:/config/rclone
      - ./data:/data/source:ro # バックアップ元データ(読み取り専用でマウント)
      - ./scripts:/app/scripts
    environment:
      - TZ=Asia/Tokyo
    # 簡易的な定期実行(毎日深夜3時に実行)の例。
    # 本番運用ではOfeliaなどのCronコンテナを併用するか、ホストのCronで制御することを推奨。
    entrypoint: "/bin/sh"
    command: "-c 'echo \"Starting backup daemon...\"; crond -f -d 8'"
    # cron設定ファイルをコンテナ内に配置する処理が必要ですが、
    # 簡略化のため、ここでは手動実行または外部スケジューラーを想定した定義とします。

…としましたが、実運用で最も確実なのは、compose.yaml はシンプルに定義しておき、ホストOSのCronからワンショットでコンテナを起動する方法です。常駐させる必要がないため、リソースにも優しい設計です。

修正版 compose.yaml

services:
  backup-worker:
    image: rclone/rclone:latest
    container_name: rclone_worker
    # 常駐させず、コマンド実行後に終了する
    volumes:
      - ./config:/config/rclone
      - /mnt/share/docs:/data/source:ro # バックアップ対象のNASマウントポイントなど
    environment:
      - TZ=Asia/Tokyo
      # Rcloneのログレベル設定
      - RCLONE_LOG_LEVEL=INFO
    command: version

rclone.conf の作成(セットアップ)

最初に一度だけ、対話形式で設定ファイルを作成する必要があります。

docker compose run --rm --entrypoint rclone backup-worker config

画面の指示に従い、以下のように設定します。

  1. n (New remote)
  2. name: b2-storage (任意の名前)
  3. Storage: Backblaze B2 を選択
  4. Account ID / Key: Backblazeの管理画面で発行したものを入力
  5. Advanced config: 基本的にNoでOK

次に、 暗号化レイヤーの設定を行います。これが非常に重要です。

  1. n (New remote)
  2. name: encrypted-b2
  3. Storage: prop (Encrypt/Decrypt a remote) を選択
  4. Remote to encrypt: 先ほど作った b2-storage:bucket-name/folder を指定
  5. Flename encryption: standard (ファイル名も暗号化する)
  6. Password: 非常に強力なパスワードを設定してください。 これを紛失するとデータは永久に復元不可能です。

これで準備完了です。 rclone.conf に設定が保存されました。

実行コマンド(自動化スクリプト)

実際にバックアップを行うコマンドは以下のようになります。これをシェルスクリプト backup.sh として保存し、cronに登録します。

#!/bin/bash

# ログファイルの設定など
LOGfile="/var/log/rclone_backup.log"

echo "Backup started at $(date)" >> $LOGfile

# Docker経由でRcloneを実行
# sync: 同期(削除も反映される)。不変バックアップの場合は copy を使う手もあるが、
# --backup-dir オプションで世代管理をするのがベストプラクティス。
docker compose run --rm --entrypoint rclone backup-worker \
  sync /data/source encrypted-b2: \
  --transfers 4 \
  --checkers 8 \
  --fast-list \
  --log-file /dev/stdout

echo "Backup finished at $(date)" >> $LOGfile

運用上の注意点と「リストア訓練」

1. 初回同期の時間

クラウドへのアップロードは、光回線といえども時間がかかります。テラバイト級のデータを初回同期する場合、数日〜1週間かかることもザラです。帯域制限オプション --bwlimit を活用し、業務時間中のインターネット回線を圧迫しないよう配慮が必要です。

2. コンフィグファイルのバックアップ

Rcloneのコンフィグファイル(rclone.conf)には、クラウドへの接続情報だけでなく、 暗号化のパスワードが含まれています(難読化されていますが)。 サーバー自体がランサムウェアで全滅した場合、この rclone.conf がないと、クラウド上のデータを復号できません。 必ず rclone.conf と暗号化パスワード自体を、紙に印刷して金庫に入れるか、パスワードマネージャー(Bitwardenなど)に保存し、IT管理者以外がアクセスできない安全な場所に保管してください。 これがB2への鍵であり、最後の命綱です。

3. リストア訓練の実施

「バックアップは成功していたが、戻し方がわからなかった」あるいは「戻してみたらデータが壊れていた」。これがバックアップ失敗の典型例です。 半年に一度は、「特定のファイル1つをクラウドからローカルに復元できるか」「フォルダごと復元できるか」を実際にコマンドを叩いてテストしてください。

# 復元のテストコマンド例
docker compose run --rm --entrypoint rclone backup-worker \
  copy encrypted-b2:path/to/file /data/restore_test

コストと安心のバランス

この構成であれば、仮に1TBの重要なデータをBackblaze B2に保管したとしても、月額コストは約1,000円。Rclone用の実行環境(古いPCやラズパイ、あるいは既存サーバーの空きリソース)があれば、追加のハードウェア投資も不要です。

月額数万円の保守費用を払って「なんとなく安心」を買うか、自らの手で仕組みを構築し、透明性と確実な復旧手段を手に入れるか。中小企業のITリソースが限られているからこそ、こうした「賢い技術選定」が企業の生存率を分けるのです。

ランサムウェア対策において、銀の弾丸はありません。しかし、Rcloneとイミュータブルストレージの組み合わせは、少なくとも「データの全損」という最悪のシナリオに対する、現時点で最もコストパフォーマンスの高い「鉛の盾」になることは間違いありません。

まとめ:自衛手段としてのバックアップ設計

ランサムウェア攻撃は、企業のBCP(事業継続計画)における最大の脅威の一つです。以下のポイントを押さえ、早急に対策を講じてください。

  • 3-2-1ルールの徹底: ローカルコピーだけでは不十分。必ずオフサイト(クラウド)へ出す。
  • イミュータブルストレージ: 攻撃者が「消せない」仕組みをインフラ側で担保する。
  • 暗号化の徹底: クラウドベンダーを信用しすぎず、送信前に暗号化する。
  • Rcloneの活用: 特定ベンダーに依存しない、柔軟で安価なバックアップ基盤を作る。

この記事が、貴社の「最後の砦」を築く一助となれば幸いです。


AIプロンプト

この記事に基づいて、自社の環境に合わせた具体的なバックアップ計画をAI(ChatGPTなど)に相談する際のプロンプト例です。状況に合わせて書き換えて使用してください。

あなたは中小企業のITインフラ管理者です。
現在、社内にはファイルサーバーとしてSynologyのNASがあり、約2TBのデータ(主にOffice文書とCADデータ)が保存されています。
この記事を参考に、RcloneとBackblaze B2を使ったランサムウェア対策用のバックアップシステムを構築したいと考えています。

以下の条件で、具体的な導入ステップとコマンド、注意点を教えてください。

1. NAS上ではDockerが動作します。
2. 初回バックアップは週末に行いたいですが、回線への影響を抑えたいです。
3. 予算は月額3,000円以内が目標です。
4. 万が一NASがランサムウェアに感染した場合の、具体的な復旧手順(リストア手順)もシミュレーションしてください。