FTPサーバーとは|仕組み・Active/PASV・FTPS/SFTPの違いと安全な運用ガイド

FTPサーバーとは — 概要

FTP(File Transfer Protocol)サーバーは、ネットワーク上でファイルの送受信を行うためのサーバーソフトウェアです。クライアントとサーバー間でファイルのアップロード、ダウンロード、ディレクトリ操作(一覧表示、作成、削除など)を行うためのプロトコル(規約)として長年使われてきました。FTPは元来RFC 959(1985年)で定義されたプロトコルで、インターネット黎明期から存在する代表的なファイル転送手段です。

基本動作と仕組み

FTPは「制御(コントロール)接続」と「データ接続」の2つのTCP接続を使って動作します。

  • 制御接続(Control):クライアントがサーバーのポート21にTCP接続し、コマンド(USER, PASS, CWD, LIST, RETR, STORなど)を送受信します。制御接続は接続の維持中にコマンドと応答(3桁のステータスコード)を交換します。
  • データ接続(Data):実際のファイル転送やディレクトリ一覧の送受信に使われる接続です。FTPには「アクティブモード」と「パッシブモード」があり、接続の張り方が異なります。

アクティブモード(Active)

クライアントは自身の任意の待ち受けポートを開き、PORTコマンドでそのポート番号をサーバーに伝えます。サーバーは自らのポート20(従来のデータポート)からクライアントの指定ポートへTCP接続を張り、データ転送を行います。クライアント側がNATやファイアウォールの背後にあるとサーバーからの接続を受けられないため、アクティブモードは制約が多いです。

パッシブモード(Passive)

クライアントがPASVコマンドを送ると、サーバーは自らの任意の(通常は範囲で指定した)ポート番号を応答し、そのポートで待ち受けます。クライアントはそのポートへ接続してデータ転送を行います。NATやクライアント側ファイアウォール環境ではパッシブモードが一般的です。IPv6やNAT対応の拡張としてEPRT/EPSVも用いられます(RFC 2428)。

代表的なFTPコマンドとレスポンス

  • USER, PASS — 認証(ユーザー名とパスワード)
  • LIST, NLST, MLSD — ディレクトリ一覧(MLSDは機械判別可能な一覧、RFC 3659)
  • RETR, STOR — ダウンロード(RETR)とアップロード(STOR)
  • PORT, PASV, EPRT, EPSV — データ接続の開始方法
  • TYPE — 転送モード(A=ASCII, I=バイナリ)
  • REST — 再開(レジューム)用のオフセット指定
  • SIZE, MDTM — ファイルサイズや最終更新時刻の取得(拡張コマンド)

FTPのセキュリティ問題と拡張

FTPの大きな欠点は、標準のFTPでは認証情報(ユーザー名・パスワード)やファイル内容が平文(暗号化されていない)で送られる点です。したがって盗聴・中間者攻撃に対して脆弱です。また、アクティブモードのコネクションや「FTPバウンス攻撃」など運用上のリスクも指摘されています。

これらを改善するために複数の拡張と別プロトコルが使われます:

  • FTPS(FTP over TLS/SSL):FTPの制御/データ接続をTLSで保護します。明示的(AUTH TLS を用いる、RFC 4217)と暗黙的(ポート990にTLS開始を期待する古い方式)の方式があります。TLSにより認証情報とデータを暗号化できますが、PASVの応答に含まれるIP/ポート情報やNATの問題に注意が必要です。
  • SFTP(SSH File Transfer Protocol):名前が似ていますがFTPの拡張ではなく、SSHのサブシステムとして動作する別プロトコルです。単一のTCP接続(通常は22)上で暗号化されたファイル転送を行い、FTPのような二重接続やPASV/PORTの複雑さがありません。セキュアで現在は推奨される選択肢の1つです。
  • FTPSとSFTPの違い:FTPSは既存のFTPクライアント・サーバー仕様を拡張してTLSを適用する方式で、SFTPはSSHプロトコル群に基づく全く別の実装です。運用上の互換性やポート・ファイアウォール挙動が異なります。

運用上の設定とベストプラクティス

FTPサーバーを安全かつ安定して運用するための実務的なポイントを挙げます。

  • 可能ならSFTPかHTTPS(WebDAV/REST API)を選ぶ:新規の運用では平文FTPは避け、SFTPやHTTPSベースの転送を検討する。
  • FTPSを使う場合は明示的TLS(AUTH TLS)を推奨:RFC 4217準拠で制御チャネルを暗号化し、必要に応じてデータチャネルもPROT Pで暗号化する。PBSZは0を指定する運用が一般的。
  • パッシブポート範囲の設定:サーバー側で使用するパッシブポート範囲を狭く固定してファイアウォールでその範囲のみを開ける。PASV応答で返す外部IPがNAT環境下で正しいか設定する。
  • ユーザー分離(chroot)と仮想ユーザー:システムのルートファイルにアクセスさせないようユーザーを隔離し、必要最低限の権限で動かす。仮想ユーザーでシステムユーザーを使わない設定も有効。
  • ログと監査:転送ログ(xferlog等)、接続ログを残し、異常な接続や総当たり攻撃の兆候を監視する。fail2banなどで攻撃IPをブロック。
  • 暗号設定と証明書管理:強いTLS設定(最新のTLSバージョン、強い暗号スイート)を使用し、証明書は信頼できるCA発行のものを使う。Let’s Encryptなどの自動更新も活用可(サーバーソフトの対応を確認)。
  • ソフトウェアの定期的なアップデート:FTPサーバー(vsftpd, proftpd, Pure-FTPd, FileZilla Serverなど)やOSの脆弱性対策は必須。

代表的なFTPサーバー実装

  • vsftpd:Linuxで広く使われる軽量で安全性重視のサーバー。
  • ProFTPD:Apache風の設定が可能で拡張性が高い。
  • Pure-FTPd:簡単な設定で高機能、仮想ユーザーサポートなど。
  • FileZilla Server:Windows環境で広く使われるオープンソースの実装。
  • Microsoft IIS FTP:Windows Serverに組み込まれたFTPサービス(FTPS対応)

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

  • クライアントが接続できない:ポート21(またはFTPSの設定ポート)がファイアウォールで通っているか確認。
  • リストが返ってこない・データ転送が失敗する:パッシブポート範囲の設定とファイアウォールの整合性、NAT環境でのPASV応答のIPアドレス設定を確認。
  • 認証が失敗する:TLSを必須にしている場合、クライアントがAUTH TLSをサポートしているか、証明書チェーンが正しいかを確認。
  • 速度が遅い:ネットワーク帯域、TCPウィンドウ設定、同時接続数制限、ディスクI/Oを確認。大量転送時は並列ストリームや圧縮を検討。

FTPが向くケース・向かないケース

FTPはシンプルで多くの古いシステムや自動化バッチ処理、ウェブサイトの公開作業などで長年利用されてきました。一方でセキュリティ要件の高い環境やクラウドネイティブなファイル共有には不向きであり、以下を目安に選択します。

  • 向くケース:レガシーシステムとの互換性が必要、社内限定のバッチ転送、既存ワークフローをすぐ置き換えられない場合。
  • 向かないケース:インターネット経由で多数ユーザーに安全に公開したい、APIベースでアクセス管理したい場合(S3やHTTPSベースの転送を推奨)。

実務的な導入チェックリスト(要点)

  • 要件定義:必須プロトコル(SFTP/FTPS/FTP)、想定ユーザー数、帯域、ファイルサイズ、ログ保存要件を明確にする。
  • セキュリティ:暗号化の要否(必須であればSFTPまたはFTPS)、アクセス制御、監査ログ、侵入検知。
  • ネットワーク構成:パッシブポート範囲、外部IPの設定、NAT/ファイアウォールの開放ポリシー。
  • 運用:証明書更新、バックアップ、ユーザー管理、脆弱性対応手順。

まとめ

FTPサーバーは長年にわたりファイル転送の標準的手段として使われてきましたが、平文通信や接続の複雑さといった弱点があるため、現代の要件ではSFTPやHTTPSベースの転送、クラウドストレージAPIなどの代替が推奨されます。ただしレガシーシステムや既存ワークフローの互換性が必要な場面では、FTPSや適切な運用ルール(TLS強制、パッシブポートの管理、ユーザー隔離、ログ監視)を組み合わせることで、安全に運用可能です。

参考文献