在 CentOS 上搭建 FTP 服务(如 vsftpd)后,防火墙配置是必须处理的一步,否则客户端无法连接。下面按常见场景说明。
FTP 有两种模式,防火墙配置不同:
# 开启 ftp 服务
firewall-cmd --permanent --add-service=ftp
# 重新加载防火墙
firewall-cmd --reload
这会开放:
主动模式需要开放 20 端口:
firewall-cmd --permanent --add-port=20/tcp
firewall-cmd --reload
编辑 vsftpd 配置:
vi /etc/vsftpd/vsftpd.conf
添加或修改:
pasv_enable=YES
pasv_min_port=30000
pasv_max_port=31000
然后重启 vsftpd:
systemctl restart vsftpd
防火墙放行端口范围:
firewall-cmd --permanent --add-port=30000-31000/tcp
firewall-cmd --reload
CentOS 默认开启 SELinux,需允许 FTP:
setsebool -P ftpd_full_access on
如果仍无法访问,可临时测试:
setenforce 0
systemctl status vsftpd
firewall-cmd --list-all
如果是 CentOS 6 或手动用 iptables:
iptables -A INPUT -p tcp --dport 21 -j ACCEPT
iptables -A INPUT -p tcp --dport 30000:31000 -j ACCEPT
service iptables save
service iptables restart
✅ 生产环境建议
vsftpd如果你愿意,可以告诉我:
我可以给你一份可直接复制执行的完整命令。