重複の可能性:
IPTablesでFTPを許可する
私はftpで接続することを可能にする次のルールを持つiptablesルールのかなり制限されたセットを持っています
iptables -A INPUT -p tcp --dport 21 -j ACCEPT
クライアントは正常に接続できますが、それだけです。問題が発生する直前のftpクライアントからの次の出力が役立つ場合があります。
Command: MLSD
Error: Connection timed out
Error: Failed to retrieve directory listing
IPテーブルを停止すると、すべてが期待どおりに機能します
CentOSリリース5.5(最終版)
proftpd-1.3.3c-3
「関連する」接続を許可するには、追加のルールが必要です。これは、FTPプロトコルがコマンド用に1つのポートを使用し、データ用に別のポートを使用しているためです。
iptables -A INPUT -p tcp --dport 21 -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT
また、関連する接続を追跡するためにロードする必要があるカーネルモジュールがあります。これはip_conntrack_ftpと呼ばれますが、ロードする方法はディストリビューションによって異なります。
ヘドラっぽいシステムでは、/etc/sysconfig/iptables-config
に色目があります
違いを打破するためだけに:
アクティブFTP:クライアントはサーバーのポート21に接続します。これが制御チャネルです。ファイルまたはディレクトリリストの取得はデータ転送であり、サーバーはクライアントに接続して送信を試みます。ほとんどのクライアントがNATされ、ファイアウォールで保護されている方法を考えると、これは最近ではほとんど機能しません。
パッシブFTP:まだデータチャネルが必要ですが、今回はサーバーがポート番号をクライアントに送り返し、クライアントがanotherそのポートでサーバーに接続し直します。
パッシブのデータ接続でタイムアウトする理由は、データポートがまだブロックされているためです。 FTPサーバーソフトウェアに応じて、通常、サーバーが送信するポートの範囲を指定できます(例:50000-50010)。次に、そのポート範囲でインバウンド接続を受け入れる必要もあります。 (同時接続の数も、使用可能なポートの数と同じに制限するようにしてください。)
私はproftpdに精通していませんが、必要なことを実行できると思います。
編集 Noodlの答えは、データ接続を許可するための最善の策ですが、追跡を容易にするために、とにかくポート範囲について具体的にしたい場合があります。
NATを使用していると仮定して、パッシブFTPを使用するようにクライアントを設定してみてください。
Filezillaの接続設定では、コマンドラインで「パッシブ」でオンにする必要があると思います。ls/ dirコマンドの前にオンにしてください。
Netfilterconntrackモジュールを使用できます。
modprobe nf_conntrack_ftp
そして、起動時に/ etc/sysconfig/iptables-configにロードされます:
IPTABLES_MODULES="nf_conntrack_ftp"