私は数多くの検索を行っており、毎回少しずつ学習しましたが、私の問題の解決策を見つけていません。
私は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_conntrack
とip_conntrack
を持っていた理由です。
カーネル2.6.19以前を実行している場合、モジュール名はip_nat_ftpおよびip_conntrack_ftpです。
uname -r
でテストします(カーネルバージョンを取得します)
TLS/SSLを無効にして上記をテストしましたが、PASVはRELATED,ESTABLISHED
で問題なく動作します。ただし、TLS/SSLを使用する主な理由は、ユーザー名/パスワードが平文で送信されないようにするためです。
カーネルモジュールをロードする場合ip_conntrack_ftp
これは問題の解決に役立ちます。次のコマンドでモジュールをロードできます
modprobe ip_conntrack_ftp
これは正しくありません:
-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
通常1023より大きいパッシブポートを特定します。
-A INPUT -p tcp --dport 50000:60000 -m state --state RELATED,ESTABLISHED -j ACCEPT
この行をパッシブモードで使用されるポート範囲で修正します。