vsftpd与CentOS防火墙设置存在潜在冲突,主要源于防火墙可能阻止vsftpd所需的端口或服务,导致FTP连接失败(如无法连接、数据传输中断等)。以下是具体冲突场景及解决方法:
iptables -P INPUT DROP),即使开放了FTP端口,也可能因规则顺序导致流量被拦截。使用firewalld(CentOS 7及以上默认防火墙)开放21端口,并重载配置:
sudo firewall-cmd --permanent --add-port=21/tcp # 永久开放21端口
sudo firewall-cmd --reload # 重载防火墙配置
若使用iptables,可添加以下规则:
sudo iptables -A INPUT -m state --state NEW -m tcp -p tcp --dport 21 -j ACCEPT
sudo service iptables save # 保存iptables规则
若使用PORT模式,需开放20端口:
sudo firewall-cmd --permanent --add-port=20/tcp
sudo firewall-cmd --reload
编辑vsftpd配置文件(/etc/vsftpd/vsftpd.conf),设置被动模式端口范围(如50000-50100):
pasv_enable=YES # 启用被动模式
pasv_min_port=50000 # 被动模式最小端口
pasv_max_port=50100 # 被动模式最大端口
然后开放该端口范围:
sudo firewall-cmd --permanent --add-port=50000-50100/tcp
sudo firewall-cmd --reload
firewalld提供了ftp服务模块,可自动处理FTP端口(包括动态端口)的开放,无需手动指定端口范围:
sudo firewall-cmd --permanent --add-service=ftp # 添加FTP服务
sudo firewall-cmd --reload # 重载配置
此方法适用于大多数场景,推荐优先使用。
确保防火墙未设置“拒绝所有入站流量”的默认规则。若存在,可修改默认策略为“接受”:
sudo firewall-cmd --set-default-zone=public # 设置默认区域为public(允许流量)
sudo firewall-cmd --reload # 重载配置
Enforcing模式,可能会限制vsftpd的访问(如禁止用户上传文件)。可通过setenforce 0临时禁用SELinux测试,若问题解决,需调整SELinux策略(如setsebool -P ftp_home_dir 1允许访问用户主目录)。sudo systemctl start firewalld
sudo systemctl enable firewalld
通过以上步骤,可解决vsftpd与CentOS防火墙的冲突问题,确保FTP服务正常运行。