VPN 経由の rsync:デーモンのポート 873 と SSH モードの違い
ポート 873 はトンネルが運ぶ内側のサービスであり、その代替ではありません。デーモンモードと SSH モードを見分け、実際に使う経路だけを開いてください。
トンネルのインターフェースで TCP 873 を許可しても、rsync が OpenVPNを通るわけではなく、相手側がモジュールを受け入れるようにもなりません。トンネルが運ぶのは内側の接続であり、そのプロトコルと宛先の規則はまったく変わらないままです。したがって最初の問いは、どのポートを開くかではなく、rsync がどの種類の接続を行うかです。以下はすべて、トンネルがすでに起動していて、疑わしいのが内側のサービスだけであることを前提とします。
rsync が実際にどの接続を行うかを決める
コマンドのリモート引数は、通常、ファイアウォールを変更する前にその問いに答えます。二重コロンや URL スキームはデーモンを選び、ホスト名の後の単一コロンはリモートシェルを選びます。ドキュメントの例ではなく、実際に実行している引数を読んでください。
明示的なリモートシェルのオプションは答えを再び変えられます。転送にどのプログラムを起動するかを rsync に伝えるからで、ホスト部分だけでなく、継承されたラッパースクリプトも含めてコマンドライン全体を読んでください。
| Remote argument | What it opens |
|---|---|
rsync://vault.corp.internal/archive/ | rsync daemon, normally TCP 873 |
vault.corp.internal::archive/ | rsync daemon, normally TCP 873 |
[email protected]:/srv/archive/ | Remote shell, normally SSH on its configured port |
デーモンモード:バインドアドレス、モジュール、ポート
デーモンの構文では、パスの部分はディスク上のディレクトリではなく、設定済みのモジュールを指します。モジュールのパスワードは接続が受け入れられた後にだけ確認され、モジュールはさらに読み取り専用にしたり一覧から隠したりできます。エラーを読むときにはこの順序が重要で、接続の拒否とモジュールの拒否は異なる二つの段階での失敗だからです。どちらのメッセージもトンネル自体については何も語りません。
独立したデーモンは設定ファイルでトンネルのアドレスに固定でき、ファイアウォール規則なしで公開インターフェースから遠ざけられます。値はデーモンがバインドする時点で存在している必要があり、ソケットで起動するリスナーや inetd 管理のリスナーはそれを完全に無視することがあります。
address = 10.44.0.1
port = 873
[archive]
path = /srv/archive
read only = yes
次に、公開名ではなくプライベートアドレスに対して試します。公開ホスト名は WAN アドレスに解決され、同じマシンが両方に応答する場合でも別の経路を通ります。
rsync --list-only rsync://10.44.0.1/archive/
リモートシェルモード:SSH が転送を運ぶ
単一コロンでは、rsync はリモートシェルのプログラムを起動し、そのプロトコルをこのチャネル上で話すので、到達できるサービスは、サーバーが待ち受けるポートの SSH だけです。rsync デーモンは決して動かず、ポート 873 は無関係で、アクセスの判断は SSH アカウントの判断になります。リモートパスは、向こう側のシェルが解釈する実際のファイルシステムパスです。だからこそ 873 を狙ったファイアウォールの変更は、このモードには何の効果もありません。
その設計には 認可されたアカウントとホスト鍵の検証が必要で、SSH 自身の認証ポリシーを引き継ぎます。転送が信頼できないネットワークを越える必要があるとき、暗号化がそのために作られたプロトコルに属するため、しばしばより良い選択です。パスワードを求めるデーモンは同じものではありません。
選んだ経路だけを開く
モードが決まったら、トンネルを運ぶ一つのインターフェースで一つの内側のサービスだけを許可し、規則をインターフェース、送信元プール、宛先アドレスで絞って、後から既定の拒否を変更しても黙って広がらないようにします。その後で規則の順序を見直してください。連鎖の前の方にある許可規則は、狭い規則を飾りにしてしまうからです。
デーモンが VPN ゲートウェイ自体ではなく、その背後のマシンで動いている場合、ゲートウェイには転送経路も必要で、対象には独自の許可と戻り経路が必要です。ゲートウェイだけでポートを開けると、接続は受け入れられても、その先へは届きません。
本番で使うのと同じモードと同じ宛先で、クライアントから検証してください。一覧の取得に成功すれば、リスナー、経路、規則がそろって証明され、タイムアウトは経路を指し、拒否はリスナーを指します。
ufw allow in on tun0 from 10.44.0.0/24 to 10.44.0.1 port 873 proto tcp
ss -ltnp | grep 873