FTP被动模式需精准开放vsftpd配置的PASV端口范围(如50000–50100),而非默认大范围;iptables仅放行该区间入站NEW连接,并禁用ip_conntrack_ftp等高危模块,确保最小权限与稳定通信。

要让 FTP 被动模式在 iptables 下安全、稳定运行,关键不是“放行全部高段端口”,而是精准限制并开放你实际配置的 PASV 端口范围。否则默认开放 49152–65535 会大幅扩大攻击面,违背最小权限原则。
明确被动端口范围
先确认 vsftpd 实际使用的 PASV 端口区间。编辑 /etc/vsftpd.conf,确保已设置:
pasv_enable=YES pasv_min_port=50000 pasv_max_port=50100
这个例子限定为 50000–50100(共 101 个端口),比默认大范围更可控,也便于防火墙管理。
只放行指定 PASV 端口段
iptables 规则需匹配该范围,并结合连接状态过滤,避免开放无关流量:
- 允许入站控制连接(必须):
sudo iptables -A INPUT -p tcp --dport 21 -m state --state NEW,ESTABLISHED -j ACCEPT - 允许入站 PASV 数据连接(核心):
sudo iptables -A INPUT -p tcp --dport 50000:50100 -m state --state NEW -j ACCEPT - 允许出站响应(可选但推荐,提升可靠性):
sudo iptables -A OUTPUT -p tcp --sport 50000:50100 -m state --state ESTABLISHED -j ACCEPT
禁用不必要的端口和模块
Linux系统管理专家,覆盖12大模块:用户权限、SSH、存储、网络、systemd、防火墙、日志监控、备份恢复、TLS证书、Ansible、容器、IaC。提供配置、验证、加固、监控、备份、自动化、故障排查、回滚闭环。关键词:useradd、sudo、sshd_config、chmod、SEL...
- 不要开放
--dport 20(那是主动模式用的,PASV 下无需); - 不要加载
ip_conntrack_ftp或nf_nat_ftp模块——这些旧内核模块存在绕过风险,且现代 vsftpd + 明确端口范围下完全不需要; - 若已有宽泛规则如
--dport 49152:65535,务必删除,改用你实际配置的窄范围。
保存并验证规则
- Debian/Ubuntu:
sudo sh -c "iptables-save > /etc/iptables/rules.v4" - CentOS/RHEL:
sudo service iptables save或sudo iptables-save > /etc/sysconfig/iptables - 查看生效规则:
sudo iptables -L INPUT -n --line-numbers - 测试连接时,用
ftp -v your_server_ip登录后执行pasv命令,确认返回的端口落在 50000–50100 内,再尝试ls或get验证数据通道通断。
不复杂但容易忽略:端口范围必须在 vsftpd 和 iptables 中严格一致,差一个数字都会导致 LIST/RETR 失败。

















