1. 概要

ファイル転送プロトコル– FTP –は、インターネット自体とほぼ同じくらい古いものです。 これは、現在のTCP / IPの前でさえ、70年代初頭に最初に公開されました。 1985年に公開された現在の標準は、 RFC959です。 FTPは、OSIモデルのアプリケーション層プロトコルです。 2021年に、ほとんどのWebブラウザはこのプロトコルのネイティブサポートを終了し始めました。 ただし、以前および現在でも、多くのWebサイトに埋め込まれているFTPURLを簡単に見つけることができます。 このチュートリアルでは、FTPの動作方法について説明し、アクティブ動作モードとパッシブ動作モードの違いについて詳しく説明します。

2. FTP

FTPは、マルチベンダー分散環境への簡単なファイル転送とリモートファイル管理を可能にするように設計されました。 当時、互換性のない独自のハードウェアおよびソフトウェアアーキテクチャがまだたくさんありました。 その単純さのために、それは世界中の通常のデータセンター操作における非支援バッチファイル転送ルーチンの標準の1つです。 したがって、FTPには、さまざまなファイルエンコーディング(バイナリ、 ASCII 、および EBCDIC ファイル)、データ転送モード(ストリーム、ブロック、および圧縮-非常に制限された)、および動作モードを使用するオプションがあります。 (アクティブ、およびパッシブ)。 これにより、クライアントでさえ、2つの異なるサーバー間の転送をコマンドしたり、サーバー上で特定のルーチンを実行したりすることができます。 オプションは、本格的なFTPクライアントでのみ使用できます。 標準のFTPURLの構文は次のとおりです。

ftp://[user[:password]@]<host><.domain>/<path>/<file>

FTPは複数の接続を使用して動作します。

  • 制御接続:デフォルトでは、TCPポート21を使用して最初に開かれ、クライアントはサーバーにコマンドを送信します
  • データ接続:ディレクトリリストを含む各データ転送は、独自のデータ接続を開きます。データ接続は、ストリームの終了後に閉じられます。

したがって、アクティブモードとパッシブモードの主な違いは、データ接続に対して、どちら側が開くか、何がリッスンするかです。 アクティブモードでは、サーバーはデータ接続をアクティブに開き(デフォルトでは、ソースとしてTCPポート20を使用します)、クライアントにコールバックします。 対照的に、パッシブモードでは、すべての接続がクライアントからサーバーに開かれます。

3. アクティブvs。 パッシブモードの接続フロー

パッシブモードは後で仕様に追加されました。インターネットホスト管理者がネットワークファイアウォール(ファイアウォールの紹介チュートリアルを確認)と適切なネットワークセグメンテーションを使用する必要性を理解したのとほぼ同時に。 当時、アクティブモード操作のコールバック接続を許可するようにファイアウォールを構成するのは非常に難しい作業でした。 サーバーがクライアントのコールバックリスニングポートに実際に到達できるようにするには、ポートトリガーを使用した完全なパケットインスペクションが必要です。これは、有効なトラフィックが別のポートで検出された後に1つのポートをアクティブにするファイアウォールルールです。 パッシブモードはこれを簡素化し、クライアントのファイアウォールがコントロール接続内でネゴシエートされたものによってトリガーされるインバウンドポートを開く必要はありません。 したがって、パッシブモードでは、サーバー側のファイアウォールのみがトラフィックを完全に検査して、データ転送に必要なポートを開く必要があります。 ちなみに、ファイル転送にHTTPまたはHTTPSを使用する利点の1つは、次のとおりです。複数のデータ接続やファイアウォールの詳細な検査のトリックは必要ありません。 下のグラフは、2つのFTP動作モードを示しています。 ほとんどのクライアントのデフォルト(Webブラウザは注目すべき例外です)は、デフォルトでアクティブモードを使用することです。    

4. 何を(またはどのように)使用する必要がありますか?

ええと、可能であれば、FTPは一切避けてください。 なんで? まず、 FTPトラフィックはクリアテキストです。つまり、ユーザーとパスワード、およびデータ転送自体は、プライバシーを気にすることなく送信されます。 データフローの中間にいる人は誰でも、ファイルだけでなく、新しいデータ転送を開始するために必要なクレデンシャルもキャプチャできます。 データとクレデンシャルのプライバシーを確保するには、 SFTP 、SCP、HTTPSなどの暗号化対応の対応物を試す必要があります。 または、少なくとも、VPNまたはSSHトンネルを介して使用します。 一括転送の場合、別のサウンドオプションは、SSH、VPN、またはSSHFSを介したRSYNCです。 小さなファイルが多すぎる場合、転送設計ごとにFTPの1つのデータ接続により、RSYNCが回避する余分なオーバーヘッドが発生します。 それとは別に、接続が失われた場合、エンドポイントは通常、部分的に転送されたファイルを保持します。 したがって、ファイル転送が正常に完了したかどうかを確認するのは私たちの責任です。 これを行うために一般的に使用される方法は次のとおりです。

  • 証跡、ヘッダー、または分離されたメタデータファイルを含むファイルの送信
  • 結果のファイルサイズを確認する
  • ファイルのハッシュ署名をチェックする
  • ファイルを一時フォルダまたはファイル名に転送し、意図的に正常に転送された場合にのみ名前を変更する

ファイルのハッシュ署名を追加してチェックする簡単な方法の1つは、ファイルをZIPファイルとして圧縮するか、推奨される圧縮スキームを使用することです(もちろん、ファイルチェック機能がある場合)。 ただし、とにかく、 FTPを使用する必要がある場合、パッシブモードは通常、ファイアウォールを通過する方が簡単であり、デフォルトでを使用する必要があります。 それでも、いずれの場合も、ファイアウォールは、正しいフィルタリングモードを適用するために、FTP接続を探していることを認識している必要があります。 これは、制御接続とデータ接続に標準のTCPポートを使用しない場合に特に当てはまります。

5. 結論

このチュートリアルでは、FTPのアクティブおよびパッシブ動作モードを示しました。 FTPはゆっくりとレガシーインターネットプロトコルのリストに移行していますが、まだ非常に使用されていますその動作モードを理解すると、ほとんどの状況で最適なデータ転送アーキテクチャを正しく選択するのに役立ちます。 FTPの有用性は、レガシーコンピューターとオペレーティングシステムがある場合により明確になります。 異種環境で、またはデフォルトのコマンドラインクライアントのスクリプトを簡単に作成できるため、サーバー間のデータ移動を自動化したい場合に優れています。