Skip to content

非公式本サイトは非公式の日本語ドキュメントであり、Cloudflare 公式サイトではありません。最新情報はdevelopers.cloudflare.comをご確認ください。

FTP

最終更新 Markdown で表示Agent セットアップ

FTP 向けに Spectrum を有効にするのは、プロトコルの実装上、単純ではありません。このガイドでは FTP の仕組みを概観し、どのような条件で FTP サービスに Spectrum を有効にできるかを説明します。

FTP の動作

FTP は 2 つのソケットを使います。一方はコマンド送信用、もう一方は実際のデータ転送用です。制御ソケットはユーザーのログインとコマンド送信を担当し、データソケットではディレクトリ一覧とファイルが転送されます。

クライアントとサーバーがデータソケットを確立する方法は、アクティブとパッシブの 2 つです。アクティブモードでは、サーバーがクライアントの指定したポートへ 折り返し 接続します。クライアントが NAT の内側にいると問題が起きることがあります。代替はパッシブモードで、サーバーが追加のポートを開き、クライアントがそのポートへ接続します。アクティブ FTP とパッシブ FTP の概要は Active FTP vs. Passive FTP, a Definitive Explanation を参照してください。

パッシブモードでは、クライアントが接続すべきポートを FTP サーバーが伝えます。これは制御ソケット上の PASV コマンドで行われます。デフォルトでは、FTP サーバーは自身が待ち受けている IP アドレスを返します。公開 IP 上で直接動いているサーバーでは問題ありませんが、サーバーが NAT、ファイアウォール、Cloudflare Spectrum の内側にあると問題になります。

一方、より新しい FTP サーバーソフトウェアは FTP 拡張 をサポートし、クライアントが接続すべき IP アドレスを省略する EPSV コマンドを導入しています。代わりに、クライアントは制御プレーンと同じ IP に接続します。

動作するものとしないもの

Spectrum が保護できるのは、パッシブモードのみ で FTP トラフィックを提供するサーバーです。アクティブモードはサポートしません。オリジンサーバーから見ると、実際のクライアント IP ではなく Spectrum の IP がクライアントになるためです。クライアントが自身の IP で PORT コマンドを発行すると、2 つのアドレスが一致しないため FTP サーバーは拒否します。

パッシブモードと EPSV の組み合わせは、オリジン側の設定なしでそのまま動作します。ただし、クライアント側も EPSV をサポートしている必要があります。従来の PASV によるパッシブモードは、オリジン側の最小限の設定で利用できます(後述の「Spectrum で FTP サーバーを保護する」を参照)。

Spectrum で FTP サーバーを保護する

Spectrum で FTP サーバーを保護するには、オリジンを指す Spectrum アプリケーション一式を作成し、FTP サーバー側でも設定します。

制御ポートを保護する

制御プレーンはデフォルトでポート 21 で動き、この部分の FTP サーバーを保護するために特別な設定は不要です。次の例では、198.51.100.1 をオリジンサーバーの IP に置き換えてください。

IP アドレスとポート 21 を設定したアプリケーション追加ダイアログ

この設定は、着信接続をオリジンへプロキシします。ただし、クライアントが PASV コマンドを発行すると、データ接続先として実際のオリジンの IP が返されます。これではオリジンの IP がクライアントに露出し、Spectrum の後ろに隠すことができません。防止手順は以降のセクションにあります。

データポートを保護する

ほとんどの FTP サーバーでは、データ接続を開くポート範囲を設定できます。サーバー上の他のポートを誤って公開しないよう、ポート範囲を指定することをおすすめします。範囲内の各ポートに対して、そのポートへ対応付ける Spectrum アプリケーションを作成します。

加えて、クライアントが PASV コマンドを発行したときに正しい IP を返すよう、FTP サーバーを設定する必要があります。この IP は Spectrum アプリの IP と一致させてください。

一部の FTP サーバーはホスト名の動的解決もサポートします。その場合は、IP ではなく Spectrum アプリの URL を使うことをおすすめします。

vsftpd の設定例です。

pasv_min_port=20000
pasv_max_port=20020

pasv_enable=YES
pasv_address=ftp.example.com
pasv_addr_resolve=YES
pasv_promiscuous=YES

Spectrum の FTPS(ProFTPD)手順

Spectrum の TCP で FTPS(特に ProFTPD)をプロキシして保護する場合は、次の設定例をおすすめします。

  • 制御ポート: ポート 21
  • データポート: ポート範囲 50000-50500

ProFTPD サーバー側では、次の設定例を使います。

  • MasqueradeAddress: www.example.com
  • AllowForeignAddress: すべての IP を許可する on も使えますが、Cloudflare の IP だけを許可することをおすすめします。
  • PassivePorts: 50000-50500

詳細は ProFTPD のドキュメント を参照してください。

SFTP

FTP や FTPS と異なり、SFTP 向けに Spectrum を有効にする追加設定は不要です。SSH 用の Spectrum アプリケーションを設定するときは、ポート 22 と TCP を選びます。

Microsoft Windows IIS FTP

静的なデータポート範囲と、Spectrum アプリケーションに合わせた外部 IP の設定は、Microsoft Windows IIS のドキュメント を参照してください。

加えて IIS では、FTP の制御接続とデータ接続の送信元 IP が同じである必要があります。ただし Spectrum を使うと、この要件を満たせないことがあります。両方の接続が別々のサーバーで終端し、それぞれ固有の egress IP を持つことが多いためです。正しく動作させるには、dataChannelSecurity/matchClientAddressForPasv = false も設定してください。詳細は Microsoft Windows IIS FTP 公式ガイド を参照してください。

役に立ちましたか?