需要帮助在 Ubuntu 10.10 中将 FTP 添加到 IPTables

需要帮助在 Ubuntu 10.10 中将 FTP 添加到 IPTables

我有一个在 LAMP 堆叠 VPS 上运行的现有 IPtables 脚本,我需要帮助允许 FTP 连接,以便我可以将文件上传和下载到我的 Web 服务器。

我已经在 ubuntu 上安装了 vsftpd,并将其配置为经过身份验证的用户访问,但我认为我的防火墙拒绝了连接请求。

我尝试使用 modprobe ip_conntrack_ftp 加载模块。但我仍然无法通过 FTP 连接

*filter
#  Allows all loopback (lo0) traffic and drop all traffic to 127/8 that doesn't use lo0
-A INPUT -i lo -j ACCEPT
-A INPUT -i ! lo -d 127.0.0.0/8 -j REJECT

#  Accepts all established inbound connections
-A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

#  Allows all outbound traffic
#  You could modify this to only allow certain traffic
#  This is in addition to allowing established and related traffic as listed above
-A OUTPUT -j ACCEPT

# Allows HTTP and HTTPS connections from anywhere (the normal ports for websites)
-A INPUT -p tcp --dport 80 -j ACCEPT
-A INPUT -p tcp --dport 443 -j ACCEPT

#Allows FTP traffic
-A INPUT -p tcp -m tcp --dport 20 -j LOG
-A INPUT -p tcp -m tcp --dport 21 -j LOG
-A OUTPUT -p tcp -m tcp --sport 20 -j LOG
-A OUTPUT -p tcp -m tcp --sport 21 -j LOG

#  Allows SSH connections from trusted-host only - drop the rest
-A INPUT -p tcp -m state --state NEW --source 84.70.321.123 --dport 30000 -j ACCEPT
-A INPUT -p tcp --dport 30000 -j DROP

# Create time lock for non-wanted SSH attempts of a period of 1 minute
-A INPUT -p tcp -m state --syn --state NEW --dport 30000 -m limit --limit 1/minute     -limit-burst 1 -j ACCEPT
-A INPUT -p tcp -m state --syn --state NEW --dport 30000 -j DROP

# Allow ping
-A INPUT -p icmp -m icmp --icmp-type 8 -j ACCEPT
COMMIT

我一直能连接但不知道为什么。

请用最简单的术语解释这一点,因为它看起来有点复杂,而且我发现很多人都有类似的问题,简单的解释会有所帮助。

答案1

FTP 可能是一个有问题的协议。我已经习惯了完全不使用它(用大多数 SSH 软件包提供的更安全、更高效的 SCP 或 SFTP 来代替它,或者(更好的是)在可用的情况下使用 ssh 上的 rsync)。

但需要寻找或尝试的事情:

  • 如果您的防火墙暂时设置为接受任何内容,请检查以确保其正常工作。这将确认您的防火墙设置存在问题,而不是其他地方的问题。
  • 确保客户端使用的是 PASV 模式,否则服务器将尝试连接回客户端,而该端的阻止可能是问题所在,而不是防火墙的问题。
  • 检查客户端尝试使用哪个端口进行数据连接(好的 FTP 客户端将有一个选项来查看命令连接上发送的内容的完整日志,在尝试传输之前查找 PORT 命令)。请参阅http://slacksite.com/other/ftp.html有关如何解释 PASV 命令(以及主动模式和被动模式之间的区别)的说明。
  • 您没有说明 FTP 客户端是否连接成功,或者在获取目录列表或获取/发送文件时是否失败。如果是后者,则主动/被动模式就毫无意义了(只有在命令连接打开后才会起作用)。再次查看日志,或尝试使用命令行客户端。如果 FTP 客户端能够建立连接(并接受您的用户名/密码),则表示您已成功获得命令连接。

虽然我的一般建议是,假设你能与用户达成一致,那么通过 SSH 使用 SFPT/SCP 而不是 FTP。我通过向用户解释更好的安全性和效率来与用户达成一致,如果这行不通,我会说“如果你真的想使用 FTP,那么请考虑使用其他服务”。几乎所有的 Linux 设置都具有命令行支持和 GUI 支持(例如,在 Ubuntu 的默认文件管理器中输入 sftp://server.domain.tld/ 或类似内容),并且有几种适用于 Windows 的优秀客户端(我使用温SCP用于 GUI 使用,Cygwin 的 OpenSSH 包用于命令行使用,尽管 WinSCP 也支持命令行使用)。

答案2

默认情况下,vsftp.conf 应该有以下行:

connect_from_port_20=yes

这会将 vsFTP 设置为主动模式,从而通过端口 20 连接回客户端。如果未启用该模式,则意味着 vsFTP 设置为被动模式,这将要求您在防火墙中打开 1024 以上的端口范围。

相关内容