简而言之:它确实以被动模式连接,但尽管配置如此,它就是不使用我尝试使用的端口。
设置pasv_max_port
和pasv_min_port
似乎被忽略了,但我看不出是什么阻止 vsftpd 识别或应用配置。
我采取的程序是:
[服务器] 编辑 vsftpd.conf 并保存
pasv_max_port=60000 pasv_min_port=60003 #Server's public IP (AWS EC2 Elastic IP) pasv_address=*.*.*.*
*我尝试了一些其他的组合:如下所示。
[服务器] 使用以下命令重新启动 vsftpd
service vsftpd restart
[客户端(Filezilla)] 以被动模式连接到端口 22 上的 *.*.*.*。SSL 和登录一切正常,然后它返回以下内容:
Command: PASV Trace: CFtpControlSocket::OnReceive() Response: 227 Entering Passive Mode (*,*,*,*,254,73).
这看起来像是连接到了*.*.*.*:65097
。(而且这个端口号每次尝试都会改变,好像我没有设置用于被动模式的端口范围。)果然,如果我将防火墙设置为关闭除端口 22 和范围 60000 - 60003 之外的所有其他端口,它就不会再继续了。
我尝试了其他范围,如 62010-62019,甚至重新启动了 Linux,但它仍然表现出相同的行为。
这和 iptables 冲突吗?(我对此表示怀疑,因为我的机器在 AWS EC2 实例上运行,所以就像在 NAT 后面运行一样,对吗?)
没有找到与我的问题相关的东西,所以我认为我一定是做了一些愚蠢的事情,但是拼写已经逐字检查,并且配置下面的行pasv_address
确实生效了(如果我将它们留空并重新启动 vsftpd,则不起作用)。
- 硬件:
运行“Amazon Linux AMI 2018.03.0.20180412 x86_64 HVM GP2”的 AWS EC2 实例 - 网络:
防火墙(AWS 安全组)配置为向客户端 IP 打开所有端口。我的目标是只为客户端打开必要的端口(21
,60000 - 60003
) - 包裹:
从存储库安装 vsftpdamzn-main
(vsftpd.x86_64
,2.2.2-13.13.amzn1) - 可用端口:
cat /proc/sys/net/ipv4/ip_local_port_range
返回32768 60999
我的目标是仅打开受控范围内的端口进行数据传输,并且它仅适用于具有固定 IP 地址的单个客户端。这意味着我实际上可以选择主动模式并仅为该 IP 地址打开端口 20,但是为了坚持要替换的当前 FTP 服务器的旧配置,我宁愿使用被动模式。-> 刚刚发现由于客户端的安全问题它必须是被动模式。
..有人有什么想法吗?
在此之前,我曾尝试过其他一些 vsftpd.conf,例如
pasv_enable=YES
pasv_max_port=60000
pasv_min_port=60003
port_enable=YES
pasv_addr_resolve=YES
pasv_address=*.*.*.*
我也没有运气。目前我只是坚持使用这种事情所需的最少行数(默认pasv_enable
情况下YES
)。
答案1
已解决:@Zdenek 从评论部分注意到我的配置中有一个愚蠢的错误:
最大端口必须高于最小端口 -@Zdenek
因此,修复
pasv_max_port=60000
pasv_min_port=60003
到
pasv_max_port=60003
pasv_min_port=60000
就是所有需要做的事情。
我认为这太愚蠢了,不应该留在这个网站上,但我认为对于那些忽略了这一点或期望 vsftpd 在出现此类配置错误时返回错误的人来说,这可能会有所帮助,所以保留原样。
再次感谢@Zdenek 的关注!