FTP、SFTP、FTPSの違い
様々なファイル転送プロトコルの内部構造がどのように違うのか気になるところですが、本記事では、それらの違いや比較を簡潔にまとめました。3つのプロトコルの構成要素の違いが分かれば、そのうちの1つを選んで使うメリットが出てくるのではないでしょうか。
FTPについて
FTP(ファイル転送プロトコル)は、1970年代初頭から使われており、インターネットの前身であるARPANET の NCP(ネットワークコントロールプログラム)上でホスト間のファイル転送をしやすくするために、2つのアプリケーション層のネットワークプロトコル(もう1つは Telnet)の1つとして初めて作られました。
FTPは当初、NCPの上で動作するように設計されていました。つまり、単純なプロトコルで、1回の接続で通信が一方通行になるため、クライアントからサーバーへの双方向通信には2つのポートが必要になるということです。
まず、クライアントがサーバーに接続し、認証に成功した後、サーバーがクライアントに接続し直します。NCP の後継である TCP/IP は二重化プロトコルであり、1つのポートで双方向の通信が可能ですが、FTPがTCP/IPの上で動作するように移植されたとき、後方互換性のために、ポート1つだけを使うように変更されることは絶対ありませんでした。
コンピュータネットワークの初期では、FTPの開発者はセキュリティについてあまり考えていなかったので、当然のことながら、安全なプロトコルとして設計されることはありませんでした。なので、ユーザー名、パスワード、コマンド、ファイルデータはすべて平文で渡され、誰でもネットワーク上のパケットをキャプチャしたり、変更したりすることができたのです。
さらに、前述のように2つのポートを使うのは、クライアントがファイアウォールや NAT (ネットワークアドレス変換)の背後にあり、パブリックネットワークにさえ公開されていないローカルIPアドレスを持っている場合に問題があります。この問題の解決には、2つのやり方がありますが、クライアントがサーバーへの接続を両方開く「パッシブモード」が一般的に使われます。
FTPは、欠点はあるものの、HTTPやTCP/IP が発明されるずっと以前から、ファイル共有の画期的な方法であり、ユーザーとパスワードというシンプルかつ任意の認証手段で、ファイルの共有、アップロード、ダウンロードをしやすくするものでした。
FTPS の誕生
1990年代、インターネットの普及により、世界中で FTPサーバー上のファイルにアクセスできるようになりましたが、一方、データの転送経路が長くなり、暗号化されていないデータ通信が第三者に盗聴される危険性も増えました。この問題を解決するために、1994年に Netscape 社 は Secure Sockets Layer または SSL として知られるアプリケーション層のラッパーをリリースしました。それによって、アプリケーションは安全でプライベートな方法でネットワーク上で通信できるようになり、これは今日まで、HTTPS プロトコルで使われています。また、SSLプロトコルは FTP にも適用され、そこで FTP の拡張機能である FTPS が誕生しました。
FTPS でクライアントセキュリティを呼び出す方法は、以下の2つがあります:
- Implicit(暗黙的な)方式:セッション全体は、SSL(またはそれ以降のTLS)暗号を使って暗号化され、クライアントがすぐにセキュリティ要求を行わない場合、サーバーは接続を切断することが予想される。この制限により、暗黙モードは一般に非推奨とされている。
- Explicit(明示的な)方式:従来の FTP 接続が確立され、接続が確立されると、安全な SSL/TLS 接続が認証の直前に確立される。暗黙モードとは異なり、クライアントがセキュリティ要求を行わなかった場合、接続の拒否か、基本的なFTPの継続かはサーバー次第。また、クライアントはデータチャネルを暗号化するかを選択でき(その際、FTP で使用されるポートは2つであることに気をつけないといけない)、サーバーは、安全でないリクエストの許可または禁止の選択ができる。
簡単なまとめ「FTPとFTPS」
類似点:
- どちらもポートを2つ使用(クライアントが両方の接続を開くパッシブモードにも対応)
- 基本的なコマンド: どちらも同じ基本的なコマンドに対応
- 最近のクライアントは、ほとんど両方のプロトコルに対応
相違点:
- FTPは、クライアントとサーバー間の通信を一切暗号化しない。
- FTPSは、クライアントとサーバーの設定により、クライアントとサーバー間の通信の一部または全部を暗号化する場合としない場合がある。
SFTP
SFTP(セキュアファイル転送プロトコル、または SSH ファイル転送プロトコル)は一番歴史の浅いプロトコルですが、1990年代後半から存在しています。FTPS とは対照的に、FTP を拡張したものではなく、一から作り直したものです。このプロトコルは1つのポートが使われ、プロトコル自体は認証やセキュリティを提供せず、むしろ基礎プロトコルである SSH がこれを提供することを期待するものです。
細かい説明は省きますが、SSH(セキュアシェル)は、安全でないネットワーク上のネットワーク接続の保護に使われる暗号プロトコルであり、リモートサーバーへのログインやポートの転送、トンネル化にも使われます。また、SSH は公開鍵暗号を使ってユーザーとマシンを認証しますが、ユーザー名/パスワード認証にも対応しています(使用する場合はこれも暗号化されます)。
加えて、SFTPは他のSSH サービスとデフォルトの22番ポートを共有しているため、通常は SSHサーバーの実装にバンドルされています。つまり、どの Linux マシンにも組み込まれているということです。
SFTP で使われる基本的なコマンドは、ls、get、put など FTPやFTPSと同じですが、違いもいくつかあります。
例えば、ファイルをリストアップする際のSFTPのレスポンスはより一貫性があり、より詳細な情報が含まれており、FTPにはないファイルシステムの操作(パーミッションやファイル所有者の変更など)が可能です。
SFTPとFTP/FTPS
3つのプロトコルに共通するのは、ファイルの転送と管理ができる点です。では、それぞれの特徴を見ていきましょう。
SFTP:
- シングルポート接続
- SSHによる安全な公開鍵認証に依存(オプションでユーザー/パスワード認証も可能)
- 有線でのデータ暗号化をSSHに依存 - コマンドもデータもすべて暗号化されている。
- ファイル管理の面で機能的に若干向上している。
FTPとFTPS:
- FTP/Sは2つのポートを使用するため、ポート、ファイアウォール、NATの管理が難しくなる
- 認証は任意(サーバーが許可していれば、匿名でアクセスできる)
- 暗号化やセキュリティが任意であるため、コンプライアンスに問題がある。
- FTPS の証明書はきちんと管理されないといけない。期限切れの証明書は、サーバーへのアクセス不能につながる。
現在の安全なファイル転送は、その優れたセキュリティとLinuxオペレーティングシステムの一部として広く配布されていることから、SFTP がデフォルトの選択肢になっています。
SFTP To Goは、SFTP、FTPS、Amazon S3プロトコルのサポートにより、暗号化されたクラウドストレージを即座にセットアップすることができます