![iptables 1.4 和自定义端口上的被动 FTP](https://linux22.com/image/802593/iptables%201.4%20%E5%92%8C%E8%87%AA%E5%AE%9A%E4%B9%89%E7%AB%AF%E5%8F%A3%E4%B8%8A%E7%9A%84%E8%A2%AB%E5%8A%A8%20FTP.png)
从 debian squeeze 升级到 wheezy 后,我遇到了被动 FTP 连接问题。我可以将其缩小到与 iptables 相关,因为在将我的 IP 添加到 iptables ACCEPT 规则后,我可以通过 FTP 连接,没有任何问题。升级之前,我只能这样做
modprobe nf_conntract_ftp ports=21332
并添加
iptables -A THRU -p tcp --dport 21332 -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT
现在……它不再有帮助了。正如我在计数器中看到的,INPUT 规则正在被触发,但目录列表是它做的最后一件事。设置被动端口范围是我最不想做的事情,我不喜欢开放端口。
我还尝试使用辅助模块添加以下规则前21332 的实际规则
iptables -A THRU -p tcp -i eth0 --dport 21332 -m state --state NEW -m helper --helper ftp-21332 -j ACCEPT
但它没有帮助,甚至没有根据计数器触发。下一行中的规则(无助手)正在被触发
编辑1:这是尝试连接后的日志条目:
Jun 30 15:35:16 loki pure-ftpd: ([email protected]) [INFO] New connection from 84.187.121.71
Jun 30 15:35:16 loki pure-ftpd: ([email protected]) [INFO] crackyftp1 is now logged in
Jun 30 15:35:17 loki kernel: [168039.126400] drop_packet_IN=eth0 OUT= MAC=40:61:86:97:dd:15:00:26:88:75:ec:1d:08:00 SRC=84.187.121.71 DST=88.198.xx.19 LEN=52 TOS=0x00 PREC=0x00 TTL=121 ID=3663 DF PROTO=TCP SPT=42148 DPT=31437 WINDOW=8192 RES=0x00 SYN URGP=0
所以它确实被丢弃了。(被动 FTP 哈^^)
这里有一些信息:
# iptables --version
iptables v1.4.14
# lsmod |grep nf_
nf_nat_ftp 12460 0
nf_nat 18242 1 nf_nat_ftp
nf_conntrack_ftp 12605 1 nf_nat_ftp
nf_conntrack_ipv4 14078 32 nf_nat
nf_defrag_ipv4 12483 1 nf_conntrack_ipv4
nf_conntrack 52720 7 xt_state,nf_conntrack_ipv4,xt_conntrack,nf_conntrack_ftp,nf_nat,nf_nat_ftp,xt_helper
# uname -a
Linux loki 3.2.0-4-amd64 #1 SMP Debian 3.2.46-1 x86_64 GNU/Linux
# iptables-save
# Generated by iptables-save v1.4.14 on Sun Jun 30 03:54:28 2013
*filter
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
:BLACKLIST - [0:0]
:LOGDROP - [0:0]
:SPAM - [0:0]
:THRU - [0:0]
:WEB - [0:0]
:fail2ban-dovecot-pop3imap - [0:0]
:fail2ban-pureftpd - [0:0]
:fail2ban-ssh - [0:0]
-A INPUT -p tcp -m multiport --dports 110,995,143,993 -j fail2ban-dovecot-pop3imap
-A INPUT -p tcp -m multiport --dports 21,21332 -j fail2ban-pureftpd
-A INPUT -p tcp -m multiport --dports 22 -j fail2ban-ssh
-A INPUT -p tcp -m multiport --dports 110,995,143,993 -j fail2ban-dovecot-pop3imap
-A INPUT -i lo -j ACCEPT
-A INPUT -i eth0 -p tcp -m tcp --tcp-flags FIN,SYN,RST,PSH,ACK,URG NONE -j DROP
-A INPUT -i eth0 -p tcp -m tcp --tcp-flags FIN,SYN FIN,SYN -j DROP
-A INPUT -i eth0 -p tcp -m tcp --tcp-flags SYN,RST SYN,RST -j DROP
-A INPUT -i eth0 -p tcp -m tcp --tcp-flags FIN,RST FIN,RST -j DROP
-A INPUT -i eth0 -p tcp -m tcp --tcp-flags FIN,ACK FIN -j DROP
-A INPUT -i eth0 -p tcp -m tcp --tcp-flags ACK,URG URG -j DROP
-A INPUT -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
-A INPUT -j BLACKLIST
-A INPUT -j THRU
-A INPUT -j LOGDROP
-A OUTPUT -j ACCEPT
-A OUTPUT -s 93.223.38.223/32 -j ACCEPT
-A BLACKLIST -s 38.113.165.0/24 -j LOGDROP
-A BLACKLIST -s 202.177.216.0/24 -j LOGDROP
-A BLACKLIST -s 130.117.190.0/24 -j LOGDROP
-A BLACKLIST -s 117.79.92.0/24 -j LOGDROP
-A BLACKLIST -s 72.47.228.0/24 -j LOGDROP
-A BLACKLIST -s 195.200.70.0/24 -j LOGDROP
-A BLACKLIST -s 195.200.71.0/24 -j LOGDROP
-A LOGDROP -m limit --limit 5/sec -j LOG --log-prefix drop_packet_ --log-level 7
-A LOGDROP -p tcp -m tcp --dport 25 -m limit --limit 2/sec -j LOG --log-prefix spam_blacklist --log-level 7
-A LOGDROP -p tcp -m tcp --dport 80 -m limit --limit 2/sec -j LOG --log-prefix web_blacklist --log-level 7
-A LOGDROP -p tcp -m tcp --dport 22 -m limit --limit 2/sec -j LOG --log-prefix ssh_blacklist --log-level 7
-A LOGDROP -j REJECT --reject-with icmp-host-prohibited
-A THRU -p icmp -m limit --limit 1/sec -m icmp --icmp-type 8 -j ACCEPT
-A THRU -i eth0 -p tcp -m tcp --dport 25 -j ACCEPT
-A THRU -i eth0 -p udp -m udp --dport 53 -j ACCEPT
-A THRU -i eth0 -p tcp -m tcp --dport 80 -j ACCEPT
-A THRU -i eth0 -p tcp -m tcp --dport 110 -j ACCEPT
-A THRU -i eth0 -p tcp -m tcp --dport 143 -j ACCEPT
-A THRU -i eth0 -p tcp -m tcp --dport 465 -j ACCEPT
-A THRU -i eth0 -p tcp -m tcp --dport 585 -j ACCEPT
-A THRU -i eth0 -p tcp -m tcp --dport 993 -j ACCEPT
-A THRU -i eth0 -p tcp -m tcp --dport 995 -j ACCEPT
-A THRU -i eth0 -p tcp -m tcp --dport 2008 -m state --state NEW,RELATED,ESTABLISHED -j ACCEPT
-A THRU -i eth0 -p tcp -m tcp --dport 10011 -m state --state NEW,RELATED,ESTABLISHED -j ACCEPT
-A THRU -i eth0 -p tcp -m tcp --dport 21332 -m state --state NEW,RELATED,ESTABLISHED -j ACCEPT
-A THRU -i eth0 -p tcp -m tcp --dport 30033 -m state --state NEW,RELATED,ESTABLISHED -j ACCEPT
-A fail2ban-dovecot-pop3imap -j RETURN
-A fail2ban-dovecot-pop3imap -j RETURN
-A fail2ban-pureftpd -j RETURN
-A fail2ban-pureftpd -j RETURN
-A fail2ban-ssh -j RETURN
-A fail2ban-ssh -j RETURN
COMMIT
# Completed on Sun Jun 30 03:54:28 2013
所以,正如我所说,添加我的 IP 后,连接没有问题……但这不是解决办法,因为除了我之外,没有人可以连接了~如果有人知道问题出在哪里,请帮助我!谢谢
噼啪作响
编辑:
好的,我最终使用/添加了被动端口范围
-A THRU -i eth0 -p tcp -m tcp --dport 21333:21343 -m state --state NEW,RELATED,ESTABLISHED -j ACCEPT
并在 pure-ftpd 配置中设置此范围。
echo "21333 21343" > /etc/pure-ftpd/conf/PassivePortRange
遗憾的是,nf_conntrack_ftp 模块或 iptables 发生了变化或存在错误,导致连接不再被跟踪,就像之前在 squeeze 中工作一样。
答案1
好的,我最终使用/添加被动端口范围作为解决方法
-A THRU -i eth0 -p tcp -m tcp --dport 21333:21343 -m state --state NEW,RELATED,ESTABLISHED -j ACCEPT
并在 pure-ftpd 配置中设置此范围。
echo "21333 21343" > /etc/pure-ftpd/conf/PassivePortRange
遗憾的是,nf_conntrack_ftp 模块或 iptables 发生了变化,或者存在错误,导致连接不再被跟踪就像之前挤压时一样。
答案2
读了上面的内容,我不明白端口 21332 有什么神奇之处。只要 FTP 服务器选择的被动端口恰好是 21332,您编写的所有内容都应该可以正常工作。但是,您没有显示任何可以保证这一点的内容。在最近的升级中,您的旧 ftpd 配置文件(其中有一些条目保证此端口选择)是否可能被移到了一边?
请注意,在您上面发布的 iptables 日志中,dport 是 31437。我仍然不相信 ftpd 选择了看似必要的端口 21332。