web-dev-qa-db-ja.com

vsftpd-linuxを使用してAzure仮想マシンでパッシブFTPを実行する

Azure Linux仮想マシンでパッシブFTPサーバーを実行するにはどうすればよいですか?

クライアントが「パッシブモードに入る」でハングするため、AzureファイアウォールとPASVポートでエンドポイントを構成するだけでは不十分です。

現在、専用サーバーで行うのと同じようにパッシブFTPをスムーズに実行することは、2つの理由により不可能です。1つは、Azureでは現在サーバーごとに25のエンドポイントしか開くことができないためです(間違っている場合は修正してください)。もう1つは、Azureが使用するLAN <->仮想IP接続です。問題を一つ一つ取り上げていきましょう。

Azureは現在、外部仮想IPから内部ネットワークアドレスにトラフィックを転送するNAT /ファイアウォール/ロードバランサーを実装しています(10.0.0.0/8クラス)。仮想マシンでifconfigを実行すると、私が話していることがわかります。 1つのエンドポイントはSSH用に予約されており、本当に無効にしたいとは思わない。したがって、別のエンドポイントがポート21に予約されている場合、(他のサービスをホストしないとすぐに)23個のPASVポートしか使用できず、同時に接続できるクライアントの数が厳密に制限されます。これを受け入れたら、続けましょう。

ポート25003-25006を(1つずつ)開いた場合は、次の構成を使用してそれらを有効にできます

pasv_enable=YES
pasv_min_port=25003
pasv_max_port=25006

vsftpdおよびその他のFTPサーバーは、基本的に「ポートAAでX.Y.W.Zに接続する」というPASVコマンドを発行します。すべてのFTPサーバーは、ネットワークアドレスを取得するためにマシンの構成を読み取ることになっています。これが、vsftpが基本的に「ポート25003で10.X.Y.Zに接続する」と言う理由であり、クライアントがハングする理由です!!!

次を使用して、vsftpdに別の外部アドレスを使用するように指示します

pasv_addr_resolve=YES
pasv_address=dom.cloudapp.net

テストされ、作業され、コミュニティと共有されました!

注:アクティブFTPは、クライアントがファイアウォールまたは万里の長城の背後にない場合にすぐに機能します。SFTPはFTPの最良の代替手段ですが、残念ながら多くのレガシーアプリケーションはそれをサポートしていません。