iptables での FTP ダウンロードの問題 - ポート 21 の接続は許可されているが、「ネットワークに到達できません」

iptables での FTP ダウンロードの問題 - ポート 21 の接続は許可されているが、「ネットワークに到達できません」

FTP サイトに接続しようとしていますが、例えばwget

Logging in as anonymous ... Logged in!
==> SYST ... done.    ==> PWD ... done.
==> TYPE I ... done.  ==> CWD (1) /gcrypt/gnutls ... done.
==> SIZE v3.2 ... done.
==> PASV ... couldn't connect to 217.69.76.55 port 40258: Network is unreachable

iptables を無効にすると動作するので、明らかにそれが問題です。ただし、すべて適切に設定されていることは確かです。

# Accept related, established...
-A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
-A OUTPUT -m state --state RELATED,ESTABLISHED -j ACCEPT

# ftp/http(s) clients
-A OUTPUT -p tcp -m multiport --dports 21,80,443,8080 -j ACCEPT
-A OUTPUT -p udp --dport 21 -j ACCEPT

どうしたの?

答え1

Iptables では、「RELATED、ESTABLISHED」が機能するために、いくつかのカーネル モジュールをロードする必要があります。HTTP クライアントが正常であれば、明らかにそれらのいくつかがロードされています。

 > lsmod | grep conntrack
 nf_conntrack_ipv4      20258  6 
 nf_defrag_ipv4         12702  1 nf_conntrack_ipv4
 xt_conntrack           12760  6 
 nf_conntrack           99996  2 xt_conntrack,nf_conntrack_ipv4

ただし、ftp 用の はnf_conntrack_ftp追加であり、デバイス ドライバーやファイル システム ドライバーとは異なり、カーネルによって自動的にロードされることはありません。

 > modprobe nf_conntrack_ftp

そうすればいいでしょう。起動時にモジュールを自動ロードするクロスディストリビューションの方法は私の知る限りありませんが、Fedora では以下を追加できます。

IPTABLES_MODULES="nf_conntrack_ftp"

を参照してください。このファイルを使用するがこのファイルを持たない/etc/sysconfig/iptables-config他のシステムについては、 を参照してください。systemdman modules-load.d

関連情報