启用Ubuntu防火墙后FTPS(vsftpd+SSL)偶尔超时,请求排查端口问题
这个问题我太熟悉了!之前帮好几个朋友排查过,核心原因几乎都是FTPS被动模式的动态端口没在UFW里放行——毕竟开了防火墙后,被动模式随机生成的高位端口大概率被拦截,偶尔碰巧没被拦就连接成功,所以才会时好时坏。下面一步步帮你解决:
一、先搞定FTPS偶尔超时的问题
VSFTPD默认用被动模式时,会随机选择高位端口传输数据,UFW默认不会放行这些随机端口,所以才会出现不稳定的情况。我们可以固定被动模式的端口范围,然后在UFW里放行:
修改VSFTPD配置文件
打开配置文件编辑:sudo nano /etc/vsftpd.conf添加或修改以下两行,固定被动模式的端口范围(端口可以自定义,只要是未被占用的高位端口即可):
pasv_min_port=40000 pasv_max_port=50000顺便确认下你的SSL配置是否正确(你应该已经配置过,但可以再核对):
ssl_enable=YES allow_anon_ssl=NO force_local_data_ssl=YES force_local_logins_ssl=YES ssl_tlsv1=YES ssl_sslv2=NO ssl_sslv3=NO require_ssl_reuse=NO ssl_ciphers=HIGH重启VSFTPD服务让配置生效
sudo systemctl restart vsftpd在UFW里放行必要的端口
- 首先放行FTPS的控制端口21(带SSL的显式FTPS端口):
sudo ufw allow 21/tcp - 然后放行我们刚才固定的被动模式端口范围:
sudo ufw allow 40000:50000/tcp - 最后重载UFW使规则生效:
sudo ufw reload
- 首先放行FTPS的控制端口21(带SSL的显式FTPS端口):
做完这些后,再用FileZilla测试连接,应该就不会出现超时的情况了。
二、如何查询特定应用所需的端口
分享几个我常用的方法,准确率从高到低排序:
- 直接看应用的配置文件或官方文档:这是最准确的方式,比如VSFTPD的配置文件里就有关于被动端口的注释,官方文档也会明确说明需要的端口范围。
- 用
ss命令查看应用正在监听的端口:
比如查看VSFTPD当前监听的端口:
这个命令会列出应用绑定的所有TCP/UDP端口,能快速找到当前正在使用的端口。sudo ss -tulpn | grep vsftpd - 查看系统默认端口映射文件:
系统的/etc/services文件记录了大部分常用服务的默认端口,比如查询FTP相关端口:
你会看到FTP默认21,FTPS隐式模式默认990等信息,但注意如果是自定义配置的端口,这里不会显示。cat /etc/services | grep ftp - 查看UFW自带的应用规则:
有些常用应用UFW已经预设了规则,你可以先列出所有预设应用:
如果能看到sudo ufw app listFTP或FTPS选项,直接用sudo ufw allow FTPS就能放行对应端口,但要注意预设规则可能不包含被动模式的端口范围,所以还是手动固定端口更稳妥。
最后提个小建议:用root账号远程FTP其实存在安全风险,建议创建专门的FTP用户,并限制其只能访问指定目录,这样更安全。
内容的提问来源于stack exchange,提问作者Tailer




