FileZillaサーバーで自己署名証明書を設定し、TLS経由のFTPを有効にしました。クライアントのFileZillaから接続すると、認証が可能になります。1日に1〜2回、ディレクトリリストが表示されます...
Status: Connection established, waiting for welcome message...
Status: Initializing TLS...
Status: Verifying certificate...
Status: TLS connection established.
Status: Logged in
Status: Retrieving directory listing...
Status: Directory listing of "/" successful
しかし、残り時間はディレクトリリストを取得できません
Status: Connection established, waiting for welcome message...
Status: Initializing TLS...
Status: Verifying certificate...
Status: TLS connection established.
Status: Logged in
Status: Retrieving directory listing...
Command: PWD
Response: 257 "/" is current directory.
Command: TYPE I
Response: 200 Type set to I
Command: PORT 192,168,1,119,88,109
Response: 200 Port command successful
Command: MLSD
Response: 150 Opening data channel for directory listing of "/"
Response: 425 Can't open data connection for transfer of "/"
Error: Failed to retrieve directory listing
[〜#〜] ftp [〜#〜] プロトコルは少し奇妙なカモのようです。ほとんどのプロトコルが使用する1つだけではなく、2 TCP接続を使用します。ポート21にコマンドとログイン接続、2番目の接続(データ接続)があります。
パッシブFTPの2番目の接続は、ランダムに割り当てられた利用可能なTCP 1024を超えるポートです。
問題は、ファイアウォールで2番目のポートが開いていないことを示しているようです。
通常、合理的にインテリジェントなファイアウォールでは、2番目のポートが自動的に開かれます。 FTPはクリアテキストプロトコルであるため、ファイアウォールはポート21のコマンド接続でトラフィックをスキャンできます。割り当てられるPASVポートを認識し、ファイアウォールを動的に開き、その特定のクライアントとその中で使用されるPASVポート間のトラフィックを許可します。セッション。
正しく機能しないTLS暗号化を使用しているため。 [〜#〜] ftps [〜#〜] を使用すると、ファイアウォールはCOMMANDチャネルをスヌープできなくなります。
解決策:PASVポートを修正する(-range):
1つの解決策は、狭い範囲のポートまたは単一のポートのみを使用するようにFTPサーバーを構成し、それらのポートを開くためのファイアウォールルールを作成することです。それは FileZillaドキュメント で説明されています:
一般設定==>パッシブモード設定==>カスタムポート範囲
そして、ファイアウォールでそのポート範囲を開きます。
さらに、NATルーターの背後にいる場合は、PASV応答にポート番号だけでなく、FTPサーバーのIPアドレスも含まれるという2番目の問題があります。
クリアテキストでFTPを引き続き使用する場合、NATルーターは通常、その内部IPアドレス応答を正しい外部IPアドレスで書き換えることができます。
繰り返しになりますが、FTP overTLSを使用しているためです。
幸い、FileZillaにもその解決策があり、それを修正して、実際の(内部)IPアドレスではなく外部/パブリックIPアドレスをアドバタイズすることができます。