FTPとは?仕組み・アクティブ/パッシブの違いとFTPS・SFTPで安全に運用する方法

FTPとは — 概要

FTP(File Transfer Protocol、ファイル転送プロトコル)は、ネットワーク上でファイルを送受信するための代表的なプロトコルです。1970年代後半から開発され、インターネットの初期から広く利用されてきました。標準仕様は IETF の RFC 959(1971→1985改訂)で定義されており、クライアントとサーバー間でコマンド/レスポンス方式の制御チャネルと、ファイル本体を送受信するデータチャネルの2つの接続を使うのが特徴です(制御とデータの分離)。

技術的な仕組み

FTP はTCPを使い、通常は次のポートを用います。

  • 制御接続:TCP 21(クライアント → サーバーでコマンド送受信)
  • データ接続(アクティブモードの慣例):TCP 20(サーバー → クライアントの接続元)

ただし、データ接続はモードや設定により動的に決まるため、必ずしも 20 番が使われるとは限りません(パッシブモードや FTPS では異なります)。FTP はテキストベースのコマンド(例:USER、PASS、LIST、RETR、STOR、PASV、PORT など)と、数百番台の数値レスポンス(例:200、331、550 など)でやり取りします。

アクティブモードとパッシブモード(Active vs Passive)

FTP の動作でよく問題になるのが接続方向です。ネットワーク環境によって「アクティブ(PORT)」と「パッシブ(PASV)」のどちらかを選びます。

  • アクティブモード:クライアントは制御接続(TCP/21)を開いた後、自分の待ち受けポートをサーバーに通知(PORT コマンド)。サーバーはそのポートへ接続してデータを送る(通常サーバー側の送信元ポートは20)。しかしクライアント側がファイアウォールや NAT の背後にあるとサーバーからの接続が届かないため問題が生じやすい。
  • パッシブモード:クライアントが PASV(あるいは EPSV)コマンドを送ると、サーバーはデータ接続用の待ち受けポート番号を返す。クライアントはそのポートへ自分から接続するため、NAT/ファイアウォール越しでも動作しやすい。現代のクライアントはパッシブをデフォルトにすることが多い。

ASCIIモードとバイナリモード

FTPは転送モードとしてテキストの変換(ASCII)と生データ(Image=Binary)を選べます。ASCII モードでは改行コード(LF/CRLF)や文字コード変換などが行われ得るため、バイナリファイル(画像・圧縮ファイルなど)を ASCII モードで転送すると壊れます。一般にはバイナリ(TYPE I)を既定にするのが安全です。

認証と暗号化(セキュリティ)

オリジナルの FTP はユーザー名・パスワードを平文で送信し、データも暗号化されません。したがって盗聴やなりすましのリスクが高く、インターネット越しにそのまま使うのは推奨されません。現代では以下のような安全な代替・拡張が用いられます。

  • FTPS(FTP over TLS/SSL):RFC 4217 等で定義された、FTP のコントロール/データチャネルを TLS で保護する方式。Explicit(AUTH TLS による明示的な開始、通常ポート21)と Implicit(従来の慣習でポート990を使い接続時に即 TLS)があります。PROT コマンドでデータチャネル保護の有無を制御します。
  • SFTP(SSH File Transfer Protocol):FTP の拡張ではなく、SSH のサブシステム/プロトコルとして動作する別プロトコルです。通常は TCP 22 を使い、単一の暗号化された接続で制御/データをやり取りします。実装は OpenSSH 等で広く用いられます(SFTP と FTP/FTPS は相互互換性がないためクライアント/サーバー両方が対応している必要があります)。

代表的なコマンドとレスポンス(概要)

主な FTP コマンド例:

  • USER / PASS:認証
  • PWD / CWD:カレントディレクトリの表示・変更
  • LIST / NLST / MLSD:ディレクトリ一覧(MLSD は拡張)
  • RETR / STOR:ダウンロード/アップロード
  • DELE / RNFR / RNTO:削除・名前変更
  • PORT / PASV / EPRT / EPSV:データ接続の方式指定

レスポンスは3桁の数字で返り、先頭桁で状態を示します(1xx=情報、2xx=成功、3xx=継続応答、4xx=一時エラー、5xx=恒久エラー)。

FTP の実務での使いどころ(ウェブ開発など)

かつてはウェブサイトへのファイルアップロードや配布に FTP が広く使われました。現在でもイントラネット、レガシーシステム、あるいは大容量ファイル配布(匿名 FTP)などで残っていますが、セキュリティが問題となるため公開インターネット上では SFTP や FTPS、あるいは HTTPS(WebDAV や API)への置換が進んでいます。

設定上の注意点とベストプラクティス

  • 可能な限り平文 FTP を避け、SFTP または FTPS を利用する。
  • FTPS を使う場合は明示的(AUTH TLS)を推奨し、証明書管理を適切に行う。暗号スイートや TLS バージョンの更新を怠らない。
  • SFTP を使う場合は公開鍵認証を採用し、パスワード認証を無効化するオプションを検討する。
  • パッシブモード利用時はサーバー側でパッシブ用のポート範囲を限定し、ファイアウォールでその範囲のみ開放する。これにより管理しやすくなる。
  • 匿名アクセスは不要であれば無効にし、ログ記録・監査を有効にする。chroot/jail によりユーザーを制限する。
  • ブルートフォース対策(fail2ban 等)や接続数上限、帯域制限を設定する。

トラブルシューティングのポイント

よくある問題と対処:

  • ディレクトリ一覧やデータ転送が失敗する:パッシブ/アクティブの不一致、ファイアウォールでデータポート範囲が閉じていることが多い。サーバーのパッシブポート範囲設定とファイアウォール設定を確認する。
  • 認証に失敗する:平文ログや鍵の不一致、ローカル/サーバーのタイムゾーンや文字コード問題を確認。
  • 転送が途中で切れる:MTU/ネットワーク環境、長時間アイドルで接続が切られる設定、TLS の再ネゴシエーションが関係することがある。

FTP と SFTP/FTPS の違い(簡潔比較)

  • プロトコル:FTP/FTPS はFTPベース、SFTP は SSH ベース(全く別物)。
  • ポート・接続:FTPS は複数ポート(制御+データ)、SFTP は通常単一ポート(22)。ファイアウォール設定のしやすさは SFTP が有利。
  • 相互運用性:FTPS と FTP クライアントは比較的互換性があるが、SFTP は別実装のため互換性はない。
  • セキュリティ:どちらも暗号化可能だが、実装や設定次第で強度は変わる。SFTP は SSH の堅牢な認証と一貫した暗号化の恩恵を受けやすい。

代表的なサーバー/クライアント実装

  • サーバー:vsftpd、ProFTPD、Pure-FTPd、FileZilla Server(FTPS 対応)など。
  • クライアント:FileZilla、WinSCP、lftp、curl、標準 ftp クライアント(注意:セキュリティ)など。SFTP は OpenSSH の sftp/ssh/scp や WinSCP、FileZilla で広くサポート。

まとめと推奨

FTP は歴史あるファイル転送プロトコルで、仕組みや制御方式(アクティブ/パッシブ)を理解しておくとネットワークトラブルの把握に役立ちます。ただし平文での認証・転送という欠点があり、公開ネットワークでは安全な代替(SFTP または FTPS、あるいは HTTPS)を利用することが現代のベストプラクティスです。既存の FTP 環境を運用する場合は、パッシブポート範囲の制限、TLS や鍵認証の導入、ログ・監査と脆弱性対策を徹底してください。

参考文献