FTP ( File Transfer Protocol ) には次の 2 つの転送モードがある。
1. ポートモード ( port mode )
2. パッシブモード ( passive mode )
モードによって動作が異なるため、
FTP によるファイル転送が失敗する原因となることが多い。
動作の異なる部分は、データのやり取りの部分。
クライアントから FTP サーバにログインする時や
クライアントで mget, mput, ls などのコマンドを入力した際の通信は
どちらのモードも共通して以下の通り。
クライアント:[ 1025-65535 ] --> FTP サーバ:21
クライアントは 1025 〜 65535 の任意のポートを使用し、
FTP サーバのポート 21 にアクセスする。
mget, mput, ls などのコマンドを入力した場合に、
実際にファイルなどのデータを FTP サーバからクライアントに転送する通信は、
データ専用の接続して別のセッションとなる。
コマンドを入力したセッションの返りではなく、別のセッションである点に注意が必要。
問題なのは、モードによってこのデータセッションの通信の方向が逆になる点である。
1. ポートモード ( port mode )
サーバ:20 --> クライアント:[ 1025-65535 ]
2. パッシブモード ( passive mode )
クライアント:[ 1025-65535 ] --> FTP サーバ:[ 1025-65535 ]
つまり、ポートモードで通信するためには、サーバ:20 から クライアント:[ 1025-65535 ] への
アクセスが許可されていなければならないということである。
パッシブモードの場合は、クライアント:[ 1025-65535 ] から FTP サーバ:[ 1025-65535 ] への
アクセスが許可されていなければならない。
これは、FTP サーバとクライアントの間にファイアウォールが設置されていたり、
サーバ側あるいはクライアント側でホストベースのパケットフィルタリングなどを
実施している場合には、アクセスを許可するための設定を考慮しておく必要がある。
Linux の iptables でパッシブ FTP を許可する ( passive )