Debian FTP Server 防火墙设置建议
一 基础原则与端口规划
- 明确使用的 FTP 模式:主动模式依赖服务器的 20/TCP 数据端口;被动模式由服务器在配置的范围内分配高位端口,客户端发起数据连接。为减少攻击面,建议固定并仅开放一个较小的被动端口区间。
- 推荐端口规划:控制通道 21/TCP;被动端口区间建议从 49152–65535(Linux 常用 ephemeral 范围)或自定义如 30000–31000;如使用显式 FTPS,还需开放 990/TCP。
- 安全基线:FTP 明文传输,优先采用 SFTP/FTPS;若必须用 FTP,务必启用 TLS/SSL 并限制可登录用户与目录。
二 使用 UFW 的推荐规则
- 安装并启用 UFW:sudo apt update && sudo apt install ufw -y && sudo ufw enable
- 放行控制与被动端口(示例以 49152–65535 为例):
- sudo ufw allow 21/tcp
- sudo ufw allow 49152:65535/tcp
- 如使用显式 FTPS,额外放行:sudo ufw allow 990/tcp
- 重载与核验:sudo ufw reload && sudo ufw status verbose
- 说明:UFW 默认策略通常为拒绝入站、允许出站;按需仅开放上述端口即可。
三 使用 nftables 的推荐规则(替代 iptables)
- 新建表与基础链:
- sudo nft add table inet ftp
- sudo nft add chain inet ftp input { type filter hook input priority 0 ; policy drop ; }
- 放行回环与已建立/相关连接:
- sudo nft add rule inet ftp input iif lo accept
- sudo nft add rule inet ftp input ct state established,related accept
- 放行 FTP 控制与被动端口(示例区间 49152–65535):
- sudo nft add rule inet ftp input tcp dport 21 accept
- sudo nft add rule inet ftp input tcp dport 49152-65535 accept
- 可选 FTPS:sudo nft add rule inet ftp input tcp dport 990 accept
- 持久化:
- Debian 11+/nftables 自带持久化:sudo nft list ruleset > /etc/nftables.conf
- 旧版可用:echo “nft -f /etc/nftables.conf” | sudo tee /etc/rc.local(并确保 /etc/rc.local 可执行)
- 提示:nftables 为 Linux 主流防火墙框架,语法更简洁、性能更好;若系统仍使用 iptables,建议迁移或直接采用 nftables。
四 与 vsftpd 协同的关键配置
- 在 /etc/vsftpd.conf 中固定被动端口范围,并与防火墙保持一致:
- pasv_enable=YES
- pasv_min_port=49152
- pasv_max_port=65535
- 如使用显式 FTPS:
- ssl_enable=YES
- rsa_cert_file=/etc/ssl/certs/ssl-cert-snakeoil.pem
- rsa_private_key_file=/etc/ssl/private/ssl-cert-snakeoil.key
- 应用配置:sudo systemctl restart vsftpd
- 说明:主动模式由服务器主动连接客户端数据端口,通常需确保路径上中间防火墙/NAT 允许相关连接;在复杂网络或客户端位于 NAT 后时,被动模式更易穿透与稳定。
五 验证与加固清单
- 连通性与被动端口验证:
- 使用 FileZilla 或命令行 ftp 连接,切换到被动模式,执行 ls/put/get 验证上传下载;
- 服务器端查看监听:ss -lntp | grep ‘:21|:<你的被动端口>’;
- 抓包核对数据通道端口是否在预设范围内:sudo tcpdump -ni any ‘tcp port 21 or (tcp portrange 49152-65535)’。
- 加固要点:
- 仅开放必要端口(21、被动端口区间、可选的 990);
- 禁用匿名登录(anonymous_enable=NO),必要时启用 chroot 限制用户目录;
- 启用日志(xferlog_enable=YES),定期审计;
- 优先采用 SFTP/FTPS,必要时限制并发连接与速率,减少暴露面。