iptables
SSLがないと、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
。たとえば、これは非常に厳密ではありませんが、少なくともファイアウォールを無効にするよりも制限的です。