手動ポートを使用してTLSを介したFTPを許可するようにIPTableを変更します。

手動ポートを使用してTLSを介したFTPを許可するようにIPTableを変更します。

私はアーチLinuxを使用しています。チュートリアルに従って、Webサーバーのデフォルトポートのみを許可するように/etc/iptables/iptables.rulesを変更しました。また、/etc/modules-load.d/nf_conntrack_ftp.confを使用してモジュールを有効にし、/etc/modprobe.d/ip_conntrack_ftp.confで使用されているデフォルトのFTPポートを変更しました。 2つの質問があります。 「500 Illegal Port Command」および「ERRCONNREFUSED」エラーが発生し、FTPが機能しません。アクティブモードに切り替えて通常のFTPを通過すると動作します。だからiptablesに問題があります。また、iptablesは私が許可してもIPv6接続を許可しません。他のファイルを変更する必要がありますか?ありがとうございます。以下はiptables.rulesのスクリーンショットです:iptables ルール

もちろん、この記事を投稿する前にFTPポートを変更しました。

ベストアンサー1

重要な要約:FTPは壊れたプロトコルであり、FTPSはさらにそうです。プロトコル設計と暗号化の組み合わせにより、ファイアウォールでは非常に正しく動作しません。 SFTP(SSHプロトコルを介したファイル転送)を試してください。


FTPは制御接続(通常ポート21)とデータ接続で構成されています。データ接続に使用されるポートは、制御接続内で動的に交換されます。アクティブモードでは、クライアントはPORTまたはEPRTコマンドで指定されたIP /ポートを受信し、サーバーはクライアントに接続します。パッシブモードでは、サーバーはPASVまたはEPSVコマンドに応答して提供されたIP /ポートを受信し、クライアントはサーバーに接続します。

ファイアウォール構成でこれらの動的ポートを処理する1つの方法は、広範囲のポートを開いたままにすることです。これは、ファイアウォールを使用して攻撃面を最大限に制限するという考えとは明らかに矛盾しています。したがって、ほとんどのファイアウォールは、必要に応じて一致するパケットフィルタリングルールを作成できるように制御接続を確認し、動的接続に使用されるポートを見つける「ヘルパー」を提供します。 iptablesの場合、これはip_conntrack_ftpで内部的に行われます。これが今あなたが試していることです。

残念ながら、これらのヘルパーを使用することは、ファイアウォールが制御接続内でトラフィックを読み取ることができる必要があることを意味します。これは、暗号化されていない通常のFTPを使用しない場合に可能です。ただし、FTP + TLSを使用すると制御接続が暗号化されるため、ヘルパーは要求時にポートを開くために必要な情報を抽出できません。 TLSを使用して認証部分のみを送信してから暗号化をオフにする(FTPSコマンドCCC)理論的方法がありますが、これにはクライアントのサポートと使用が必要です。

したがって、可能であればFTPとFTPSを使用せず、代わりにSFTPを使用してください。これはファイル転送のためにSSHプロトコルを介して行われ、単一のポートのみを使用するため、限られたファイアウォール設定が簡単になります。

おすすめ記事