FTPサーバーへ向かう途中でVPNの保護はどこまで続くか
VPNが守るのはゲートウェイまでの経路であり、その先の区間ではありません。平文のFTP、FTPS、SFTPを区別し、データチャネルと相手の身元を確認してください。
VPNが守るのは経路であり、経路には終わりがあります。トンネルが企業のゲートウェイで終わると、ファイル転送はそこから先、そのプロトコル自身が提供する保護の下で続きます。この違いが、転送が端から端まで守られているのか、ゲートウェイまでしか守られていないのかを決めます。Connected表示はそのどちらについても何も語りません。
二つの配置、二つの残る経路
企業のVPNに接続し、その後、別の社内サーバーへFTPセッションを開くノートPCを考えます。トンネルはゲートウェイで止まり、ゲートウェイからそのサーバーまでの区間はトンネルの外にあります。
平文のFTPは、パケットがトンネルを通って届いたからといって暗号化されるわけではありません。残された区間では、コマンド、資格情報、ファイルの中身がプロトコルの定めるとおり、つまり平文のまま流れます。それが問題になるかどうかはトポロジーと、その区間を他に何が守っているかによります。アドレスをプライベートと呼んでも答えにはなりません。サーバーが、ゲートウェイがもう一ホップ先で到達するクラウドネットワークにある場合も、同じ理屈が逆向きに当てはまります。
VPNの端点とFTPサービスを同じマシンに置けば、心配すべき後続の区間はありません。それは別の配置であり、ホストのプロセスやファイル、資格情報が安全だという証明ではありません。
平文のFTP、FTPS、SFTPは三つの決定です
平文のFTPはパスワードを含め何も暗号化しません。FTPSはFTPにTLSを加えるので、制御チャネルと、交渉された場合はデータチャネルが保護されます。SFTPはSSHの内部で運ばれる別のプロトコルであり、FTPSの別表記ではありません。
サーバーがその選択を支えている必要があります。クライアントは存在しない待ち受けを作り出せないからです。SFTPを選んでも、FTP専用のサービスがSSHの端点に変わるわけではありません。ブックマークの名前を変えたりポートを変えたりしても、交渉された内容の証明にはなりません。クライアント側だけでなくサーバー側からもプロトコルを確認してください。ファイルマネージャーの鍵アイコンはセッションについての主張であり、その背後の待ち受けについての主張ではありません。
| Protocol | Usual port | What it protects | Identity check |
|---|---|---|---|
| FTP | 21 | Nothing on the wire | None beyond the login |
| FTPS | 21 or 990 | Control channel, data channel when required | TLS server certificate |
| SFTP | 22 | The whole session inside SSH | SSH host key |
転送が重要なときは、予期しない身元の変化が現れる最後の列を読んでください。
データ接続は二本目の接続です
FTPは制御接続を開き、次に一覧取得と転送のために別々のデータ接続を開きます。保護されたログインは、配備がそれらにも保護を要求しない限り、後から開く接続については何も語りません。
FTPSでは、クライアントが特定のコマンドで保護されたデータチャネルを要求し、サーバーのポリシーは平文の代替を拒否できます。クライアントの既定値で足りると決めつけず、ポリシーがそれを要求していることを確認してください。パッシブモードはさらに厄介で、サーバーがデータ接続用のアドレスとポートを通知します。その通知を書き換えたり遮断したりするファイアウォールやNAT装置があると、認証は通るのに最初の一覧で止まるセッションになります。
curl -vk ftps://files.corp.example/ --user alice --ftp-ssl-control
openssl s_client -connect files.corp.example:21 -starttls ftp
ss -tnp | grep -E ':21|:990'
二番目のコマンドは、どのファイルにも触れる前にサーバーが制御チャネルで何を提示するかを示します。三番目は、データ接続がそもそも確立されたかを示し、これが認証の失敗とパッシブモードの失敗の違いです。
身元の確認はトンネルを越えて残ります
FTPSクライアントはTLSサーバーの身元を検証し、SFTPクライアントはSSHホスト鍵を検証します。どちらの確認もファイル転送プロトコルに属し、VPNが行うものではありません。
この分離は、途中の何かがセッションを検査したいときに重要です。ネットワーク機器がコマンドを読めるようにTLSを切ることは、保護モデルを完成させるのではなく変えることになります。トンネルが上がったからという理由で説明のないホスト鍵を受け入れるのも同じです。意図した信頼の設定を保ち、正しい材料を運用者から入手してください。認証が通るトンネルは、その遠端のサーバーについて何も語りません。
これらのプロトコル用の秘密鍵と証明書の材料は、VPNの資格情報とは別の三つ目の秘密です。
実際に何を確認したかを記録してください
移動する権限のある無害なファイルを選び、どのプロトコルが動いたか、相手のどの身元を確認したか、どの経路を意図していたか、転送が完了したかという四つの事実を記録します。
lftp -u alice -e "set ftp:ssl-protect-data true; ls; bye" ftps://files.corp.example
sftp -v [email protected]
ディレクトリ一覧、トンネルへのログイン、完了した転送は三つの別々の観察であり、経路がファイルに対して機能すると言えるのは最後の一つだけです。残りのホップの機密性をVPNだけに頼る設計なら、それを決定としてそのまま書き留めてください。ホップとその信頼の前提を名指しした受け入れメモは、接続中のクライアントのスクリーンショットより価値があります。