仕事でLFTPクライアントを使ってFTPSを利用する機会があり、制御コネクションは繋がるのにデータコネクションが繋がらない問題に直面しました。
いきなり原因を言っちゃうと、「クライアント側のファイアウォール」でした。
<クライアント側>
OS:CentOS
クライアント:LFTP
<サーバ側>
OS:Windows Server
接続方式:FTPS
暗号化モード:Explicit
転送モード:passive
ポート:21
FTPSでの接続は「制御コネクション」と「データコネクション」の2つが行われます。
暗号化モードExplicitはクライアント側から「AUTH」コマンドを送り、SSLにて暗号化された通信が確立されます。
つまり、「制御コネクション」のサーバへの接続時には暗号化されておらず、「制御コネクション」レスポンスから暗号化された接続となります。その暗号化された情報には「データコネクション」で使用するポートも含まれます。(制御コネクションで使用する21とは別物です。)
暗号化されたデータコネクションで使用するポート番号はクライアント側のファイアウォールからは判別できず、本来なら自動的に一時的にポートを開放する機能が作動せず、不審なデータ通信としてブロックされてしまっていました。
今回は、データコネクションで使用するポート番号を予め開放する設定をクライアントのファイアウォールに行うことで解消できました。