FTPソフトでサーバーとつなげてファイルのやり取りをする際に、最初はきちんと接続できているにも関わらず、通信の途中で強制的に切断されてしまうことがあります。もしくは、再接続を実行してもまた断続的に途切れることがあります。

特に、一つの小さなフィアルをやり取りしたり、中身を閲覧する時は問題なく通信できるのですが、大きめのファイルやディレクトリをダウンロード・アップロードしようとすると発生します。
かなり致命的で本当に困ります、、ちなみにこれはWinSPCで発生したエラー画面です。
でも、この症状は比較的すんなり改善できます。原因と対処法を図で解説します。
発生原因
この症状はサーバー側の問題ではなく、自分のPC側の問題です。具体的にはWindowsのセキュリティー機能の一つである、ファイヤウォールによるものです。
発生するのは、FTPによる通信をSSLやSSHなど暗号化している場合です。プロトコルだと、FTPS、SFTP、SCPが該当します。
(参考)転送プロトコルの設定(SFTP、SCP、FTP、WebDAV、AmazonS3の違い)
WindowsのファイヤウォールはFTP通信を監視しているのですが、中身が暗号化されていて見えないため、セキュリティのため通信を自動的に遮断します。
ありがたいようで、とても迷惑な機能でもあります。
対処法
原因がわかれば対処も簡単です。有効的な対処法は大きく2つあります。
- プロトコルをWebDAVにして接続する。
- FTPのファイヤウォールを無効にする。
通信プロトコルを暗号化していないFTPにすれば通信することも可能ですが、第三者に読み取られるリスクがあるので、FTPを使うのはやめておいた方がいいです。
プロトコルをWebDAVにして接続する方法
そもそもWebDAVという言葉が聞き慣れないかもしれませんが、これは、通常のWEBページを閲覧するときに使っているSSLで暗号化された通信 「https」をファイル転送のFTPに応用したものです。
接続先のサーバー側がWebDAVをサポートしていれば、FTPクライアントの設定を変更することでWebDAVを使った接続が簡単にできます。
例として、WinSCPでWebDAVを使った接続方法を紹介します。
設定に必要なのは以下2つです。これはサーバー側で確認することができます。
- サーバー側(ホスト)のWebDAVの名前
- WebDAVにアクセスするためのログインユーザー名とパスワード
例えば、レンタルサーバーがlolipopの場合は、WebDAVのホスト名は「ユーザーアカウント名.webdav-lolipop.jp」になります。
通信の設定は以下のようにします。
- 転送プロトコル: webDAV
- 暗号化: 暗黙のTLS/SSL暗号化
- ポート番号: 443

これで「ログイン」をすれば、WebDAVでの接続が完了します。簡単です。
この状態で、大きなディレクトリを丸ごとダウンロード・アップロードしても、通信が途切れることはありません。
FTPのファイヤウォールを無効にする方法
WebDAVで接続する方法はサーバー側も設定している必要があるので、もしサーバーがWebDAVをサポートしていない場合は、自分のPCのFTPファイヤウォールを無効化する方法で対応できます。
具体的にはWindowsのファイヤウォールで「StatefulFTP(ステートフルFTP)」という設定がデフォルトで有効になっているので、これを無効にします。
設定手順
windowsのロゴボタンをクリックして、検索窓で「cmd」と入力します。
コマンドプロンプトが表示されるので、「管理者として実行」を選択します。

※管理者権限にしておかないと、「要求された操作には、権限の昇格が必要です。管理者として実行してください。」というメッセージが表示されコマンドを実行することができません。
管理者のコマンドプロンプトが起動したら以下を実行します。
netsh advfirewall set global StatefulFTP disable

これで設定は完了です。
以下のコマンドで設定状況を確認することができます(このコマンドは管理者権限でなくとも実行できます)。
netsh advfirewall show global

StatefulFTPが「無効」になっていることが確認できます。以上で設定完了です。
statefulFTPを元に戻したいとき
statefulFTPを「有効」に戻したい時は以下のコマンドを実行します。
netsh advfirewall set global StatefulFTP enable

再度、netsh advfirewall show global コマンドで確認すると、StatefulFTPが「有効」に戻っていることが確認できます。

WindowsのFTPファイヤウォールの設定詳細
なお、WindowsのFTPファイヤウォールの設定については、Windowsの公式ドキュメント FTPファイアウォール設定の構成ページにて確認できます。
Windows ファイアウォールのステートフル FTP パケット検査機能では、ほとんどの場合 SSL は正しく動作しません。これは、Windows ファイアウォールのステートフル FTP 検査フィルターでは、データ接続を確立する際の暗号化トラフィックを解析できないためです。このため、FTP over SSL (FTPS) を使用する予定の場合は、Windows ファイアウォール設定を FTP 向けに個別に構成する必要があります。FTPS トラフィックを許可するように Windows ファイアウォールを構成する最も簡単な方法は、FTP サービスを着信例外一覧に設定することです。
https://docs.microsoft.com/ja-jp/previous-versions/dd939055(v=technet.10)?redirectedfrom=MSDN
FTP通信を検査する、StatefulFTPはSSLでは動作しないと書いてあります。だからデフォルトではFTP over SSL (FTPS)も使えないとのことです。