FTPのアクティブモードとパッシブモードは何が違うのか

更新日:2019/08/12

初めてWebサーバーにFTPでデータを送信するとき、「アクティブ」はつながらないから「パッシブモード」を指定するように言われました。

そして今思いました。
アクティブ」とか「パッシブモード」とか、何なのさ?

ということで調査開始。

 

アクティブやパッシブといえば潜水艦

私がアクティブやパッシブと聞いて、最初に思い浮かんだのが潜水艦。

音を聞いて周囲の状況を確認するのに使用するソナー。
そのソナーにはアクティブとパッシブに分かれるそうです。

アクティブソナー

アクティブは、自分から音を出して、その反射で周囲を探る方式。
能動的とか積極的と言えます。

パッシブは、相手の音を拾い集める方式。
こちらは受動的、相手の出方を待つ方式ですね。

FTPのアクティブモードとパッシブモードも、同じことがいえます。

 

どちらからデータコネクションを確立するか

FTPのアクティブモードとパッシブモードの違いは、サーバーとクライアントのどちらからデータコネクションを確立するかということです。

まず最初に、クライアントからサーバーにFTP接続要求をおこない、コントロールコネクションを確立します。

21番ポートに制御用のコントロールコネクションを張る

そして、データ一件ごとに、データコネクションを張ってデータの送受信をおこないます。

アクティブモードとパッシブモードは、このデータコネクションの張り方が異なります。
その違いを簡単に解説します。

なおデータコネクションやコントロールコネクションについては、こちらも参照してみてください。
参考FTPとSFTPのポート番号と簡単な説明

アクティブモードはサーバーから接続

サーバーからデータコネクションを確立(アクティブモード)

アクティブモードは、データコネクションを張る際、クライアントが自分のIPアドレスとポート番号をサーバーに伝え、接続を要求します。

要求されたサーバーは、クライアントに向けて、接続を試みます。

クライアント側

データ転送したいので、XXXXポートに接続してくださーい!
ちなみにこちらのIPアドレスはXXX.XX.XX.XXです。

サーバー側

おーけー!
そのポートと、こちらの20番ポートを繋げるよー

ちなみに、サーバーのポートが20番固定なのも、アクティブモードの特徴です。

パッシブモードはクライアントから接続

クライアントからデータコネクションを確立(パッシブモード)

パッシブモードは、データコネクションを張る際、サーバーがIPアドレスと接続ポート番号をクライアントに伝え、接続を要求します。

要求されたクライアントは、サーバーに向けて、接続を試みます。

クライアント側

パッシブモードで
データ転送したいでーす!

サーバー側

おーけー!
XXXXポートに接続してください。
ちなみにこちらのIPアドレスはXXX.XX.XX.XXです。

クライアント側

はーい、了解しましたー!
接続しまーす

パッシブモードはアクティブモードと異なり、サーバー側のポートが、接続時に決定されるのが特徴です。

 

FTPにはなぜ二つのモードが存在するのか

FTPにはなぜ二つのモードが存在するのでしょうか。
実はアクティブモードは、データコネクションを張るときにある問題がおこる可能性があります。

ファイアーウォールが通信を遮断する

場合によっては、サーバーからの接続要求をファイアーウォールが受け付けないことがあります。

インターネットを通じて通信をおこなうときに問題になるのが、外部からの不正なアクセスです。

不正なアクセスはポートが入口となります。
そのため、使わないポートはアクセスを遮断しておくのが、基本的なセキュリティです。
そして遮断を担当しているのが、ファイアーウォールです。

ファイアーウォールから外に出るのは簡単・入るのは難しい

多くのコンピュータは、ファイアーウォールの初期設定がサーバーからの接続要求を遮断するようになっています。
そのため、アクティブモードでFTPを利用できない可能性が高いのです。

逆に、内側からファイアーウォールをこえて外に出るのは簡単なので、パッシブモードならFTPを利用できる可能性が高いのです。

プライベートIPとグローバルIPの問題

もう一つの問題として、グローバルIPとプライベート(ローカル)IPの問題もあります。

グローバルIPは、ルーターの外から見たIPアドレス。
プライベートIPは、ルーター内の個々の機器のIPアドレスです。

プライベートIPとグローバルIP

インターネットを介してFTP転送を行う場合、FTPサーバーはグローバルIPしか見えません。
プライベートIPに直接データを送ることができないのです。

そのためFTPサーバーには、接続先IPアドレスとしてグローバルIPを伝える必要があります。
しかしクライアントが把握しているのは、プライベートIPです。

もう一つの問題が、接続が完了していない状態で、サーバーから送られてきたデータを、ルーターはどのプライベート機器に送ったらいいのか判断できない点です。

現在のルーターの多くは、FTPコマンドを解析して、どちらの問題もうまく対応してくれるものが多いようですが、それ以前は一般ユーザーでは解決できない問題でした。

しかしパッシブモードで、クライアントからサーバーに接続することで、この問題を解決できるのです。

サーバー側でも同じ問題がある

ここまでFTPクライアント側からみた問題点を挙げましたが、サーバー側もファイアーウォールやIP変換の問題が同じようにあります。

クライアントがパッシブモードで接続するには、サーバーの管理者がセキュリティとの兼ね合いに悩みながら、うまく設定する必要があるのです。

その反面、20と21番だけポートを開けておけばいいアクティブモードの方が、サーバー管理者としては楽といえますね。

 

潜水艦は関係なかった

潜水艦のソナーとFTPは似ていると書きましたが、全く似ていませんでした…

適当なこと書きました。
すみません_(._.)_

更新日:2019/08/12

書いた人(管理人):けーちゃん

スポンサーリンク

記事の内容について

null

こんにちはけーちゃんです。
説明するのって難しいですね。

「なんか言ってることおかしくない?」
たぶん、こんなご意見あると思います。

裏付けを取りながら記事を作成していますが、僕の勘違いだったり、そもそも情報源の内容が間違えていたりで、正確でないことが多いと思います。
そんなときは、ご意見もらえたら嬉しいです。

掲載コードについては事前に動作確認をしていますが、貼り付け後に体裁を整えるなどをした結果動作しないものになっていることがあります。
生暖かい視線でスルーするか、ご指摘ください。

ご意見、ご指摘はこちら。
https://note.affi-sapo-sv.com/info.php

 

このサイトは、リンクフリーです。大歓迎です。