iptables nf_conntrack_ftp 不工作?
我已經對帶有被動 FTP 的 iptables 進行了大量研究,但歸結為使用 nf_conntrack_ftp 並允許相關/已建立的連接通過。
但不知何故,這在我的伺服器上不起作用……
然而奇怪的是:
# cat /proc/net/ip_tables_matches conntrack conntrack conntrack multiport udplite udp tcp icmp # modprobe nf_conntrack_ftp # echo $? 0 # cat /proc/net/ip_tables_matches conntrack conntrack conntrack multiport udplite udp tcp icmp
==> 所以沒有載入 conntrack-ftp 模組?那是對的嗎?
然後我將這些規則添加到 iptables:
-A INPUT -p tcp --dport 21 -m state --state ESTABLISHED,NEW -j ACCEPT [was there already anyhow] -A INPUT -p tcp --dport 20 -m state --state ESTABLISHED -j ACCEPT -A INPUT -p tcp --dport 1024: -m state --state RELATED,ESTABLISHED -j ACCEPT -A INPUT -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
這是我在客戶端看到的:
[10:47:59] [R] 227 Entering Passive Mode (88,198,90,5,131,43). [10:47:59] [R] Opening data connection IP: 88.198.90.5 PORT: 33579 [10:48:20] [R] Data Socket Error: Connection timed out [10:48:21] [R] List Error [10:48:21] [R] PASV mode failed, trying PORT mode. [10:48:21] [R] Listening on PORT: 52317, Waiting for connection. [10:48:21] [R] PORT 192,168,178,50,204,93 [10:48:21] [R] 200 PORT command successful. Consider using PASV.
所以 PASV 不起作用(它超時並恢復為 PORT)。
“iptables -m conntrack –help” 給了我資訊,但是 nf_conntrack_ftp、nf_conntrack、conntrack_ftp 都給了我:
iptables v1.6.0: Couldn't load match `...':No such file or directory
INPUT 策略是 DROP,OUTPUT 是 ACCEPT…
# ls -1 /lib/modules/`uname -r`/kernel/net/netfilter/ ipset ipvs nf_conntrack_amanda.ko nf_conntrack_broadcast.ko nf_conntrack_ftp.ko nf_conntrack_h323.ko nf_conntrack_irc.ko nf_conntrack.ko nf_conntrack_netbios_ns.ko nf_conntrack_netlink.ko nf_conntrack_pptp.ko nf_conntrack_proto_dccp.ko nf_conntrack_proto_gre.ko nf_conntrack_proto_sctp.ko nf_conntrack_proto_udplite.ko nf_conntrack_sane.ko nf_conntrack_sip.ko nf_conntrack_snmp.ko nf_conntrack_tftp.ko nf_dup_netdev.ko nf_log_common.ko nf_nat_amanda.ko nf_nat_ftp.ko nf_nat_irc.ko nf_nat.ko nf_nat_proto_dccp.ko nf_nat_proto_sctp.ko nf_nat_proto_udplite.ko nf_nat_redirect.ko nf_nat_sip.ko nf_nat_tftp.ko nfnetlink_acct.ko nfnetlink_cthelper.ko nfnetlink_cttimeout.ko nfnetlink.ko nfnetlink_log.ko nfnetlink_queue.ko nf_synproxy_core.ko nf_tables_inet.ko nf_tables.ko nf_tables_netdev.ko nft_compat.ko nft_counter.ko nft_ct.ko nft_dup_netdev.ko nft_exthdr.ko nft_fwd_netdev.ko nft_hash.ko nft_limit.ko nft_log.ko nft_masq.ko nft_meta.ko nft_nat.ko nft_numgen.ko nft_queue.ko nft_quota.ko nft_redir.ko nft_reject_inet.ko nft_reject.ko nft_set_hash.ko nft_set_rbtree.ko x_tables.ko xt_addrtype.ko xt_AUDIT.ko xt_bpf.ko xt_cgroup.ko xt_CHECKSUM.ko xt_CLASSIFY.ko xt_cluster.ko xt_comment.ko xt_connbytes.ko xt_connlabel.ko xt_connlimit.ko xt_connmark.ko xt_CONNSECMARK.ko xt_conntrack.ko xt_cpu.ko xt_CT.ko xt_dccp.ko xt_devgroup.ko xt_dscp.ko xt_DSCP.ko xt_ecn.ko
我希望有人能指出我在這裡做錯了什麼……
非常感謝!
編輯:我目前的設置:
# Generated by iptables-save v1.6.0 on Sat Dec 9 18:25:25 2017 *raw :PREROUTING ACCEPT [0:0] :OUTPUT ACCEPT [0:0] COMMIT # Completed on Sat Dec 9 18:25:25 2017 # Generated by iptables-save v1.6.0 on Sat Dec 9 18:25:25 2017 *filter :INPUT DROP [0:0] :FORWARD ACCEPT [0:0] :OUTPUT ACCEPT [0:0] -A INPUT -s 127.0.0.1/32 -j ACCEPT -A INPUT -i lo -j ACCEPT -A INPUT -p tcp -m state --state RELATED,ESTABLISHED -j ACCEPT -A INPUT -p tcp -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT -A INPUT -p icmp -m icmp --icmp-type 0 -m state --state RELATED,ESTABLISHED -j ACCEPT -A INPUT -p udp -m udp --sport 53 -m state --state RELATED,ESTABLISHED -j ACCEPT -A INPUT -p udp -m udp --dport 123 -j ACCEPT -A INPUT -p tcp -m tcp --dport 22 -j ACCEPT -A INPUT -p tcp -m tcp --dport 80 -j ACCEPT -A INPUT -p tcp -m tcp --dport 443 -j ACCEPT -A INPUT -p tcp -m tcp --dport 25 -j ACCEPT -A INPUT -p tcp -m tcp --dport 110 -j ACCEPT -A INPUT -p tcp -m tcp --dport 21 -j ACCEPT -A INPUT -p tcp -m tcp --dport 21 -m state --state NEW,ESTABLISHED -j ACCEPT -A INPUT -p tcp -m tcp --dport 20 -m state --state ESTABLISHED -j ACCEPT -A INPUT -p tcp -m tcp --dport 1024:65535 -m state --state RELATED,ESTABLISHED -j ACCEPT -A INPUT -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT COMMIT # Completed on Sat Dec 9 18:25:25 2017
我認為在某些時候
nf_conntrack_*
模組已更改,因此您現在必須明確指定特殊協議的埠號。對於 FTP,我的
/etc/modprobe.d/iptables.conf
文件中有這個模組選項行:options nf_conntrack_ftp ports=21
它告訴
nf_conntrack_ftp
模組期望 FTP 控制流量專門在埠 21 中。它曾經是預設值,但我認為預設值已被刪除以支持顯式配置,早在 2012 年左右。在核心版本 3.5 中,可以禁用自動 conntrack 助手分配,看起來目前的做法是預設禁用它。
請參閱: https ://home.regit.org/netfilter-en/secure-use-of-helpers/
據此,甚至可能有必要(或至少更可取)在
iptables
FORWARD 規則中顯式呼叫適當的 conntrack 助手。這樣,您可以指定應該使用幫助程序的確切情況,從而最大限度地減少欺騙的風險。