
誰かが私に正しい方向を指し示してくれることを願っています。
パブリック 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とデータ接続用の固定ポート範囲の両方を開きます