FTPパッシブモードでは、1つのポートだけではなくポート範囲が必要なのはなぜですか?


34

すべてのFTPサーバーで、すべての着信データチャネル接続に1つのデータポートのみを使用するのではなく、パッシブモードのデータチャネルにポート範囲を使用する必要がある理由を理解するのに苦労しています。

FTPサーバーは、ポート21で多数の同時接続クライアントを処理します。Webサーバーは、ポート80で多数の同時接続クライアントを処理します。

次に、FTPサーバーがすべての着信パッシブデータ接続に1つのデータチャネルポートのみを使用できないのはなぜですか(さらに、ポート1024など、そのポートで同時に接続された多くのクライアントを処理できるのですか)。

それともできますか?

これが不可能または推奨されない理由の技術的な詳細を知りたいと思っています。


1
これはあなたに興味がある可能性がありますw3.org/Protocols/rfc959
マット・シモンズ

1
ありがとう、マット。はい、rfc 959のほとんどを読みましたが、それについて私が疑問に思っていることに対する明確な答えを得ることができなかったと感じています。Karol Piczakからの答えは、私が探していた種類の情報です。
カート

回答:


20

データポートを1つのポートのみにロックする場合の複数の同時FTPセッションの問題に関する明確で技術的な説明は、私が最も深く知りたいと思っていることです。いつ機能するか、いつ機能しないか、なぜ推奨されないかなど。

私はそれをテストしていないので、これはワイルドな推測になります。自分で試してみて、見逃したかもしれない他の問題があるかどうかを確認する必要があります。

パッシブポートの範囲を1つのポートに制限できると思います。実際、この質問は、実際には小さなポート範囲が使用されていることがわかります。理論的には、複数の同時接続をサポートするには、ローカルIP、ローカルポート、リモートIP、リモートポートの4つの値のみが必要です。これは、異なる接続を識別する方法です。

サーバー上のポートを単一の値にロックダウンした場合、残っている変数はクライアントが使用するポートのみです。クライアントが選択できる無料の一時ポートの十分なプールを持っている限り、これは問題ではありません。重いNATを実行していない限り、これについて心配する必要はありません。さて、これは純粋に理論的なものであることに注意してください:サーバーで複数のポートを使用した場合、有効にすることで仮想の同時接続数を増やすことができますnumber of ports in rangeクライアント側の1ポートあたりの接続。しかし、これをサポートするFTPクライアントの実装があるとは思えないので、実際には起こりません(あまり意味をなさないため)。さらに、クライアントがこのように一時ポートを共有する必要があり、新しいポートを開くことができない場合、対処する必要のある重大な問題がはるかに多くなります。したがって、この観点から、単一のポートを使用して完全に安全である必要があります。

単一のポートでは不十分な理由を考えてみましょう。

まず最初に、本当にバグの多いFTPサーバーの実装が、クライアントのデータ転送を識別する方法としてローカルポート番号のみを使用する状況を考え出すことができました。繰り返しますが、まともなFTPdがそれを行うとは思いません。

実際の問題はい、上記をすべて主要な余談として無視できます ;-))は、パッシブポートの範囲が非特権範囲にあることです。

つまり、選択したポート番号は それ自体予約されておらず、実際には、FTPサーバーが実行する前に(root権限を必要としない)任意のユーザープロセスがそれを取得できます。選択できるポートのプールが豊富な場合は、ランダムな空きポートを取得するだけです。使用するのが1つだけで、すでに使用している場合は、転送を適切に処理できません。

答えが少し推測しすぎているように思える場合は、申し訳ありません。正直に言うと、単一のポート使用しない理由を見つけるために一生懸命努力しましたが、最後のビットを除けば、それに対する確固たる証拠は考えられませんでした。それにもかかわらず、あなたが提起する興味深い挑戦的な質問。


ところで、ここで見逃した点や矛盾についてコメントしてください。私自身でさえ、私はまるで簡単な答えを探しているように感じます-はい、できます。;-)
カロルJ.ピクザック

どうもありがとう、カロル!これは、私が探していた種類の情報のスポットです(実際に他のどこにも見つかりませんでした)。この質問をした主な理由は、Windows AzureでFTPサーバーをセットアップし、パッシブモードを1ポートのみにロックしても安全かどうかを知りたいということです(Azureはエンドポイントを制限するため)。私はそれを試してみましたが、うまくいきました。あなたの情報があれば、私も安全だと思います。ただし、残っている唯一の問題は、Azureロードバランサーがファイル転送中に1分後に制御接続をドロップすることです(アイドル状態のため)。そのため、キープアライブを使用してTCPトンネルを修正しています。
カート

1
本当の理由は、データチャネルプロトコルに識別情報がないことだと思います。サーバーは、ポート番号に基づいて、どのファイルがどのクライアントから転送されているかのみを認識します。
Monstieur

4

FTPは2つの個別の接続に依存しています。1つは制御またはコマンドストリーム用で、もう1つはデータファイルとディレクトリリストなどのその他の情報を渡すためのものです。制御ストリームは、従来のTCP接続で伝送されます。クライアントは非特権の高いポートにバインドし、ポート21にバインドされているFTPサーバーに接続要求を送信します。この接続はコマンドを渡すために使用されます。

ポートモードまたはアクティブモードでは、クライアントはサーバーにリッスンするセカンダリ、非特権ポートを指示します。サーバーは、ポート20からクライアントが指定した非特権ポートへのデータ接続を開始します。

クライアントがWebブラウザの場合、新しいメカニズムであるパッシブモードがデフォルトです。サーバーは、ポート20に縛られるのではなく、データ転送に使用する上位ポートをクライアントに伝えます。その後、データはクライアントとサーバーの両方の間で非特権ポートを介して送信されます。

詳細については、以下を参照してください。

http://tools.ietf.org/html/rfc959

編集

サーバーを特定の単一ポートにロックすることに関して、一部のサーバーでは可能性があります。たとえば、vsftpdには、次の構成オプションがあります。

   pasv_max_port
          The maximum port to allocate for PASV style data connections. Can be used to specify a narrow port range to assist firewalling.

          Default: 0 (use any port)

   pasv_min_port
          The minimum port to allocate for PASV style data connections. Can be used to specify a narrow port range to assist firewalling.

          Default: 0 (use any port)

両方のポートを同じに設定すると(例:pasv_max_port = 12345、pasv_min_port = 12345)、目的のものを取得できる場合があります。これにより、サーバーがサポートする同時FTPセッションの数が制限されると思われます。確認するためにテストしてください。


1
お返事をありがとうございます。しかし、私が知りたいのは、パッシブモードでは、FTPサーバーがすべてのクライアントにデータポートに同じポート(たとえばポート1024)を使用するように指示できないのはなぜですか?指定されたポート範囲?FTPサーバーのポート範囲構成で単一のデータポートのみを指定することが不可能または推奨されない理由の技術的な理由(ある場合)は何ですか?FTPサーバーは、1つだけのデータチャネルポート上でも、多数/多数の同時接続を処理できると思いますか?
クルト

1
FTPは悪魔であり、最終的に死ぬ必要があるからです。:D

1
サーバーを特定の単一ポートにロックすることに関して編集していただきありがとうございます。私は実際にその方法について考えました(そしてこれが私が達成したいことです)が、サーバーがサポートできる同時FTPセッションの数を制限する理由がよくわかりません。この場合、サーバーが複数の同時FTPセッションをサポートすることを妨げるものは何ですか?FTPサーバーは明らかにポート21での複数の同時接続をサポートしているので、ポート12345でも、あなたの例から取られているのはなぜですか?これをより深くテストする必要があります。
カート

同時接続の数を制限しない場合があります。サーバーが複数のセッションにわたる接続をどのように追跡するかに大きく依存します。試してみます!
dmourati

データポートを1つのポートにのみロックする場合の複数の同時FTPセッションの問題に関する明確で技術的な説明は、私が最も深く知りたいと思っているためです。それが動作することができたとき、それが推奨されない理由、ときになど、動作しません
クルト・

1

FTPサーバー、使用されるポート番号ではなく、ソースIPのみに基づいて、クライアントのデータポート接続を制御ポート接続に一致させることができます。

これにより、クライアントが2つのサーバー(パッシブモード)に接続するFXP(悪いことではないかもしれません)が壊れ、パッシブサーバーのPORT情報を受信した後、アクティブになるようにPORTコマンドとしてアクティブモードサーバーに渡します。モードサーバーはパッシブモードサーバーに接続します。

多くのサーバーは、クライアントがパッシブモードを要求するまでデータソケットを作成しないと思われます。その場合、2つのクライアントが同時にパッシブモードを要求した場合、作成されるソケットには一意のポート番号が必要になります。

編集:FTPサーバーがこれを行わないもう1つの理由を考えてみてください。サーバーは、同じIPアドレスを持つ複数のユーザーに別々に伝えることができませんでした。


ありがとう。私が理解していないのは、2つ以上のクライアントが同時にパッシブモードを要求した場合に、それらのデータチャネルソケットが(サーバー上の)一意のポートを必要とする理由だと思いますか?私は考えているので、2つ以上のクライアントが明らかにポート21に同時に接続できるので、同時にポート1024(データチャネル用)と言うのはなぜですか?これはばかげた質問かもしれませんが、私の免責事項は、私はすでにあまりにも長い間目を覚ましているということです:)
カート

ソケット自体は一意である必要があります。ポートでリッスンする1つのソケットを作成し、その1つのソケットから必要な数の接続を受け入れるか、異なるポートでユーザーごとに1つのソケットを作成し、各ソケットから1つの接続を受け入れることができます。ユーザーごとに1つのソケットで動作するようにサーバーを設計した場合、本質的にすべてを書き直して逆に変更し、最終的に共有ホストまたは同じIPアドレスの背後にいる人々はデータ接続を区別する方法がないため、同時に接続します。
DerfK

ありがとう。私はこのテーマに関して受け取ったすべての回答に感謝し、今ではかなり良いハンドルを握り始めていると思います。
カート

0

ポート21または80(すべての既知のポートと同様)には、クライアントが必要なものを伝えるために使用する設定プロトコルがあります。これにより、サーバーは何のために接続しているかを認識します。データ接続ポートには、プロトコルはありません。サーバーが知っているのは、その接続に関して唯一の唯一のものである-接続先のポート番号だけです。

毎回同じポートに接続する場合、サーバーはどのファイルに接続しているのかを知ることができません。ポート番号は、制御接続上の転送要求とデータ接続間のリンクとして機能します。

2つのクライアントが同時に転送を要求する場合、サーバーが1つのポートで接続を受け入れると、サーバーは転送するファイルを認識できません。もちろん、サーバーは決定にクライアントIPを使用できます(実際、多くのFTPサーバーは、セキュリティのために、クライアントIPが制御接続で使用されるIPと一致することを検証します)。

しかし、これは次の場合には機能しません。

  • 同じマシンからの複数の接続(ほとんどのFTPクライアントは並列転送/キューをサポートします)。
  • 同じ(企業)ネットワーク内の異なるマシンからの接続。これらは同じ外部IPを持っています。

FTPデータ接続の再利用も参照してください。


-1

ここでこれが言及されていないので、私はそれを投げます。範囲。これは簡単には判別できませんでした。あいまいさによるセキュリティ。


1
この申し立てについて何かお問い合わせはありますか?
マーティンプリクリル

-2

制御ポートとデータポートについては既にご存知のように聞こえますので、すぐに説明します。制御ポートは、Webサイトのポート80と同様に、本来バースト通信です。彼らは多くの異なるリクエストを処理することができます(同時にではなく、完了するのが非常に速いので間近です)。一方、データポートはFTPで魔法が発生する場所です。単一のデータポートに制限すると、一度に1つのデータ転送のみが発生します。大規模なファイル転送を検討してください。単一のデータポートが開いていると、転送が完了するまで他のデータは移動できません。これは、転送中に、2番目のユーザーがftpフォルダーのディレクトリコンテンツを一覧表示することさえできないことを意味します。確実に正常にログインできますが、その動作はデータポートがまったく開かれていない場合と同じになります。これでよければ、単一のポートが最適です。いくつかのftpクライアント(すぐに1つ考えることができます)が、デフォルトでは、ダウンロードのために単一セッション内で複数の接続をセットアップすることに注意してください。したがって、このクライアントでは、単一ポートのシナリオで、1つの大きなファイルと4つの小さなファイルのバッチ転送を検討してください。

クライアントは、最初の大きなファイルの転送を開始します。次に、その転送の進行中に、2番目のファイルが開始されます。サイコロなし。次に、3番目、zilch(専門用語)。最終的に、ログには1つの成功した転送と4つの失敗した転送が表示されます。回避策は、クライアントをセッションごとに1つの接続に制限することです。他の誰かが1つの転送が完了し、別の転送がまだ開始されていない非常に短い時間でドアに足を踏み入れないと仮定します。 )


2
何?これは完全に間違っています。TCPソケットは、4タプル(ソースIP、ソースポート、宛先ポート、宛先IP)によって定義されます。多くのTCPソケットを作成して、同じ宛先ポートから同時に提供できます:IPマッピング。FTPサーバープロセスは、2つのデータを同時に任意の数のネットワーククライアントから提供できます。
EEAA
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.