web-dev-qa-db-ja.com

FTPPASVモード接続用のLinuxiptablesのセットアップ

私は数多くの検索を行っており、毎回少しずつ学習しましたが、私の問題の解決策を見つけていません。

私はvsftpdをセットアップし、SSL/TLS iveを使用して必要に応じて機能させましたが、以下のiptableルールを適用できません。主にPASVモードは機能しません。 iptables -Fを使用すると、すべてが期待どおりに機能します。以下のルールを適用するとすぐに接続されますが、クライアント(CuteFTP)はPASVモードに入ろうとしてタイムアウトします。

私のIPテーブルのルールは次のとおりです。

*filter
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT

# ssh
-A INPUT -p tcp -m tcp --dport 22 -j ACCEPT

# web
-A INPUT -p tcp -m tcp --dport 80 -j ACCEPT

# ssl
#-A INPUT -p tcp -m tcp --dport 443 -j ACCEPT

# Subversion
-A INPUT -p tcp -m tcp --dport 3690 -j ACCEPT

# ftp + active ftp + pasv ftp
-A INPUT -p tcp --dport 21 -m state --state ESTABLISHED,NEW -j ACCEPT
-A INPUT -p tcp --dport 20 -m state --state ESTABLISHED -j ACCEPT
-A INPUT -p tcp --dport 50000:60000 -m state --state RELATED,ESTABLISHED -j ACCEPT

# mysql
-A INPUT -p tcp -m tcp --dport 3306 -s 67.181.185.126 -j ACCEPT
-A INPUT -p tcp -m tcp --dport 3306 -s 98.224.120.34 -j ACCEPT
-A INPUT -p tcp -m tcp --dport 3306 -s 174.143.169.230 -j ACCEPT

# ping
-A INPUT -p icmp -j ACCEPT


-A INPUT -i lo -j ACCEPT
-A INPUT -j DROP
-A FORWARD -m state --state RELATED,ESTABLISHED -j ACCEPT
-A OUTPUT -m state --state NEW,RELATED,ESTABLISHED -j ACCEPT
COMMIT

私は(テスト目的で)使用してそれらをロードします:

iptables-restore < /etc/iptables.test.rules

参考までに、Ubuntu 10.04 LTSを実行しています。さらに、次のコマンドで取得する出力をいくつか示します。

lsmod

Module                  Size  Used by
xt_conntrack            2303  1
xt_helper               1155  0
nf_nat_ftp              1751  0
nf_nat                 12653  1 nf_nat_ftp
ipv6                  220702  16
xt_state                1215  4
nf_conntrack_ftp        5108  1 nf_nat_ftp
nf_conntrack_ipv4       9505  7 nf_nat
nf_conntrack           43972  7 xt_conntrack,xt_helper,nf_nat_ftp,nf_nat,xt_state,nf_conntrack_ftp,nf_conntrack_ipv4
iptable_filter          2218  1
ip_tables              13794  1 iptable_filter
nf_defrag_ipv4          1051  1 nf_conntrack_ipv4
dm_mirror              11338  0
dm_region_hash          6224  1 dm_mirror
dm_log                  7341  2 dm_mirror,dm_region_hash
dm_snapshot            23956  0
dm_mod                 50258  3 dm_mirror,dm_log,dm_snapshot

locate _ftp

/lib/modules/2.6.33.5-rscloud/kernel/net/ipv4/netfilter/nf_nat_ftp.ko
/lib/modules/2.6.33.5-rscloud/kernel/net/netfilter/ipvs/ip_vs_ftp.ko
/lib/modules/2.6.33.5-rscloud/kernel/net/netfilter/nf_conntrack_ftp.ko
/lib/security/pam_ftp.so
/usr/share/man/man8/pam_ftp.8.gz

さらに、vsftpd.confパッシブポートは次のように設定されています。

pasv_min_port=50000
pasv_max_port=60000

モジュールをmodprobe ip_conntrack_ftpでロードしようとしましたが、機能していないようです。上記の出力を介して、モジュールがシステム上にないか、nf_conntrack_ftp ... nf_モジュールに取って代わられているようです.。

最終編集

だから私は私の答えを見つけたと思います: http://www.shorewall.net/FTP.html#Conntrack

Ftpヘルパーモジュールは、コマンドチャネルを介して送信されるコマンドを読み取って変更する必要があるため、TLS/SSLを使用してコマンドチャネルが暗号化されている場合は機能しません。

さらに、混乱を引き起こしていたもう1つの興味深い事実は、私がnf_conntrackip_conntrackを持っていた理由です。

カーネル2.6.19以前を実行している場合、モジュール名はip_nat_ftpおよびip_conntrack_ftpです。

uname -rでテストします(カーネルバージョンを取得します)

TLS/SSLを無効にして上記をテストしましたが、PASVはRELATED,ESTABLISHEDで問題なく動作します。ただし、TLS/SSLを使用する主な理由は、ユーザー名/パスワードが平文で送信されないようにするためです。

2
farinspace

カーネルモジュールをロードする場合ip_conntrack_ftpこれは問題の解決に役立ちます。次のコマンドでモジュールをロードできます

modprobe ip_conntrack_ftp

2
poige

これは正しくありません:

-A INPUT -p tcp --dport 50000:60000 -m state --state RELATED,ESTABLISHED -j ACCEPT

そのはず :

-A INPUT -p tcp --dport 50000:60000 -m state --state RELATED,ESTABLISHED,NEW -j ACCEPT

5
mra

通常1023より大きいパッシブポートを特定します。

-A INPUT -p tcp --dport 50000:60000 -m state --state RELATED,ESTABLISHED -j ACCEPT

この行をパッシブモードで使用されるポート範囲で修正します。

0
Sim