制限されたファイアウォールルールを使用してSSLを介してFTPを処理する正しい方法は何ですか?

制限されたファイアウォールルールを使用してSSLを介してFTPを処理する正しい方法は何ですか?

iptablesSSLがないと、FTPはnetfilter()+nf_conntrack_ftpカーネルモジュールなどのステートフルファイアウォールで次のように機能します。

# modprobe nf_conntrack_ftp
# iptables -A INPUT -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
# iptables -A INPUT -p tcp --dport 21 -j ACCEPT

問題は、SSLを使用しているときにデータ交換用に選択されたセッションポートを取得するためにセッションを監視できないため、FTP接続追跡モジュールが機能しないことです。したがって、ポートを動的に開くことはできません。

ファイアウォールを無効にせずにSSL対応FTPサーバーを操作する正しい方法はありますか?

詳細については、設定オプションをvsftpd使用して作業しています。ssl_enable=YES

ベストアンサー1

SSLとFTPはさまざまなモードで利用できます。

  • 暗黙のSSL、つまりSSLは最初から(通常はポート990)使用され、決してプレーンテキストではありません。この場合、ファイアウォールの動的データポートに関するプレーンテキスト情報を取得できないため、そのポートにのみ通信を制限することはできません。
  • ログイン前にSSLを有効にするには「AUTH TLS」コマンド明示的なSSLを使用し、ログイン後にSSLを無効にするにはCCCを使用しないでください。これには、使用中のデータポートを読み取れない暗黙のSSLと同じ問題があります。
  • 以前のように明示的なSSLを使用しますが、ログイン後にCCCコマンドを使用します。この場合、ログインはSSLで保護されますが、残りの制御接続ではプレーンテキストを使用します。データ転送は依然としてSSLで保護できます。ftp:ssl-use-ccc同様に、クライアント側でこのモードを有効にする必要がありますlftp。このモードはFTPサーバーでは実行できません。

関連コマンドが暗号化されて正確なデータポートを取得できない場合は、少なくともファイアウォールの制限を減らすことができます。

  • アクティブモードFTPでは、サーバーはポート20でデータ接続を開始するため、確立された iptables -A OUTPUT -p tcp --sport 20 -j ACCEPT接続に似ており、さらにこれらの接続を許可するiptablesルールを持つことができます。
  • vsftpd手動モードFTPでは、提供されているポート範囲を制限および設定pasv_max_portし、pasv_min_port一致ルールを追加できますiptables -A INPUT -p tcp --dport min_port:max_port -j ACCEPT。たとえば、これは非常に厳密ではありませんが、少なくともファイアウォールを無効にするよりも制限的です。

おすすめ記事