CentOS FTP Server防火墙设置策略
CentOS 7及以上版本默认使用firewalld
作为防火墙管理工具。若未安装,可通过以下命令安装并启动:
sudo yum install firewalld -y
sudo systemctl start firewalld
sudo systemctl enable firewalld
FTP协议依赖两个核心端口:21端口(控制连接,用于发送命令)和20端口(数据连接,用于传输文件)。需通过以下命令开放:
sudo firewall-cmd --permanent --add-port=21/tcp # 控制端口
sudo firewall-cmd --permanent --add-port=20/tcp # 数据端口
被动模式(PASV)下,FTP服务器会随机开放一个动态端口范围供客户端连接。需在vsftpd.conf
中指定范围(如50000-50050
),并在防火墙中开放:
# 编辑vsftpd配置文件
sudo vi /etc/vsftpd/vsftpd.conf
# 添加/修改以下行(确保端口范围未被其他服务占用)
pasv_enable=YES
pasv_min_port=50000
pasv_max_port=50050
# 重启vsftpd服务
sudo systemctl restart vsftpd
# 防火墙中开放被动模式端口范围
sudo firewall-cmd --permanent --add-port=50000-50050/tcp
所有端口设置完成后,需重新加载防火墙以应用更改:
sudo firewall-cmd --reload
通过以下命令确认端口是否开放:
# 查看所有开放端口
sudo firewall-cmd --list-all
# 或检查特定端口
sudo firewall-cmd --query-port=21/tcp
sudo firewall-cmd --query-port=50000-50050/tcp
若需仅允许特定IP访问FTP服务器,可使用rich rule
限制源IP:
# 允许192.168.1.100访问21端口
sudo firewall-cmd --permanent --add-rich-rule="rule family='ipv4' source address='192.168.1.100' port port='21' protocol='tcp' accept"
# 允许同一IP访问被动模式端口范围
sudo firewall-cmd --permanent --add-rich-rule="rule family='ipv4' source address='192.168.1.100' port port='50000-50050' protocol='tcp' accept"
# 重新加载防火墙
sudo firewall-cmd --reload
若SELinux处于enforcing
模式,需调整策略以允许FTP访问:
# 允许FTP访问用户主目录
sudo setsebool -P ftp_home_dir on
# 允许FTP服务器完全访问(根据需求选择)
sudo setsebool -P allow_ftpd_full_access on
# 若使用自定义端口,需修改SELinux端口类型
sudo semanage port -a -t ftp_port_t -p tcp 50000-50050
vsftpd.conf
中的设置一致,避免客户端连接失败。iptables
替代firewalld
,需通过iptables
命令手动添加规则,并保存配置(sudo service iptables save
)。/var/log/messages
或journalctl -u firewalld
),监控异常访问尝试。