在配置防火墙前,需确保已安装并启动FTP服务(以vsftpd为例,CentOS默认仓库提供):
# 安装vsftpd
sudo yum install -y vsftpd
# 启动服务并设置开机自启
sudo systemctl start vsftpd
sudo systemctl enable vsftpd
# 检查服务状态(确保无报错)
sudo systemctl status vsftpd
firewalld是CentOS主流版本的默认防火墙管理工具,需通过以下步骤开放FTP所需端口:
FTP协议依赖**控制端口(21/tcp)**用于命令交互,**数据端口(20/tcp)**用于主动模式数据传输。需永久开放这两个端口:
# 开放控制端口(21/tcp)
sudo firewall-cmd --permanent --add-port=21/tcp
# 开放数据端口(20/tcp)
sudo firewall-cmd --permanent --add-port=20/tcp
被动模式(PASV)下,FTP服务器会随机开放一个高端口(范围需提前配置)供客户端连接。需根据vsftpd配置指定端口范围(如50000-50050),并开放该范围:
# 开放被动模式端口范围(示例:50000-50050)
sudo firewall-cmd --permanent --add-port=50000-50050/tcp
注:被动模式端口范围需与
vsftpd配置文件(/etc/vsftpd/vsftpd.conf)中的pasv_min_port和pasv_max_port一致,否则客户端无法连接。
修改防火墙规则后,需重新加载以使更改生效:
sudo firewall-cmd --reload
通过以下命令确认FTP相关端口已成功开放:
# 查看所有开放端口
sudo firewall-cmd --list-all
# 或检查特定端口(如21、50000)
sudo firewall-cmd --query-port=21/tcp # 应返回"yes"
sudo firewall-cmd --query-port=50000/tcp # 应返回"yes"
若系统启用了SELinux(默认Enforcing模式),需调整策略以允许FTP访问用户目录:
# 设置FTP用户可访问其主目录
sudo setsebool -P ftp_home_dir on
若需允许FTP用户访问系统其他目录(谨慎使用):
sudo setsebool -P allow_ftpd_full_access on
可通过以下命令查看与FTP相关的SELinux策略:
getsebool -a | grep ftp
为避免不必要的风险,需调整vsftpd配置文件(/etc/vsftpd/vsftpd.conf):
# 禁止匿名访问
anonymous_enable=NO
# 允许本地用户登录
local_enable=YES
# 允许用户写入文件(需配合chroot)
write_enable=YES
# 将用户限制在其主目录(增强安全性)
chroot_local_user=YES
# 允许例外用户(如需管理员访问,可添加用户名到/etc/vsftpd/chroot_list)
chroot_list_enable=YES
chroot_list_file=/etc/vsftpd/chroot_list
# 允许可写目录(解决chroot后无法写入问题)
allow_writeable_chroot=YES
# 开启被动模式
pasv_enable=YES
# 设置被动模式端口范围(与防火墙配置一致)
pasv_min_port=50000
pasv_max_port=50050
# 指定服务器IP(避免客户端连接错误)
pasv_address=your_server_public_ip
修改后重启vsftpd服务:
sudo systemctl restart vsftpd
使用FTP客户端(如ftp、FileZilla)连接服务器,验证防火墙配置是否生效:
# 使用命令行FTP客户端测试
ftp your_server_ip
输入用户名和密码后,尝试上传/下载文件,确认操作正常。
netstat -tuln检查)。cp /etc/vsftpd/vsftpd.conf /etc/vsftpd/vsftpd.conf.bak)。