iptables FTP接続追跡が機能しない

iptables FTP接続追跡が機能しない

誰かが私に正しい方向を指し示してくれることを願っています。

パブリック IP 上で proftpd (tls サポート付き) を実行します。

FTP クライアントは接続しますが、ディレクトリの一覧表示ができません。iptables の「INPUT」ポリシーを ACCEPT に変更すると、動作します。

以下は関連する iptables ルールです。

$IPTABLES -A INPUT -i eno1 -s 0/0 -d x.x.x.x -p tcp --sport 1024:65535 -m multiport --dports 20,21,989,990 -m state --state NEW,ESTABLISHED -j ACCEPT
$IPTABLES -A INPUT -p tcp -s 0/0 --sport 1024:65535 -d x.x.x.x --dport 1024:65535 -m state --state ESTABLISHED,RELATED -j ACCEPT

connection_tracking モジュールを有効にしました。

server ~ # lsmod | grep nf_conntra
nf_conntrack_ftp       24576  3
nf_conntrack          176128  8 xt_conntrack,nf_nat,xt_state,xt_nat,xt_helper,nf_conntrack_ftp,xt_CT,xt_MASQUERADE
nf_defrag_ipv6         24576  1 nf_conntrack
nf_defrag_ipv4         16384  1 nf_conntrack
libcrc32c              16384  2 nf_conntrack,nf_nat

/procでnf_conntrack_helperも有効にしています

server ~ # cat /proc/sys/net/netfilter/nf_conntrack_helper
1

答え1

proftpd (tls サポート付き)

おそらく TLS サポートが原因と思われます。

通常、インテリジェント ファイアウォールで FTP を許可する場合、制御接続用のポート (TCP 21) を開く必要があります。その後、クリア テキスト FTP プロトコルで、conntrack モジュールが応答をスキャンして検出できますPORT。その後、FTP conntrack ヘルパー モジュールが、FTP サーバーによって特定のクライアントに割り当てられたポート番号を自動的に開き、非常にきめ細かいアクセス制御が可能になります。

接続が TLS で暗号化されると、ファイアウォールは PORT 応答を検出できなくなり、割り当てられたポートを自動的に開くことができなくなります。その解決策は次のとおりです。

  • FTPサーバーがパッシブ接続に使用するポートの範囲を狭い範囲に固定する
    PassivePorts min-pasv-port max-pasv-port

  • ファイアウォールでポート21とデータ接続用の固定ポート範囲の両方を開きます

関連情報