「FTPって古いとは聞くけど、うちのサーバーはまだ使っている。今すぐやめないといけないの?」インフラを引き継いだ直後、こんな状況に直面したエンジニアは少なくないはずです。
Webサーバーへのファイル転送、取引先とのデータ受け渡し、レガシーシステムの定期バックアップ——FTP(File Transfer Protocol)は1971年に標準化された古いプロトコルですが、2026年現在も多くの現場で生き延びています。
問題は、FTPが通信を一切暗号化しないという致命的な欠陥を抱えていることです。同じネットワークにいる攻撃者はパケットキャプチャで、あなたのIDとパスワードをそのまま読み取ることができます。
この記事では、FTPの具体的なセキュリティリスクを攻撃者視点で解説し、SFTPまたはFTPSへの移行手順を現場で使えるレベルで説明します。Telnetと同様、FTPも「今すぐ廃止すべきプロトコル」のひとつです。

FTPとは?仕組みと今なお使われる理由
FTPはファイルをネットワーク経由で転送するためのプロトコルで、コマンドチャンネル(ポート21番)とデータチャンネル(ポート20番またはランダムポート)の2系統を使います。
シンプルな設計と高い互換性から、次のような場面で今も使われています。
・古いWebサービスやCMSのファイルアップロード機能
・レガシーシステムとの定期ファイル連携
・FTPクライアント(FileZillaなど)に慣れた業務担当者によるファイル共有
・ホスティング会社が提供するコントロールパネルでのファイル操作
使われ続ける最大の理由は「今まで動いていたから」という惰性です。しかし「動いている」ことと「安全である」ことはまったく別の話です。
FTPのセキュリティリスク(攻撃者視点で知る)
1. 認証情報が平文で流れる
FTPの最大の問題は、ユーザー名とパスワードが暗号化されずに平文でネットワークを流れることです。同じL2セグメント(社内LANや共用ネットワーク)に接続した攻撃者は、Wiresharkやtcpdumpなどのパケットキャプチャツールで通信を傍受するだけで、認証情報を丸ごと取得できます。
# Wiresharkでキャプチャした場合、このような形でIDとパスワードが見える USER ftpuser PASS mysecretpassword123
インターネット経由で接続する場合も、経路上の中間者攻撃(MITM)によって同様の窃取が可能です。
2. ファイル内容そのものが盗まれる
認証情報だけでなく、転送中のファイルの中身もすべて平文です。顧客情報・契約書・ソースコードなどの機密ファイルを転送していた場合、傍受した攻撃者にそのまま読まれます。
3. FTPバウンス攻撃(FTP Bounce Attack)
FTPのアクティブモードには、サーバーを踏み台にして第三者のホストにポートスキャンや接続を行う「FTPバウンス攻撃」という手口が古くから知られています。FTPのPORTコマンドを悪用し、サーバー自身に任意のIPアドレス・ポートへ接続させる攻撃です。現在は多くのサーバーで対策済みですが、古いFTPサーバーでは依然として有効な攻撃手法です。
4. 匿名FTP(Anonymous FTP)のリスク
設定ミスにより匿名ログイン(ユーザー名: anonymous)が有効のまま放置されたFTPサーバーは、認証なしでファイルを参照・ダウンロードされる危険があります。社内向けサーバーで意図せず匿名FTPが有効になっているケースが報告されています。
5. ポート開放によるスキャン対象化
FTPを有効にすると、21番ポート(コントロール)と20番ポート(データ)が開放されます。これらのポートはインターネット上のスキャナーから常に探索されており、FTPサーバーの存在が可視化されることで、バージョン依存の脆弱性を突く攻撃の標的になります。
安全なファイル転送の選択肢:SFTP vs FTPS vs SCP
FTPに代わる安全なファイル転送手段として、主に3つが使われています。
| プロトコル | 暗号化 | 使用ポート | 特徴 |
|---|---|---|---|
| SFTP(SSH File Transfer Protocol) | SSH(AES等) | 22番のみ | SSHの上に構築。ファイアウォール設定が簡単。最も普及 |
| FTPS(FTP over TLS) | TLS/SSL | 990番(暗黙)または21番(明示) | FTPにTLSを被せた仕様。既存FTPクライアントと互換性が高い |
| SCP(Secure Copy Protocol) | SSH | 22番のみ | 単純なファイルコピー向け。対話的な操作には不向き |
結論として、新規構築であればSFTPを第一選択としてください。すでにOpenSSHが動いているLinuxサーバーであれば、追加のサービスを起動する必要なく、OpenSSHのSFTPサブシステムをそのまま使えます。FTPSはWindowsサーバーやIISとの親和性が高く、既存のFTPクライアントをほぼそのまま使いたい場合に有効です。
SFTP移行の具体的な手順(OpenSSH)
1. OpenSSHのSFTPサブシステムを確認する
ほとんどのLinuxディストリビューションでは、OpenSSHインストール時にSFTPサブシステムが有効になっています。
# SFTPサブシステムが有効か確認 grep -i sftp /etc/ssh/sshd_config # 出力例(有効な状態) Subsystem sftp /usr/lib/openssh/sftp-server
2. SFTPのみを許可するユーザーを作成する
通常のSSHシェルを持たせず、SFTPのみを許可するユーザーを作成します。これにより、FTP用アカウントがSSHシェルに不正アクセスされるリスクを排除できます。
# SFTPのみ許可するユーザーを作成(シェルをnologinに設定) sudo useradd -s /sbin/nologin sftpuser sudo passwd sftpuser # 転送用ディレクトリを作成 sudo mkdir -p /var/sftp/uploads sudo chown root:root /var/sftp sudo chmod 755 /var/sftp sudo chown sftpuser:sftpuser /var/sftp/uploads
3. sshd_configにSFTP専用設定を追加する
# /etc/ssh/sshd_config に追記(ファイル末尾) # SFTPユーザーはchrootで隔離し、シェルを禁止する Match User sftpuser ChrootDirectory /var/sftp ForceCommand internal-sftp AllowTcpForwarding no X11Forwarding no
4. SSHサービスを再起動して動作確認する
sudo systemctl restart sshd # 別のPCからSFTP接続を確認(ポート22番) sftp sftpuser@サーバーIPアドレス
これでSFTPによる安全な暗号化ファイル転送が利用可能になります。ファイアウォールはSSH(22番ポート)のみ許可すればよく、FTP用の20・21番ポートは不要です。
5. FTPサーバーを停止・無効化する
SFTP移行が完了したら、既存のFTPサーバー(vsftpd・ProFTPDなど)を停止し、自動起動を無効にします。
# vsftpdを停止・無効化する例 sudo systemctl stop vsftpd sudo systemctl disable vsftpd # ファイアウォールでFTPポートを閉じる(firewalld例) sudo firewall-cmd --remove-service=ftp --permanent sudo firewall-cmd --reload
FTPS設定のポイント(vsftpdでの例)
既存のFTPクライアントをそのまま使いたい、またはWindowsのIIS環境など、SFTPへの移行が難しいケースではFTPSを検討します。vsftpdでFTPSを有効にする場合の最低限の設定は以下のとおりです。
# /etc/vsftpd.conf の主要セキュリティ設定 # 匿名アクセス禁止(デフォルトNO、明示的に設定) anonymous_enable=NO # TLSを強制(変更点: ssl_enable=NOからYESへ) ssl_enable=YES force_local_logins_ssl=YES force_local_data_ssl=YES # 古い脆弱なSSL/TLSバージョンを無効化(変更点: デフォルト無効を明示) ssl_sslv2=NO ssl_sslv3=NO ssl_tlsv1=NO ssl_tlsv1_1=NO ssl_tlsv1_2=YES # 証明書の指定 rsa_cert_file=/etc/ssl/certs/vsftpd.pem rsa_private_key_file=/etc/ssl/private/vsftpd.key
FTPSにはポート990番(暗黙的TLS)または21番(明示的TLS/STARTTLS)を使います。ファイアウォールの設定がFTPよりも複雑になる点に注意してください。
なお、SSHサーバーのセキュリティ強化についてはLinuxのsshd_config設定完全ガイドで詳しく解説しています。SFTPの基盤となるSSHを正しく設定することで、より堅牢なファイル転送環境を構築できます。
中小企業でも今日からできること
FTP廃止は「大がかりな移行作業」ではありません。多くの場合、以下のステップで週末の作業時間で完了できます。
・Step 1: FTPサーバーの存在確認: ss -tlnp | grep :21 または systemctl status vsftpd で動作中かを確認する
・Step 2: 利用者への周知: SFTPクライアント(FileZillaはSFTPにも対応)への切替方法を案内する
・Step 3: 並行稼働期間の設定: 1~2週間、SFTPとFTPを並行稼働し、業務影響がないことを確認する
・Step 4: FTPの完全停止: 並行稼働で問題がなければ、FTPサービスを停止・ポートを閉鎖する
・Step 5: ファイアウォールルールの確認: 20・21番ポートが外部から到達できないことを確認する
FTPと同様に平文通信のリスクを持つTelnetについては、TelnetのセキュリティリスクとSSH移行ガイドでも同じ考え方で移行手順を解説しています。あわせて参照してください。
よくある誤解と注意点
「SFTPはFTPのSSL版だ」という誤解
SFTPはFTPをSSLで暗号化したものではありません。FTPとSFTPは別々のプロトコルです。SFTPはSSHプロトコルのファイル転送サブシステムとして設計されており、FTPとは互換性がありません。FileZillaなどのクライアントは両方に対応していますが、接続方式は明確に区別して設定してください。
「FTPSにすれば完全に安全だ」という思い込み
FTPSはTLSで通信を暗号化しますが、FTPの設計上の制約(コントロールポートとデータポートの分離)からファイアウォールのNAT越えが複雑で、設定ミスによりデータポートが平文で流れるケースがあります。設定後は実際にパケットキャプチャで暗号化を確認してください。
「社内ネットワークだから傍受されない」という過信
同一セグメントのPCがARPスプーフィングなどで侵害されていた場合、攻撃者は同一LAN内でもパケット傍受が可能です。「社内だから安全」という境界防御の前提は、現代のセキュリティでは通用しません。
「匿名FTPは使っていない」の思い込み
vsftpdのデフォルト設定は匿名FTPが無効ですが、過去に設定を変更していたり、パッケージのアップデートで設定が変更されたりするケースがあります。定期的に grep anonymous_enable /etc/vsftpd.conf で設定を確認する習慣をつけてください。

本記事のまとめ
| リスク/対策 | 内容 | 優先度 |
|---|---|---|
| FTPの平文通信リスク | ID・パスワード・ファイル内容が傍受される | 高(今すぐ対処) |
| FTPバウンス攻撃 | サーバーを踏み台にしたポートスキャン | 中(FTP廃止で解消) |
| 匿名FTPの設定確認 | 意図せぬ匿名ログイン許可を排除 | 高(即時確認) |
| SFTPへの移行 | OpenSSHのSFTPサブシステムを使う | 高(1~2週間で完了可能) |
| FTPSへの移行 | 既存FTPクライアント互換が必要な場合の代替 | 中(SFTPが困難な場合) |
| FTPサービスの停止 | 移行完了後に確実に無効化・ポート閉鎖 | 高(移行完了後必須) |
FTPは「使えている」だけで「安全ではない」プロトコルです。パスワード認証の強化やファイアウォール設定にいくら力を入れても、FTPが動いている限り、通信路での認証情報窃取リスクは消えません。
移行の第一歩は「今のサーバーでFTPが動いているかを確認すること」です。まず ss -tlnp | grep :21 を実行してみてください。
PR
FTPのセキュア化・SSH設定・ファイアウォール構築など、Linuxサーバーを安全に運用するための実践的な設定手順を網羅した一冊。現場のエンジニアが手元に置いておきたいリファレンスです。
