この内容は古いバージョンです。最新バージョンを表示するには、戻るボタンを押してください。
バージョン:5
ページ更新者:atom
更新日時:2026-06-11 07:07:02

タイトル: FTP
SEOタイトル: FTP プロトコル完全ガイド (FTP/FTPS/SFTP)

この記事の要点
  • FTP (File Transfer Protocol) はファイル転送用の古典プロトコル。制御 21 番 / データ 20 番
  • アクティブモード (サーバ → クライアントへデータ接続) と パッシブモード (PASV) がある。NAT 越え用にパッシブが必須
  • FTP は平文 = 暗号化なし。現代では FTPS (FTP over TLS, 990 番) / SFTP (SSH 経由, 22 番) が必須
  • クライアント: FileZilla / WinSCP / lftp / curl。Anonymous FTP は公開ミラーで使われる
  • 現代の選択肢は HTTPS API / SCP / rsync / クラウドストレージ。新規構築で純粋 FTP は推奨しない

FTP の概要

FTP (File Transfer Protocol) は 1971 年に策定された RFC 959 ベースのファイル転送プロトコルです。Web 黎明期のサイト公開・ソフトウェア配布の標準でしたが、平文通信ゆえのセキュリティ問題から、現代では SFTP / FTPS / HTTPS API への置き換えが進んでいます。

ポートとコネクション

プロトコル制御データ暗号化下位プロトコル
FTP (Plain)21/TCP20/TCP (Active) or 動的 (Passive)なし
FTPS Explicit21/TCP (AUTH TLS で TLS 化)動的TLSSSL/TLS
FTPS Implicit990/TCP (最初から TLS)989/TCPTLSSSL/TLS
SFTP22/TCP (SSH と同じ)22/TCP (同じ接続内)SSHSSH

SFTP は名前は FTP と似ていますが、まったく別物です。SSH のサブプロトコル (SFTP subsystem) で、SSH のセキュリティ・認証をそのまま継承します。

アクティブモード vs パッシブモード

FTP の特殊性は制御接続とデータ接続が分離していること。データ接続の張り方で 2 モードあります:

モード動作NAT/FW 越え
Activeクライアントが受け側ポートを通知 (PORT) → サーバが 20 番から接続しに行くクライアント側 FW で塞がれ失敗しやすい
Passive (PASV)サーバが待ち受けポートを通知 (PASV) → クライアントが接続しに行く★ 現代では PASV が既定
# Active モード (古典)
client(*) --- PORT cmd --- server:21
server:20 ----connect---> client:n
# クライアント側 NAT/FW で 20->n 接続が落ちる

# Passive モード (PASV)
client --- PASV cmd ---> server:21
server: "227 Entering Passive Mode (192,0,2,1,28,123)"
client --- connect ---> server:7291  (= 28*256+123)
# サーバ側のポート開放のみで OK

主要コマンド (FTP プロトコル)

コマンド役割
USER / PASSログイン (平文)
PWD / CWDカレント表示 / 移動
LIST / NLSTファイル一覧
RETR / STORダウンロード / アップロード
DELE / RNFR / RNTO削除 / リネーム
MKD / RMDディレクトリ作成 / 削除
TYPE A / TYPE IASCII / Binary 切替
PASV / EPSVパッシブモード要求
QUIT切断

ASCII モード vs Binary モード

古い設計の名残で、テキストファイル転送時に改行コードを変換するモード (ASCII) と、無変換 (Binary / Image) があります:

# ASCII モード: CR/LF を相手 OS の改行に変換
#   Windows -> Unix:  CRLF -> LF
#   Unix -> Windows:  LF -> CRLF
# 利点: テキストファイルの可読性
# 欠点: バイナリを通すと壊れる

# Binary (Image) モード: 無変換
# 現代は基本これ

バイナリファイルを ASCII モードで転送すると確実に壊れます。zip/画像/実行ファイルは必ず Binary に。

ftp コマンドの基本

# 接続
ftp ftp.example.com
# Name: alice
# Password: ********

ftp> ls
ftp> cd /pub
ftp> bin                # Binary モード
ftp> passive            # パッシブモード切替
ftp> get file.zip       # ダウンロード
ftp> put upload.txt     # アップロード
ftp> mget *.txt         # 複数取得
ftp> bye                # 切断

# 非対話的: curl が便利
curl -u user:pass ftp://ftp.example.com/file.zip -o file.zip
curl -u user:pass -T upload.txt ftp://ftp.example.com/

FTPS (FTP over TLS)

従来の FTP に TLS 暗号化を追加した方式。Explicit と Implicit があります:

# Explicit FTPS (推奨): 21 番で接続 -> AUTH TLS コマンドで TLS 化
curl --ftp-ssl -u user:pass ftp://ftp.example.com/file.zip -o file.zip

# Implicit FTPS: 最初から TLS (990 番)
curl --ftp-ssl -u user:pass ftps://ftp.example.com:990/file.zip -o file.zip

# lftp なら自動判別
lftp -e "set ftp:ssl-force true; set ftp:ssl-protect-data true" -u user,pass ftp.example.com

SFTP (SSH File Transfer Protocol)

名前は FTP に似ていますが、FTP と何の関係もなく、SSH のサブプロトコルです。SSH サーバが動いていれば追加設定なしで使えるのが利点。

# 対話的
sftp alice@server.example.com
sftp> put localfile
sftp> get remotefile
sftp> ls
sftp> exit

# 非対話的
scp file.zip alice@server:/upload/   # SCP は SSH 上のファイル転送、SFTP と兄弟
rsync -av ./ alice@server:/path/     # 差分転送に強い

# 鍵認証 (パスワード不要に)
ssh-keygen -t ed25519
ssh-copy-id alice@server
sftp alice@server                     # パスワード問われない

主なクライアントソフト

名称OS対応特徴
FileZillaWin/Mac/LinuxFTP/FTPS/SFTP定番 OSS、GUI
WinSCPWindowsFTP/FTPS/SFTP/SCPエクスプローラ風、PuTTY 連携
CyberduckMac/WinFTP/FTPS/SFTP + S3 等クラウド統合に強い
lftpUnixFTP/FTPS/SFTP/HTTP(S)CLI、ミラー機能・自動化に◎
TransmitMacFTP/FTPS/SFTP + クラウド商用、高速
curl全 OSFTP/FTPS/SFTP/SCPシェルスクリプト向き

Anonymous FTP

ユーザ名 anonymous + パスワードに自分のメールアドレス (慣習) でログインする公開 FTP。Linux ディストリの ISO ミラーや、CRAN/CTAN 等の学術ミラーでまだ稼働しています。

ftp ftp.gnu.org
# Name: anonymous
# Password: your@email.com
ftp> ls /gnu

# 多くのミラーは HTTPS にも対応
curl -O https://ftp.gnu.org/gnu/coreutils/coreutils-9.5.tar.xz

セキュリティ上の問題

  • 認証情報が平文: ユーザ名 / パスワードがネットワーク上に丸見え
  • データも平文: 転送内容を傍受可能
  • パッシブモードのデータポート範囲を広く開ける必要 → FW 攻撃面が広がる
  • FXP (server-to-server 転送) を悪用した攻撃

これらの理由で 純粋 FTP はインターネット上で使うべきではないとされ、PCI DSS 等のセキュリティ標準でも禁止対象です。

現代の代替手段

用途推奨
サーバへのデプロイSFTP / SCP / rsync over SSH / Git
大容量ファイル配布HTTPS / S3 / GCS / Azure Blob (署名付き URL)
クライアントとのファイル共有WebDAV / クラウドストレージ (Box / OneDrive)
レガシー連携FTPS (TLS 強制)
大量小ファイルバックアップrsync / restic / borg

FAQ

Q: FTP と SFTP のサーバを同居させたい
A: 不要なら入れない方が安全。どうしても必要なら vsftpd (FTP/FTPS) + OpenSSH (SFTP) を別アカウントで管理。

Q: パッシブモードで「227 Entering Passive Mode」後にハングする
A: サーバ側のパッシブポート範囲 (例: pasv_min_port / pasv_max_port) が FW で塞がれているのが定番。ファイアウォール開放が必要。

Q: クラウドの S3 を FTP のように扱いたい
A: s3fs / goofys でマウント、または AWS Transfer Family (マネージド SFTP) を利用。