我有一个在 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 以上的端口范围。