サーバとクライアント双方で
コネクションを確立する「アクティブFTP」
FTPでは制御用コネクションが確立すると、クライアントからPORTコマンドとRETRコマンドがFTPサーバに送信される(図1)。PORTコマンドとは、クライアントが自分のIPアドレスとデータコネクション用のポート番号を通知するためのコマンドだ。サーバはPORTコマンドに対して「220」の応答コードを返信し、IPアドレスとポート番号を受け付けたことを知らせる。次に、クライアントはRETRコマンドを使用して、ダウンロードしたいファイル名をサーバに通知する。サーバは、RETRコマンドに対して「150」の応答コードを返し、クライアントがデータコネクションの確立を求めてきたら、サーバはさきほどPORTコマンドで通知されたクライアントのポート番号に対してコネクションを確立する。
|
図1● FTPではファイル転送を開始する前に、転送するクライアントのIPアドレスや通信に使用するポート番号などを通知し合う |
|
こうして無事にTCPの3ウェイハンドシェイクが終わり、データコネクションが確立できれば、データコネクションを通してファイルデータの転送が開始することになる。
このように、制御用コネクションはクライアントのほうから確立し、データコネクションはサーバのほうから確立する方式を「アクティブFTP」という。
クライアントから両コネクションを確立する
「パッシブFTP」
アクティブFTPで注意すべきは、ファイアウォールが設定されているネットワークの場合だ。例えば、内部ネットワークからインターネットへのコネクション確立は許可していても、インターネットから内部ネットワークへのコネクションの確立を許可していない場合は、データ転送ができなくなってしまう。
これを防ぐには、2つの手法がある。1つは、サーバのポート番号20からのコネクション確立を許可するようにファイアウォールを設定するという方法。そして、もう1つがサーバからコネクションを開始しない「パッシブFTP」を利用するという方法だ。
パッシブFTPは、制御用コネクションおよびデータコネクションの両方をクライアントから確立するという方式である。まずクライアントがPORTコマンドの代わりにPASVコマンドを送信し、PASVコマンドを受け取ったサーバはPORTコマンドを送信してデータコネクション用のポート番号を通知する。このときのポート番号はランダムポートから選ばれる。そして、クライアントはPORTで通知されたデータコネクション用のポートに対してコネクションを確立し、ファイル転送へと移る。
パッシブFTPでは内部ネットワークからインターネットへのコネクションを確立するので、ファイアウォールのフィルタに引っかかることがない。さらに、ランダムポートを使用することでセキュリティも確保できるというメリットもある。
このほかのFTPの注意事項として、PORTコマンドでIPアドレスとポート番号を通知する際に、NATやIPマスカレードがIPヘッダ、TCPヘッダを変換してしまうと、FTPのPORTコマンドで通知するIPアドレスやポート番号が変換され、通信できなくなる点がある。現在、ほとんどのNATではFTP通信を考慮した変換を行うので、さほど気にすることはないが、念頭に置いておくとよいだろう。
(C) Office N-Study http://www.n-study.com/
|