MENU

Linuxのrsyncセキュリティ設定入門|SSH強制転送・デーモンモード認証・ファイアウォール連携で安全なファイル同期を実現する実践ガイド

Linuxでファイルのバックアップや定期同期を手軽に実現できるrsync。多くのインフラ現場で日常的に使われているツールですが、デーモンモードをデフォルトのまま起動すると認証なし・暗号化なしで外部からファイルにアクセスできる状態になります。

この記事では、SSH強制転送・デーモンモード認証・ファイアウォール連携の3アプローチを使って安全なrsync環境を構築する方法を、コマンド例を交えて解説します。情シス1人体制でも今日から実践できる内容です。

Linuxのrsyncセキュリティ設定入門|SSH強制転送・デーモンモード認証・ファイアウォール連携で安全なファイル同期を実現する実践ガイド - 解説

目次

rsyncのセキュリティリスクとは?

rsyncはもともと「高速な差分同期」に特化したツールとして設計されています。インフラ現場では、サーバー間のバックアップやデプロイ用ファイル同期など幅広く使われています。しかしその手軽さゆえに、セキュリティの設定が後回しになりがちです。

主なリスクは次の3点です。

・デーモンモードの認証設定漏れ: rsyncをサービス(デーモン)として起動した場合、デフォルト設定ではパスワード認証が設定されていないケースがあります。ポート873番(TCP)が外部に開放されると、誰でもファイルにアクセスできる状態になります。
・平文通信のリスク: rsync自体はデータを暗号化しません。SSH経由を使わない場合、転送内容がネットワーク上で盗聴される可能性があります。
・転送対象の範囲が広すぎる: rsyncの対象パスの設定が広すぎると、/etc/shadowなど意図しない機密ファイルまで転送対象に含まれる場合があります。

SSH経由での安全なrsync転送(推奨方法)

rsyncをSSHのトンネル経由で使う方法が、最もシンプルで安全なアプローチです。SSH接続の暗号化と認証をそのまま活用するため、rsync単体の認証設定は不要です。

1. SSH鍵認証の前提確認

rsync over SSHは、SSH鍵認証が設定済みであることが前提です。接続元の自分のPCと転送先サーバーの間でSSH鍵認証が機能しているか事前に確認してください。SSH鍵認証の設定手順については、SSH接続のセキュリティ対策を参照してください。

2. rsync over SSHの基本コマンド

SSH経由でrsyncを実行するには、-e ssh オプションを指定します。

# SSHポートが22番の場合(基本形) rsync -avz -e ssh /local/data/ user@192.168.1.10:/backup/data/ # SSHポートを変更している場合(例: ポート2222) rsync -avz -e "ssh -p 2222" /local/data/ user@192.168.1.10:/backup/data/ # 非対話バックアップ(cronなどで使用):専用の鍵を指定する rsync -avz -e "ssh -i /root/.ssh/backup_key -o StrictHostKeyChecking=yes" \ /local/data/ user@192.168.1.10:/backup/data/

3. 専用のSSH鍵と制限付きauthorized_keysの設定

cronで自動バックアップを実行する場合は、専用のSSH鍵ペアを作成し、転送先サーバーの ~/.ssh/authorized_keys に「rsync専用のコマンド制限」を付けることを推奨します。仮にその鍵が漏洩しても、rsync以外の操作を封じることができます。

# 専用鍵の生成(パスフレーズなし・cronからの自動実行用) ssh-keygen -t ed25519 -f /root/.ssh/backup_key -N "" # 転送先サーバーの ~/.ssh/authorized_keys に以下を追記する # command= でrsyncコマンドのみ許可し、その他の操作を禁止する command="rsync --server --sender -avz . /backup/data/",no-port-forwarding,no-x11-forwarding,no-pty ssh-ed25519 AAAAC3Nz... backup-key # ※ command=の内容はrsyncがサーバー側で実行する実際のコマンドに合わせる必要があります

この設定により、たとえ鍵が第三者の手に渡っても、インタラクティブなシェルアクセスや不正なコマンド実行は防げます。

rsyncデーモンモードを使う場合の安全な設定

プル型バックアップ(複数のサーバーがバックアップサーバーにrsyncを送り込む構成ではなく、バックアップサーバーが各サーバーからファイルを受け取る構成)など、デーモンモードが必要なケースもあります。その場合は /etc/rsyncd.conf の設定が安全性の要になります。

1. rsyncd.confの認証設定

デーモンモードでは、必ずパスワードファイルを使った認証を有効にします。認証なしの状態でポート873を外部に開放することは絶対に避けてください。

# /etc/rsyncd.conf の設定例 # グローバル設定 log file = /var/log/rsyncd.log pid file = /var/run/rsyncd.pid # rootで実行しない uid = nobody gid = nobody [backup] path = /backup/data comment = Backup Storage # 認証を必須にする(ユーザー名を指定) auth users = backupuser secrets file = /etc/rsyncd.secrets # ホストIPでアクセス元を制限する(スペース区切りで複数指定可) hosts allow = 192.168.1.0/24 hosts deny = * # 書き込み禁止にする場合はyes(読み取り専用バックアップ領域) read only = yes

# /etc/rsyncd.secrets の形式(user:password の1行ごと) backupuser:StrongP@ssw0rd # パーミッションは必ず600に設定する(rootのみ読み取り可) chmod 600 /etc/rsyncd.secrets # 設定の確認 cat /etc/rsyncd.secrets # パーミッション確認後に内容を見る ls -la /etc/rsyncd.secrets # → -rw------- と表示されることを確認

secrets fileのパーミッションが600未満(例: 644)だと、rsyncデーモンが起動を拒否します。必ず chmod 600 を実行してから起動してください。

2. デーモンの状態確認と不要な場合の停止

rsyncデーモンを使っていないにもかかわらず、いつの間にか有効になっているケースは現場でよく見られます。まずは現状を確認します。

# rsyncデーモンの稼働状況を確認 systemctl status rsync # ポート873がリッスン中かを確認 ss -tlnp | grep 873 # 不要な場合は停止・無効化する systemctl disable --now rsync

SSH経由のrsync(デーモンモードを使わない方法)はポート873を使いません。デーモンが不要であれば停止しておくことが攻撃対象領域の削減につながります。

ファイアウォールでrsyncデーモンポートを守る

デーモンモードを使う必要がある場合は、ファイアウォールでポート873番を絞り込み、必要なIPアドレスからのアクセスのみ許可します。firewalldの基本的な操作についてはfirewalldの設定入門も合わせてご覧ください。

# バックアップクライアントのIPが 192.168.1.100 の場合の例 # rich ruleで特定のIPだけポート873への接続を許可する firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="192.168.1.100" port protocol="tcp" port="873" accept' # 設定の反映 firewall-cmd --reload # 設定確認 firewall-cmd --list-rich-rules # 複数のクライアントからアクセスする場合は、1つずつrule追加するか # 対象サブネットをCIDRで指定する firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="192.168.1.0/24" port protocol="tcp" port="873" accept'

rsyncd.confの hosts allow とファイアウォールのルールはどちらか一方ではなく、両方設定することで多層防御になります。

–excludeオプションで機密ファイルを転送対象から外す

サーバー全体や /etc 配下をrsyncで転送する場合は、--exclude オプションで機密ファイルを明示的に除外します。

# /etc 配下をバックアップするが、認証情報ファイルを除外する例 rsync -avz -e ssh \ --exclude=/shadow \ --exclude=/gshadow \ --exclude=/ssh/ssh_host_* \ --exclude=/ssl/private/ \ /etc/ user@backup-server:/etc-backup/ # 除外ファイルリストをファイルで管理する方法(スケールしやすい) # /root/rsync-exclude.txt に除外パターンを1行ずつ記述する cat > /root/rsync-exclude.txt << 'EOF' /shadow /gshadow /ssh/ssh_host_* /ssl/private/ /sudoers.d/ EOF # 除外リストを使ったrsync実行 rsync -avz -e ssh --exclude-from=/root/rsync-exclude.txt \ /etc/ user@backup-server:/etc-backup/

特に /etc/shadow(パスワードハッシュ)や秘密鍵ファイルが意図せず転送されると、その情報が漏洩した際のリスクは非常に高くなります。転送対象パスを設計する段階から除外ルールを明記する習慣をつけてください。

中小企業でも今日からできること

rsyncの設定を全面的に見直す余裕がなくても、次の3点から着手することで即座にリスクを下げられます。

・rsyncデーモンが起動しているか確認する: systemctl status rsync や ss -tlnp | grep 873 でデーモンの稼働状況を確認します。使っていないなら停止・無効化してください(systemctl disable --now rsync)。
・デーモンモードを使っている場合はhosts allow/denyを確認する: /etc/rsyncd.conf を開き、hosts allow と hosts deny が適切に設定されているか見直します。
・cronから実行しているrsyncをSSH鍵認証に切り替える: パスワード認証や平文転送で動かしているcronスクリプトがあれば、SSH鍵認証経由(-e ssh)に切り替えます。

よくある誤解と注意点

・「LAN内だから暗号化は不要」は通用しない: 内部ネットワークであっても、侵害を受けたPCによる横移動や不正な中間者によるパケット盗聴は起こり得ます。VPN内であってもSSH経由のrsyncを推奨します。
・rsync over SSHはsshd_configの設定に依存する: sshd側でパスワード認証が有効になっていると、rsync over SSHもパスワード認証でアクセスされる可能性があります。SSH設定の強化と合わせて実施してください(参考: sshd_config設定完全ガイド)。
・「–delete」オプションの取り扱い: --delete を使うと、転送元で削除されたファイルが転送先でも削除されます。ランサムウェアに感染した状態で誤ってrsyncを実行すると、バックアップ先のデータも同時に失われる危険があります。本番バックアップには世代管理(スナップショット)も組み合わせることを検討してください。
・rsyncのバイナリは定期的にアップデートする: rsync自体にも脆弱性が発見されることがあります(一般的なパターン)。OSのパッケージアップデートの対象に含まれているか定期的に確認してください。

Linuxのrsyncセキュリティ設定入門|SSH強制転送・デーモンモード認証・ファイアウォール連携で安全なファイル同期を実現する実践ガイド - まとめ

本記事のまとめ

rsyncのセキュリティ強化は、大規模な設定変更を必要としません。SSH経由に統一するだけで転送の暗号化と認証を一気に確保でき、デーモンモードを使う場合もrsyncd.confの数行の設定と、ファイアウォールによるポート絞り込みで大部分のリスクをカバーできます。

対策 効果 難易度
SSH経由に統一(-e ssh) 暗号化と認証を一括で確保 低(コマンド1行の変更)
専用SSH鍵+authorized_keysのコマンド制限 鍵漏洩時の被害を最小化 中(鍵生成と設定ファイル編集)
rsyncd.confの認証設定(auth users・secrets file) デーモンへの不正アクセスを遮断 低(設定ファイルの編集)
hosts allow / hosts deny アクセス元IPを絞り込む 低(設定ファイルの編集)
ファイアウォールでポート873を制限 外部からのデーモン接続を遮断 低(firewall-cmdコマンド)
–excludeで機密ファイルを除外 意図しないファイル漏洩を防止 低(オプション追加)

Linuxサーバーの権限管理や各種コマンドの基礎については、姉妹サイトLinuxMaster.JPで体系的に解説しています。

PR

Linuxサーバーセキュリティ徹底入門(中島能和)

Linuxサーバーを安全に運用するための基礎から応用まで体系的に解説した一冊。SSH設定・ファイルアクセス制御・サービスのセキュリティ強化など、rsync運用にも役立つ知識を幅広く学べます。

関連記事をもっと読む

同じテーマの記事をまとめています。あわせて読みたい記事はこちらからご覧いただけます。

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

目次