Linux FTP服务器配置防火墙规则吗
小樊
34
2025-12-24 21:57:07
Linux FTP服务器防火墙规则配置
一 基本要点
- 需要放行 FTP 的控制连接端口 21/TCP;在主动模式下由服务器从20/TCP主动建立数据连接;在被动模式下服务器会开放一段被动端口范围,客户端连接到该范围的端口进行数据传输。若使用FTPS(FTP over SSL/TLS),通常还需放行990/TCP。为减少攻击面,建议仅开放必要的端口,并尽量使用被动模式 + 限定端口范围。
二 常见防火墙配置示例
- firewalld(CentOS/RHEL、Fedora)
- 放行基础服务与端口:
- sudo firewall-cmd --permanent --add-service=ftp
- sudo firewall-cmd --permanent --add-port=21/tcp
- 如需 FTPS:sudo firewall-cmd --permanent --add-port=990/tcp
- 放行被动端口范围(示例:40000–50000/TCP):
- sudo firewall-cmd --permanent --add-port=40000-50000/tcp
- 使配置生效:sudo firewall-cmd --reload
- UFW(Ubuntu/Debian)
- 放行常用端口与被动范围:
- sudo ufw allow 20/tcp
- sudo ufw allow 21/tcp
- 如需 FTPS:sudo ufw allow 990/tcp
- 被动范围(示例):sudo ufw allow 40000:50000/tcp
- 启用防火墙:sudo ufw enable
- iptables(传统方式)
- 放行控制与数据端口:
- sudo iptables -A INPUT -p tcp --dport 21 -m state --state NEW,ESTABLISHED -j ACCEPT
- sudo iptables -A OUTPUT -p tcp --sport 21 -m state --state ESTABLISHED -j ACCEPT
- 主动模式数据端口(如启用主动模式):sudo iptables -A INPUT -p tcp --dport 20 -m state --state NEW,ESTABLISHED -j ACCEPT
- 放行被动端口范围(示例:40000–50000/TCP):
- sudo iptables -A INPUT -p tcp --dport 40000:50000 -m state --state NEW,ESTABLISHED -j ACCEPT
- 保存规则(视发行版而定):
- Debian/Ubuntu:sudo iptables-save > /etc/iptables/rules.v4
- RHEL/CentOS:sudo service iptables save 或保存至 /etc/sysconfig/iptables
三 与 FTP 服务器协同的关键配置
- 在 vsftpd 中设置被动端口范围(示例:40000–50000),并确保与防火墙放行范围一致:
- pasv_enable=YES
- pasv_min_port=40000
- pasv_max_port=50000
- 如需加密,启用 SSL/TLS(示例):
- ssl_enable=YES
- rsa_cert_file=/etc/ssl/certs/vsftpd.pem
- rsa_private_key_file=/etc/ssl/private/vsftpd.key
- 修改配置后重启服务:sudo systemctl restart vsftpd。
四 验证与排错
- 使用客户端(如 FileZilla)连接,切换到被动模式,测试上传/下载是否正常;命令行可用 ftp 或 lftp 测试。
- 查看防火墙与端口状态:
- firewalld:sudo firewall-cmd --list-ports / --list-services
- UFW:sudo ufw status verbose
- iptables:sudo iptables -L -n -v
- 若使用云服务器,确保安全组/ACL 也放行相应端口(如21、990、40000–50000/TCP)。
五 安全建议
- 优先采用**SFTP(基于 SSH)**替代明文 FTP,减少防火墙与协议复杂度,提升安全性。
- 避免使用过宽的被动端口范围;仅开放必要端口,并限制来源网段。
- 启用日志与监控,定期审计规则与访问记录。