我有一个在Fedora Linux服务器上运行的iptables防火墙,它基本上被用作防火墙路由器和OpenVPN服务器。 而已。 我们一直在为YEARS使用相同的iptables防火墙代码。 我在12月21日做了一些改动,重新路由了一个mySQL端口,但考虑到发生了什么,我完全支持这些改变。 有些时候,这些改变后,从一个vsftpd进程中,被动的FTP退出,停止工作。 我们使用一个被动的ftp客户端来FLING(这是在Windows下运行的ftp客户端的名字:-))从我们的远程望远镜到我们的服务器的图像。
我相信这是在防火墙代码中的东西,因为我可以放弃防火墙和FTP文件传输(并通过Internet Explorer连接到FTP站点以查看文件列表)。 当我提高iptables防火墙,它停止工作。
再一次,这是我们多年来一直使用的代码。 但是,我觉得可能是我错过了,所以我使用了2009年的.bak文件。 同样的行为,被动的ftp不起作用。
所以,我一行一行地重新编译防火墙代码,看看是什么原因导致了这个问题。 一切工作,直到我把线
-A FORWARD -j DROP
在非常接近结束。 当然,如果我正确的话,那就是基本上“打开”防火墙的线路,除了上面所说的例外情况外,其他的一切都放弃了。 但是,自2003年以来,这条线一直在iptables的代码。
所以,我在绳子的尽头,我仍然不知道为什么这个停止工作。 我想我需要一个iptablesconfiguration专家。
这里是带有注释的iptables代码(来自iptables-save)。
# Generated by iptables-save v1.3.8 on Thu Jan 5 18:36:25 2012 *nat # One of the things that I remain ignorant about is what these following three lines # do in both the nat tables (which we're not using on this machine) and the following # filter table. I don't know what the numbers are, but I'm ASSUMING they're port # ranges. # :PREROUTING ACCEPT [7435:551429] :POSTROUTING ACCEPT [6097:354458] :OUTPUT ACCEPT [5:451] COMMIT # Completed on Thu Jan 5 18:36:25 2012 # Generated by iptables-save v1.3.8 on Thu Jan 5 18:36:25 2012 *filter :INPUT ACCEPT [10423:1046501] :FORWARD ACCEPT [0:0] :OUTPUT ACCEPT [15184:16948770] # The following line is for my OpenVPN configuration. -A INPUT -i tun+ -j ACCEPT # In researching this on the Internet I found some iptables code that was supposed to # open the needed ports up. I never needed this before this week, but since passive FTP # was no longer working, I decided to put the code in. The next three lines are part of # that code. -A INPUT -p tcp -m tcp --dport 21 -m state --state NEW,ESTABLISHED -j ACCEPT -A INPUT -p tcp -m tcp --sport 1024:65535 --dport 20 -m state --state ESTABLISHED -j ACCEPT -A INPUT -p tcp -m tcp --sport 1024:65535 --dport 1024:65535 -m state --state RELATED,ESTABLISHED -j ACCEPT # Another line for the OpenVPN configuration. I don't know why the iptables-save mixed # the lines up. -A FORWARD -i tun+ -j ACCEPT # Various forwards for all our services -A FORWARD -s 65.118.148.197 -p tcp -m tcp --dport 3307 -j ACCEPT -A FORWARD -d 65.118.148.197 -p tcp -m tcp --dport 3307 -j ACCEPT -A FORWARD -s 65.118.148.197 -p tcp -m tcp --dport 3306 -j ACCEPT -A FORWARD -d 65.118.148.197 -p tcp -m tcp --dport 3306 -j ACCEPT -A FORWARD -s 65.118.148.196 -p tcp -m tcp --dport 21 -j ACCEPT -A FORWARD -d 65.118.148.196 -p tcp -m tcp --dport 21 -j ACCEPT -A FORWARD -d 65.118.148.196 -p tcp -m tcp --dport 20 -j ACCEPT -A FORWARD -s 65.118.148.196 -p tcp -m tcp --dport 20 -j ACCEPT -A FORWARD -s 65.118.148.196 -p tcp -m tcp --dport 7191 -j ACCEPT -A FORWARD -d 65.118.148.196 -p tcp -m tcp --dport 7191 -j ACCEPT -A FORWARD -s 65.118.148.196 -p tcp -m tcp --dport 46000:46999 -j ACCEPT -A FORWARD -d 65.118.148.196 -p tcp -m tcp --dport 46000:46999 -j ACCEPT -A FORWARD -s 65.118.148.0/255.255.255.0 -j ACCEPT -A FORWARD -d 65.118.148.196 -p udp -m udp --dport 53 -j ACCEPT -A FORWARD -s 65.118.148.196 -p udp -m udp --dport 53 -j ACCEPT -A FORWARD -d 65.118.148.196 -p tcp -m tcp --dport 53 -j ACCEPT -A FORWARD -s 65.118.148.196 -p tcp -m tcp --dport 53 -j ACCEPT -A FORWARD -d 65.118.148.196 -p udp -m udp --dport 25 -j ACCEPT -A FORWARD -s 65.118.148.196 -p udp -m udp --dport 25 -j ACCEPT -A FORWARD -d 65.118.148.196 -p tcp -m tcp --dport 42 -j ACCEPT -A FORWARD -s 65.118.148.196 -p tcp -m tcp --dport 42 -j ACCEPT -A FORWARD -s 65.118.148.196 -p tcp -m tcp --dport 25 -j ACCEPT -A FORWARD -d 65.118.148.196 -p tcp -m tcp --dport 25 -j ACCEPT -A FORWARD -d 65.118.148.196 -p tcp -m tcp --dport 80 -j ACCEPT -A FORWARD -s 65.118.148.196 -p tcp -m tcp --dport 80 -j ACCEPT -A FORWARD -d 65.118.148.204 -p tcp -m tcp --dport 80 -j ACCEPT -A FORWARD -s 65.118.148.204 -p tcp -m tcp --dport 80 -j ACCEPT -A FORWARD -d 65.118.148.196 -p tcp -m tcp --dport 6667 -j ACCEPT -A FORWARD -s 65.118.148.196 -p tcp -m tcp --dport 6667 -j ACCEPT -A FORWARD -s 65.96.214.242 -p tcp -m tcp --dport 22 -j ACCEPT -A FORWARD -s 192.68.148.66 -p tcp -m tcp --dport 22 -j ACCEPT -A FORWARD -m state --state RELATED,ESTABLISHED -j ACCEPT # "The line" that causes passive ftp to stop working. Insofar as I can tell, everything # else seems to work - ssh, telnet, mysql, httpd. -A FORWARD -j DROP -A FORWARD -p icmp -j ACCEPT # The following code is again part of my attempt to put in code that would cause passive # ftp to work. I don't know why iptables-save scattered it about like this. -A OUTPUT -p tcp -m tcp --sport 21 -m state --state ESTABLISHED -j ACCEPT -A OUTPUT -p tcp -m tcp --sport 20 --dport 1024:65535 -m state --state RELATED,ESTABLISHED -j ACCEPT -A OUTPUT -p tcp -m tcp --sport 1024:65535 --dport 1024:65535 -m state --state ESTABLISHED -j ACCEPT COMMIT # Completed on Thu Jan 5 18:36:25 2012
所以,所有这些前奏,我的基本问题是:我怎样才能让被动的ftp工作在iptables防火墙之后? 正如你所看到的,我试图让它工作(再次),并试图做一些关于这个问题的研究,但已经提出…简短。
任何答案都将受到我和世界各地的各种变星天文学家的赞赏! 谢谢!
美国协会的“Doc”Kinne。 变星观察员,[email protected]
最简单的select是将vsftpdconfiguration为一系列用于PASV连接的端口(使用pasv_max_port和pasv_min_port ),然后允许该端口范围内的所有传入连接通过防火墙。
看你的iptables规则,我假设你打算转发你的FTPstream量到主机65.118.148.196 – 我也假设65.118.148.196不是你的iptables运行的主机。
为了使iptables成功地以这种方式转发PASV FTPstream量,必须加载iptables conntrack模块。
为此,请修改/etc/sysconfig/iptables-config文件。 前几行应该是这样的:
# Load additional iptables modules (nat helpers) # Default: -none- # Space separated list of nat helpers (eg 'ip_nat_ftp ip_nat_irc'), which # are loaded after the firewall rules are applied. Options for the helpers are # stored in /etc/modprobe.conf. IPTABLES_MODULES=""
将标记为IPTABLES_MODULES=""的空间更新为以下内容: IPTABLES_MODULES="ip_conntrack_ftp" 。 可以使用-m conntrack标志作为规则的一部分加载这些模块,这样做会导致在重新启动规则时刷新模块。 这将与您在post中描述的行为一致。 以上述方式configuration模块将使用iptables加载模块,而不是特定的规则。 更新/etc/sysconfig/iptables-config您将需要重新启动iptables服务。
要为您提供完全正确的iptables规则,我们需要知道您的FTP服务器configuration为用于PASV的确切端口范围。
我的IP表非常生疏,但是如果一旦告诉防火墙只允许明确定义的连接,问题就会出现,那么您试图build立的连接似乎并没有被规则正确定义。 你确定你的客户端和服务器都试图使用相同的端口吗?
而且,虽然IP表是一个非常强大的防火墙,但它并不是最方便用户的。 也许是时候考虑新的软件。