无法从外部networking连接到vsftpd

我知道这已被问了很多次,但似乎没有解决我的问题。

我有vsftpd在Ubuntu 10.04上运行。 我可以连接到机器上的ftp localhost。 我可以从我的networking中的另一台机器连接。 我只是不能从外面连接。 机器在Mac机场公用事业pipe理的机场后面。

21根据nmap打开:

macmini:~$ nmap localhost Starting Nmap 5.21 ( http://nmap.org ) at 2011-04-10 23:49 EDT Nmap scan report for localhost (127.0.0.1) Host is up (0.00045s latency). Hostname localhost resolves to 2 IPs. Only scanned 127.0.0.1 rDNS record for 127.0.0.1: localhost.localdomain Not shown: 997 closed ports PORT STATE SERVICE 21/tcp open ftp 22/tcp open ssh 631/tcp open ipp 

netstat说21正在听:

 macmini:~$ netstat -lep --tcp | grep ftp (Not all processes could be identified, non-owned process info will not be shown, you would have to be root to see it all.) tcp 0 0 *:ftp *:* LISTEN 

iptables的:

 macmini:~$ sudo iptables -L Chain INPUT (policy ACCEPT) target prot opt source destination Chain FORWARD (policy ACCEPT) target prot opt source destination Chain OUTPUT (policy ACCEPT) target prot opt source destination 

当我尝试从我的外部IP(或dyndns名称解决那里)连接,它超时。 (“控制连接超时”)

因为我对networking知之甚less,所以我觉得有些东西可能跳出来显然是错误的?

要真正回答你的问题:你的防火墙是如何configuration的? 这听起来像阻止传入的连接。 大多数在端口21上有一个默认的拒绝。实际上,大多数在外部接口上的所有传入连接上都有一个默认的拒绝。 你的防火墙是做NAT / PAT翻译吗? 您是否在被动模式或主动模式下运行FTP? 如果您在主动模式下运行,FTP客户端将需要从您的服务器转发连接,否则连接将失败。 如果您正在被动模式下运行,则需要转发该被动端口范围。 你所有的连接都是在21号港口吗? 默认情况下,他们不会,尽pipe一些客户端(主要是networking浏览器)将使用端口21的数据。

更笼统地说:让FTP通过防火墙正常工作是一个巨大的 PITA,因为FTP早于TCP / IP和TCP / IP模式。 对于从同一个IP到服务器的每个连接,FTP都需要一个不同的端口。 通常使用端口21进行控制连接,使用端口20进行数据连接。 取决于您使用的是主动式还是被动式,FTP将决定您的服务器是否尝试启动这些数据连接,或者客户端是否必须这样做。 如果您使用的是被动FTP,则必须转发的不仅仅是端口21.默认情况下,它的端口是20,但是现在大多数FTP守护进程请求50,000范围内的一系列端口。 您必须查看vsftpdconfiguration文件来查看它想要使用的端口。 此外,请记住,FTP以纯文本格式发送密码,因此非常容易受到中间人和重放攻击等的影响。

FTPd +防火墙=恶梦。 IMX,这个问题的必然答案是“为什么我的FTP服务器不能穿越防火墙?” 是“因为FTP可以追溯到1971年”。

一般来说,我强烈build议切换到sftp(OpenSSH是最常见的Linux守护进程),尽pipe这将需要一段时间来了解sftp的来龙去脉,因为sftp是ssh命令的一个子集。 你必须小心configuration它,否则你会给外部用户shell访问你的服务器。 这很明显,因为突然之间,所有那些说“恶意的本地用户可以……”的安全警报都适用于您。