centos中vsftp的防火墙配置指南
导读:CentOS 中 vsftpd 防火墙配置指南 一 前置说明与模式选择 FTP 有两种工作模式:主动模式与被动模式。主动模式使用21端口进行控制连接、数据连接由服务器通过20端口主动发起;被动模式控制连接仍为21端口,数据连接在服务器侧使...
CentOS 中 vsftpd 防火墙配置指南
一 前置说明与模式选择
- FTP 有两种工作模式:主动模式与被动模式。主动模式使用21端口进行控制连接、数据连接由服务器通过20端口主动发起;被动模式控制连接仍为21端口,数据连接在服务器侧使用一个预先配置的高位端口范围由客户端主动连接。为兼容各类客户端与 NAT 环境,生产环境通常推荐被动模式并显式固定数据端口范围。若使用FTPS(FTP over SSL/TLS),除 21 外还需开放990/TCP(隐式 FTPS)。
二 firewalld 配置(CentOS 7/8 推荐)
- 准备:确认防火墙运行并放行回环与已建立连接
- 命令:systemctl start firewalld;firewall-cmd --permanent --zone=public --add-service=ssh;firewall-cmd --permanent --zone=public --add-masquerade;firewall-cmd --reload
- 方案A 明文 FTP(推荐被动模式)
- 在 vsftpd 配置固定被动端口范围(示例:6000–7000)
- 配置:pasv_enable=YES;pasv_min_port=6000;pasv_max_port=7000
- 防火墙放行 21 与控制通道所需连接跟踪
- 命令:firewall-cmd --permanent --zone=public --add-port=21/tcp
- 命令:firewall-cmd --permanent --zone=public --add-port=6000-7000/tcp
- 命令:firewall-cmd --permanent --zone=public --add-rich-rule=‘rule family=“ipv4” source address=“0.0.0.0/0” port port=“21” protocol=“tcp” ct state new accept’
- 命令:firewall-cmd --permanent --zone=public --add-rich-rule=‘rule family=“ipv4” port port=“21” protocol=“tcp” ct state established,related accept’
- 命令:firewall-cmd --permanent --zone=public --add-rich-rule=‘rule family=“ipv4” port port=“6000-7000” protocol=“tcp” ct state established,related accept’
- 重载:firewall-cmd --reload
- 在 vsftpd 配置固定被动端口范围(示例:6000–7000)
- 方案B 主动模式(如必须使用)
- 放行:firewall-cmd --permanent --zone=public --add-port=20/tcp;firewall-cmd --permanent --zone=public --add-port=21/tcp;firewall-cmd --reload
- 注意:主动模式常受客户端 NAT/防火墙限制,不如被动模式通用。
- 方案C 显式仅放行 990 的隐式 FTPS(不使用 989 数据端口)
- 放行:firewall-cmd --permanent --zone=public --add-port=21/tcp;firewall-cmd --permanent --zone=public --add-port=990/tcp;firewall-cmd --reload
- 说明:隐式 FTPS 通常在 990/TCP 建立控制通道,数据通道也走 990;若你的实现不同,请按实际端口放行。
- 验证
- 查看:firewall-cmd --zone=public --list-ports;firewall-cmd --zone=public --list-rich-rules;ss -lntp | egrep ‘:(21|990|6000-7000)’。
三 iptables 配置(CentOS 6 或手动管理 iptables 的场景)
- 被动模式示例(端口范围:6000–7000)
- 规则:iptables -I INPUT -p tcp --dport 21 -m state --state NEW -j ACCEPT
- 规则:iptables -I INPUT -p tcp --dport 6000:7000 -m state --state NEW -j ACCEPT
- 规则:iptables -I INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
- 保存并生效(视系统而定):service iptables save 或 iptables-save > /etc/sysconfig/iptables;service iptables restart
- 主动模式示例
- 规则:iptables -I INPUT -p tcp --dport 20 -m state --state NEW -j ACCEPT
- 规则:iptables -I INPUT -p tcp --dport 21 -m state --state NEW -j ACCEPT
- 规则:iptables -I INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
- 验证:iptables -L -n | egrep ‘dpt:(20|21|6000:7000)’。
四 vsftpd 关键配置与防火墙联动
- 被动模式最小配置(与上文防火墙端口保持一致)
- 配置:pasv_enable=YES;pasv_min_port=6000;pasv_max_port=7000
- 说明:如客户端在 NAT 后,建议设置 pasv_address=你的公网IP(仅当服务器位于 NAT 后且需告知客户端时使用)。
- 主动模式相关
- 配置:connect_from_port_20=YES(由服务器主动从 20 端口发起数据连接)。
- 端口变更
- 若修改默认控制端口(listen_port,例如改为2222),需同步在防火墙放行对应端口(firewalld:–add-port=2222/tcp;iptables:–dport 2222)。
- 安全建议
- 禁用匿名:anonymous_enable=NO;必要时限制本地用户:chroot_local_user=YES;如需写权限且已 chroot,使用 allow_writeable_chroot=YES(权衡安全)。
五 SELinux 与连通性排错
- SELinux(常见上传/访问受阻)
- 允许 FTP 全访问:setsebool -P ftpd_full_access on
- 如涉及家目录访问:setsebool -P tftp_home_dir on
- 基本连通性
- 本机:ss -lntp | egrep ‘:(21|990|6000-7000)’
- 外部:telnet 你的服务器IP 21;nc -vz 你的服务器IP 21;被动模式数据端口范围同理
- 客户端:使用 FileZilla,选择被动模式,主机填服务器 IP,端口21;FTPS 则使用990。
- 常见误区
- 仅放行 21 而未放行被动端口范围,导致列表/传输卡住或失败。
- 未放行“已建立/相关”连接(firewalld 的 ct state established,related),导致数据通道被拒。
- 误以为“firewall-cmd --add-service=ftp”即可完全可用,某些环境下仍需显式放行 21 与被动端口范围。
声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!
若转载请注明出处: centos中vsftp的防火墙配置指南
本文地址: https://pptw.com/jishu/785772.html
