FTPの暗号化に関する整理
FTP周りの暗号化について
FTP(File Transfer Protocol)はネットワークを経由してファイルを転送するためのプロトコルの一つです。
FTPにもセキュリティ機能はありユーザー名やパスワードを用いて認証を行うことが可能です。 一方で、認証時に送信されるユーザー名やパスワードは暗号化されずにネットワーク上を流れていきます。 このため、経路上に悪意のある第三者が存在すると認証情報を盗まれ不正にアクセスされてしまうといったセキュリティリスクが存在します。 また、暗号化されていないプロトコルを利用すると転送中のデータを改竄され、悪意のあるものに変更されるといったリスクも存在します。
可能であれば認証情報も暗号化可能なSFTPなどのプロトコルを使うことが望ましいです。
IPAの制御システムのセキュリティガイドにも同様の記述があります。
FTP 通信については、アウトバウンドのセッションのみ、またはトークンベースの多要素認証かつ暗号化トンネルでセキュリティ を確保した場合のみ、許可することが望ましい。
他ファイル転送手段の選択肢
上記でFTP周りの暗号化について整理しましたが、他のプロトコルを使うという選択肢もあります。
例えば、SSHを利用しているのであればrsyncやscpを使用すればFTPサーバーを立てることなく、暗号化された通信を利用できます。 また、複数人へのファイル配布といった目的であればHTTPSといった選択肢もあります。
FTPは歴史のあるプロトコルではありますが、現在ではファイル転送に関してさまざまなプロトコルが存在します。 一度、FTP、FTPS、SFTP以外のプロトコルも視野に入れて検討するのが良いと思います。
簡単な比較
以下はFTP、SFTP、FTPSの違いを示す比較表です。
特徴 | FTP | SFTP | FTPS |
---|---|---|---|
暗号化 | なし | SSHによる暗号化 | SSL/TLSによる暗号化 |
クライアント側の鍵情報管理 | なし | ※1 クライアント側で秘密鍵の管理が必要 | なし |
サーバー側の鍵情報管理 | なし | ※1 公開鍵の管理が必要 | 証明書の管理が必要 |
- ※1 SFTPでもパスワード認証は利用可能ですが、認証情報の管理コストを考え公開鍵認証が良いと個人的には考えています。
ファイアウォールに関して
以下それぞれのプロトコルで必要になるファイアウォールの設定です。 FTP系のプロトコルではアクティブモードとパッシブモードがあるので分けて整理しました
アクティブモードでの使用
FTP | SFTP | FTPS | |
---|---|---|---|
クライアント側の設定(インバウンド) | ランダムポートの範囲 | なし | ランダムポートの範囲 |
クライアント側の設定(アウトバウンド) | 21番ポート | 22番ポート | 21番(explicitモードの場合)ポート、990番(inplicitモードの場合)ポート |
サーバー側の設定(インバウンド) | 21番ポート | 22番ポート | 21番(explicitモードの場合)ポート、990番(inplicitモードの場合)ポート |
サーバー側の設定(アウトバウンド) | ランダムポートの範囲 | なし | ランダムポートの範囲 |
パッシブモードでの使用
FTP | SFTP | FTPS | |
---|---|---|---|
クライアント側の設定(インバウンド) | なし | なし | なし |
クライアント側の設定(アウトバウンド) | 21番ポート、ランダムポートの範囲 | 22番ポート | 21番(explicitモードの場合)ポート、990番(inplicitモードの場合)ポート、ランダムポートの範囲 |
サーバー側の設定(インバウンド) | 21番ポート、ランダムポートの範囲 | 22番ポート | 21番(explicitモードの場合)ポート、990番(inplicitモードの場合)ポート、ランダムポートの範囲 |
サーバー側の設定(アウトバウンド) | なし | なし | なし |
まとめ
FTPを利用するのはセキュリティリスクが存在します。 現状、FTPを利用したワークフローを変更するのが難しい場合にはSFTPやFTPSといったプロトコルに変更することで変更のコストを抑えよりセキュアにすることが可能です。
ただ、FTP以外のプロトコルを利用できる可能性がある場合はrsyncやscp, HTTPSといった他のプロトコルも視野に入れて検討するのが良いでしょう。