FTPフォワーディング
FTPフォワーディングは一般的なポートフォワーディング機構の拡張です。
FTPコントロールチャネルは一般的なポートフォワーディングを利用して
セキュアにできます。しかし、FTPプロトコルはファイル転送のために別の
TCP接続の作成を要求しますが、一般的なポートフォワーディングを
使用した場合にはファイル転送用の接続の方は自動的にはフォワーディング
されないため、すべてのファイルは暗号化されずに転送されてしまいます。
ファイル転送の接続も保護するには、FTPフォワーディングを使用する必要が
あります。 これは一般的なポートフォワーディングとほぼ同様の動作をします
が、
FTPフォワーディングは FTPコントロールチャネルを監視し、要求があったときに
データチャネルのための新しいポートフォワーディングを動的に作成する、
という点が異ります。
TCPポート 21 番は、FTPセッションのためにクライアントがリモートサーバ
と確立する接続のためのポートです。
FTPサーバトラフィックが適切な機構で送り返されることを
保証する手段としてのみ使用されるため、クライアント側に割当られる
TCPポートは毎回同じではありません。
これは、複数のユーザが同じサーバに FTP でファイルを転送する状況に
おいて重要です。
ユーザのマシンがファイアウォールのような NAT デバイスの背後に置かれて
いる場合、サーバに送られるすべてのパケットは同じマシンから来ている
ように見えます。
各クライアントに動的なポート番号を与えると、ファイアウォールは返り
パケットを正しいユーザに送付することができるようになります。
この動的に生成されたポートがいかにしてフォワーディングを行うかを
正確に理解するには、FTPプロトコルのアクティブモード、パッシブモード
という2つの異なるケースを調べる必要があります。
パッシブモードにおけるFTP
パッシブモードでは、FTPクライアントは PASV
コマンドを
サーバに送ります。これは、データチャネルのためにリスナーポートを
開くことによって行われ、リスナーのIPアドレスとポート番号が
返答としてクライアントに送られます。
返答は、227 Entering Passive Mode (10,1,60,99,6,12)
の形式を
持ちます。
SSHクライアントが PASV
コマンドへの返答を見つけると、
リプライにある接続先へローカルポートフォワーディングを生成します。
この後、クライアントは返答の中の IPアドレスとポート番号を
新しく作成されたローカルポートフォワーディング
(これは常にlocalhost
アドレス中にある 127.0.0.1)を指すように
書き換えてから、返答をFTPクライアントへ受渡します。
FTPクライアントは返答に基いて データがSSH接続を経由するような
データチャネルをFTPサーバがオープンしたリスナーに対して開きます。
SSHとFTPのサーバが異なるマシン上にあったとしても、結果的に
SSHサーバからFTPサーバへの区間を除くすべての経路においてデータチャネルは
セキュアです。
ポートフォワーディングはアドレスlocalhost
に対して開かれる
ので、パッシブモードが使われる場合、FTPクライアントはSSHクライアント
と同じマシン上で動作する必要があります。
アクティブモードにおける FTP
アクティブモードでは、FTPクライアントはFTPサーバからFTPクライアントへの
データチャネルのためのローカルポート上のリスナーを生成し、
PORT 10,1,60,99,6,12
のような形式のコマンドでFTPサーバへ
IPアドレスとポート番号を送ってチャネルを要求します。
SSHクライアントはこのコマンドを横取りし、SSHサーバlocalhost
アドレス
から、PORT
コマンドの中にあるアドレスとポートへの
リモートポートフォワーディングを生成します。
ポートフォワーディングの生成後、SSHクライアントは SSHサーバ上に新しく
開いたリモートフォワーディングを指すようにPORT
コマンドの
中のアドレスとポートを書換え、FTPサーバへ送ります。
FTPサーバはPORT
コマンドの中にあるアドレスとポートへ、
SSH接続を経由してデータがフォワードされるデータチャネルを開きます。
SSHクライアントはFTPクライアントによって生成されたオリジナルのリスナー
へ受信データを通過させます。
結果的にSSHクライアントからFTPクライアントへの区間を除くすべての経路に
おいてデータチャネルはセキュアです。
この一連の動作はすべてのデータチャネルに対して自動的に行われます。
ポートフォワーディングは SSHサーバマシン上のアドレス
localhost
に作られるため、アクティブモードが使われる場合、
FTPサーバはSSHサーバと同じマシン上で動作する必要があります。
FTPデータチャネルがエンド間暗号化が必要な場合、FTPサーバとSSHサーバ
は同じホスト上に存在する必要があり、また FTPクライアントと
SSHクライアントも同様に同じホスト上に存在する必要があります。
この場合、アクティブモードとパッシブモードの両方が利用できます。
注意 FTPフォワーディングの代りに、sftp2
あるいは
scp2
(see 「SCP2 の書式」) を使用したセキュアファイル転送を検討ください。
sftp-server2
サブシステムがサーバ上にすでに存在する場合に
FTPフォワーディングよりも要求される接続数が少なくて済みます。
また、sftp2
と scp2
のクライアントは配布物に
含まれています。