私のサーバー(ubuntu 16.04 x86_64)でproftpdを使用しています。
デフォルトでは、proftpd は標準ポート 21 を使用します。問題なくアクティブモードを使用して自宅のラップトップからFTPに接続できます。
これでproftpdを停止し、ポートを21から10021に変更し、サービスを再起動しました。これで、アクティブモードでは接続できず、手動モードでのみ接続できます。
何が変わりましたか?
私も理解できませんが、なぜアクティブモードで動作するのですか?ルーターを介してインターネットに接続できます。ルータのどのポートも私のラップトップに転送しません。今すぐ接続すると、私のラップトップ(ftpクライアント)は1023より大きいポートからサーバーポート21への接続を作成します。私のラップトップは2番目の(データ)ポートもサーバーに送信し、サーバーはこのデータを使用して自分のポート20から自分のポートに接続します。しかし、私のポートがWANのために閉じている場合、どのように2番目の接続を確立できますか?
答え1
ファイアウォール(ルーター)にはFTP接続追跡ヘルパーがあります。 FTP 制御接続 (TCP 宛先ポート == 21 で識別される) が見つかったら、コマンドをモニターします。クライアントがコマンドを送信するのを見たら、PORT
コマンドを再作成し(外部IPアドレス、別のポートに)、FTPサーバーから予想される接続を追跡します。接続が到着すると、通過が許可されます。
ポートを変更しても、10021はFTP制御接続として認識されないため、何も起こりません。
少なくともLinuxでは、関数はモジュールであり、nf_conntrack_ftp
必要に応じてports
10021を含むようにオプションを設定できます。
PS:サーバーの前にあるファイアウォールを使用して同様の操作を実行できます。これは逆ですが、これはアクティブモードではなくパッシブモード転送で行われます。