FTP over SSHの設定方法 (vsFTPd,PortForwarder)

FTP over SSHでセキュアにファイル転送

前提バージョン
OSRedHat Linux 9
FTPサーバvsFTPd 1.1.3
SSHポートフォワーダPortForwarder 1.1.1 (Windowsバイナリ版)


概念

こんな具合です.

|FTPクライアント| →→ |ルータ(NAT)| →→ Internet →→ |SSHサーバ| →→ |FTPサーバ|

このポイントは,以下の2つ.

  1. FTPクライアントはルータの内側にあり,Internetからは見えない
  2. FTPサーバはSSHサーバの内側にあり,Internetからは見えない

まず1.により,FTPサーバからFTPクライアントへデータコネクションを張ることが不可能.
→PORTモードではなくPASVモードを使う必要がある.

そして2.により,FTPクライアントからFTPサーバへ直接コネクションを張ることができない.
→全ての通信を,SSHサーバを介したSSHポートフォワードで行う必要がある.

特に2が厄介で,これがあるが故に, FTPサーバのPASV応答を操作してデータコネクションをSSHに乗せる苦労をする必要があった.


1.FTPサーバの設定

PASV応答を操作するために,vsFTPdの設定を変更する.

/etc/vsftpd/vsftpd.conf に追加

pasv_address=127.0.0.1
pasv_enable=YES
pasv_min_port=21000
pasv_max_port=21009

記述に勝手に空白を挿入すると,駄目らしい. 空白を入れないように...

設定内容の解説

・pasv_enable=YES
 PASVモードの使用許可.デフォルトでYESなので,実はあえて指定する必要はない.

・pasv_address=127.0.0.1
 これにより,クライアントからのPASVコマンド (「データコネクションはどこに接続すれば良い?」との問い合わせ)に対して, 「127.0.0.1に接続しなさい」という応答を返すようになる.

しかし127.0.0.1はlocalhostなので,クライアントはクライアント自身に接続しようとする...一見意味不明に思えるが, 実はクライアントで実施するポートフォワードによって,うまい具合にFTPサーバに転送されてくることになる.

・pasv_min_port=21000, pasv_max_port=21009
 PASVコマンドに対して返す接続先ポート番号を,21000〜21009の範囲に制限する (範囲内からランダムに1個が選択される). この制限をかけておかないと, クライアントで実施するポートフォワードの設定ができない.範囲が広すぎて.

ポートの個数は同時接続数を考慮して決めれば良いと思うが,とりあえず適当に10個とした.

他のFTPサーバの場合は...

同じような設定をすれば良いのだが,

  • PASVモードに対応している
  • クライアントからのPASVコマンドに対して返すIPアドレス+ポート番号を,カスタマイズできる

という要件を満たしているFTPサーバでないと,そもそも無理だということになる.


2.クライアント側の設定

(1) PortForwarderの設定

 PortForwarderの入手については,「POP over SSHでセキュアにメール受信」を参照.

pf.conf

Host KamoLand
     HostName kamoland.com  ← SSHサーバのホスト名
     LocalForward 21 kamoland.com:21  ← この行以降は,FTPサーバのホスト名
     LocalForward 21000 kamoland.com:21000
     LocalForward 21001 kamoland.com:21001
     LocalForward 21002 kamoland.com:21002
     LocalForward 21003 kamoland.com:21003
     LocalForward 21004 kamoland.com:21004
     LocalForward 21005 kamoland.com:21005
     LocalForward 21006 kamoland.com:21006
     LocalForward 21007 kamoland.com:21007
     LocalForward 21008 kamoland.com:21008
     LocalForward 21009 kamoland.com:21009

今回は,SSHサーバとFTPサーバをたまたま同じマシンにしたので,HostName行もLocalForward行もどちらともkamoland.com を記述しているが, それぞれ別のマシンになる場合は,

  • HostName行 - SSHサーバのホスト名/IPアドレス
  • LocalForward行 - FTPサーバのホスト名/IPアドレス

を記述する.

実施するポートフォワードの内容を表にまとめると,

localhost(転送元)kamoland.com(転送先)備考
2121FTPコントロールコネクション
21000〜2100921000〜21009FTPデータコネクション

となる.

PortForwader以外のフォワード用ソフト(TTSSH等)を使う場合も, 同様にポートフォワードすれば良いはず.

(2) FTPクライアント設定

  • 接続先ホスト = localhost
  • 接続先ポート番号 = 21
  • 接続モード = パッシブ(PASV)モード

とする.

FFFTPの場合の設定画面イメージを示す.

設定イメージ1

設定イメージ2

他のFTPクライアントでも,話は同じ.とは言え, PASVモードに対応していなければ話にならないが.


3.使用

まずPortFowarderを起動して,ポートフォワードを有効にしておいてから, FTPを行えばOK.


© 2024 KMIソフトウェア