FTP
FTPのためにSpectrumを有効にすることは、プロトコルの実装のために簡単ではありません。このガイドでは、FTPの複雑さと、FTPサービスのためにSpectrumを有効にできる状況についての概要を示します。
この機能はエンタープライズプランが必要です。アップグレードを希望される場合は、アカウントチームにお問い合わせください。
FTPは、コマンドを発行するためのソケットと、実際のデータ転送のためのソケットの2つを利用します。制御ソケットはユーザーのログインとコマンドの送信を管理し、データソケットはディレクトリリストやファイルが実際に転送される場所です。
クライアントとサーバーがデータソケットを確立する方法は2つあります:アクティブモードとパッシブモードです。アクティブモードでは、サーバーがクライアントが指定したポートに戻って接続しますが、これによりクライアントがNATの背後にいる場合に問題が発生することがあります。代わりに、パッシブモードでは、サーバーがクライアントが接続するための追加のポートを開きます。アクティブFTPとパッシブFTPの概要については、アクティブFTPとパッシブFTPの決定的な説明 ↗を参照してください。
パッシブモードでは、FTPサーバーはクライアントが接続すべきポートを通知します。これは制御ソケットを介してPASVコマンドで行われます。デフォルトでは、FTPサーバーはリッスンしているIPアドレスで応答します。このシナリオは、パブリックIP上で直接実行されているサーバーには問題ありませんが、サーバーがNAT、ファイアウォール、またはCloudflare Spectrumの背後にある場合には問題を引き起こします。
代わりに、より現代的なFTPサーバーソフトウェアは、クライアントが接続すべきIPアドレスを省略するEPSVコマンドを導入するFTP拡張 ↗をサポートしています。代わりに、クライアントは制御プレーンに接続したのと同じIPに接続します。
Spectrumは、パッシブモードのみでFTPトラフィックを提供するサーバーを保護できます。アクティブモードは、オリジンサーバーがSpectrum IPを実際のクライアントIPではなくクライアントとして認識するため、サポートされていません。クライアントが自分のIPでPORTコマンドを発行すると、FTPサーバーは2つのアドレスが一致しないため拒否します。
EPSVと組み合わせたパッシブモードは、オリジンサイドの設定なしでそのまま動作します。この機能が動作するためには、クライアントもEPSVをサポートしている必要があります。従来のパッシブモードは、最小限のオリジンサイドの設定で可能です(下記、SpectrumでFTPサーバーを保護するを参照)。
Spectrumを設定してFTPサーバーを保護するには、オリジンを指す一連のSpectrumアプリケーションを作成し、FTPサーバーにいくつかの設定を行う必要があります。
制御プレーンはデフォルトでポート21で動作し、このFTPサーバーの部分を保護するために特別なことは必要ありません。以下の例では、198.51.100.1をオリジンサーバーのIPに置き換えてください。

この設定は、オリジンへの受信接続をプロキシします。ただし、クライアントがPASVコマンドを発行すると、データ接続のために実際のオリジンのIPを受け取ります。これは好ましくなく、Spectrumの背後にマスクされるのではなく、オリジンのIPがクライアントに露出します。これを防ぐための手順は、以下のセクションに記載されています。
ほとんどのFTPサーバーは、サーバーがデータ接続を開くために使用するポート範囲の設定を許可します。サーバー上の他のポートを誤って露出させないように、ポート範囲を指定することをお勧めします。範囲内の各ポートに対して、そのポートにマッピングされた対応するSpectrumアプリケーションを作成します。
さらに、FTPサーバーは、クライアントがPASVコマンドを発行したときに正しいIPを公開するように設定する必要があります。このIPはSpectrumアプリのIPと一致する必要があります。
一部のFTPサーバーは、ホスト名の動的解決も許可します。この場合、IPの代わりにSpectrumアプリのURLを使用することをお勧めします。
vsftpd ↗の例設定:
Terminal window pasv_min_port=20000pasv_max_port=20020pasv_enable=YESpasv_address=ftp.example.compasv_addr_resolve=YESpasv_promiscuous=YES
Spectrum TCPを使用してFTPS、特にProFTPDをプロキシおよび保護するには、以下の例設定をお勧めします:
- 制御ポート:ポート21
- データポート:ポート範囲50000-50500
ProFTPDサーバー側では、以下の例設定を使用します:
MasqueradeAddress:www.example.comAllowForeignAddress: すべてのIPを許可するためにonオプションを使用できますが、Cloudflare IP ↗のみを許可することをお勧めします。PassivePorts:50000-50500
詳細については、ProFTPDのドキュメント ↗を参照してください。
FTPやFTPSとは異なり、SFTPのためにSpectrumを有効にするには追加の設定は必要ありません。SSHのためにSpectrumアプリケーションを設定する際は、ポート22とTCPを選択してください。
Microsoft Windows IISのドキュメント ↗を参照して、静的データポート範囲とSpectrumアプリケーションに一致する外部IPを設定してください。
さらに、IISでは、FTP制御接続とデータ接続のソースIPが同じである必要があります。ただし、Spectrumを使用する場合、この要件は満たされない可能性があります。なぜなら、両方の接続が異なるサーバーで終了し、それぞれ独自のエグレスIPを持つことが多いためです。適切な機能を確保するために、dataChannelSecurity/matchClientAddressForPasv = falseも設定してください。詳細については、Microsoft Windows IIS FTP公式ガイド ↗を参照してください。