Linux vsftp防火墙配置:保护服务器安全
小樊
41
2025-12-14 03:40:25
Linux vsftpd 防火墙配置与加固指南
一 基础安全与 vsftpd 推荐配置
- 禁用匿名访问、仅启用本地用户,开启写入与目录隔离,降低攻击面:
- 编辑配置文件:/etc/vsftpd/vsftpd.conf
- 关键项:
- anonymous_enable=NO
- local_enable=YES
- write_enable=YES
- chroot_local_user=YES
- 如必须可写 chroot,使用更安全的替代:allow_writeable_chroot=NO,并为上传目录单独赋权(如 755/775),避免将根目录设为可写。
- 启用 SSL/TLS 强制加密,防止明文凭据与数据泄露:
- 生成证书(示例):
- openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout /etc/ssl/private/vsftpd.key -out /etc/ssl/certs/vsftpd.crt
- vsftpd 配置:
- ssl_enable=YES
- rsa_cert_file=/etc/ssl/certs/vsftpd.crt
- rsa_private_key_file=/etc/ssl/private/vsftpd.key
- force_local_logins_ssl=YES
- force_local_data_ssl=YES
- 日志与审计:
- xferlog_enable=YES
- xferlog_file=/var/log/vsftpd.log
- 重启生效:systemctl restart vsftpd。
二 防火墙放行与模式选择
- 主动模式与被动模式要点
- 主动模式:客户端在高位端口发起数据连接,服务器从20/tcp主动连回客户端;对客户端 NAT/防火墙不友好。
- 被动模式:服务器在预设的高位端口范围等待客户端连接;对穿越 NAT/云安全组更友好,推荐在公网环境使用。
- firewalld(RHEL/CentOS 7+/Fedora)
- 放行控制通道与服务:
- firewall-cmd --permanent --zone=public --add-service=ftp
- 或显式放行端口:firewall-cmd --permanent --zone=public --add-port=21/tcp
- 放行被动端口范围(示例:40000-50000/tcp):
- firewall-cmd --permanent --zone=public --add-port=40000-50000/tcp
- 重载:firewall-cmd --reload
- UFW(Debian/Ubuntu)
- 放行控制与被动端口:
- ufw allow 21/tcp
- ufw allow 40000:50000/tcp
- 启用:ufw enable
- iptables(传统方式)
- 放行控制与被动端口:
- iptables -A INPUT -p tcp --dport 21 -j ACCEPT
- iptables -A INPUT -p tcp --dport 40000:50000 -j ACCEPT
- 保存(Debian/Ubuntu):netfilter-persistent save;或 iptables-save > /etc/iptables/rules.v4
- 被动端口范围建议
- 选择一个较小且明确的区间(如40000-50000或59800-59900),并在防火墙与 vsftpd 配置中保持一致。
三 vsftpd 与防火墙联动配置示例
- 被动模式最小配置(示例端口范围:40000-50000)
- vsftpd.conf:
- pasv_enable=YES
- pasv_min_port=40000
- pasv_max_port=50000
- 防火墙:放行21/tcp与40000-50000/tcp(见第二部分对应命令)
- 重启:systemctl restart vsftpd
- 主动模式要点
- vsftpd.conf:
- connect_from_port_20=YES(服务器使用 20/tcp 主动发起数据连接)
- 防火墙:放行21/tcp与20/tcp
- 注意:客户端需允许入站数据连接,NAT/严格客户端防火墙下常不如被动模式稳定
- 修改默认控制端口(示例:2121)
- vsftpd.conf:listen_port=2121
- 防火墙:放行2121/tcp
- 可选:更新 /etc/services 中 ftp 端口映射(部分系统/工具依赖该文件)
- 重启:systemctl restart vsftpd
四 验证与排障
- 服务与端口检查
- 服务状态:systemctl status vsftpd
- 端口监听:ss/telnet/nmap 确认 21/tcp 与被动端口范围处于监听
- 防火墙规则核验
- firewalld:firewall-cmd --list-all(查看 services/ports)
- UFW:ufw status verbose
- iptables:iptables -S(或 iptables -L -n)
- 客户端连接测试
- 主动模式:命令行 ftp 客户端通常默认主动;被动模式:使用 FileZilla 等图形客户端默认被动
- 启用 TLS 时,客户端需选择“要求显式 FTP over TLS”
- 日志与监控
- 实时查看:tail -f /var/log/vsftpd.log
- 异常登录与暴力尝试:部署 Fail2Ban 监控日志并自动封禁
五 加固清单与最佳实践
- 身份与访问控制
- 禁用匿名:anonymous_enable=NO
- 目录隔离:chroot_local_user=YES;如需可写,避免 allow_writeable_chroot=YES,改为对上传目录单独授权
- 加密与协议
- 强制 SSL/TLS:ssl_enable=YES、force_local_logins_ssl=YES、force_local_data_ssl=YES
- 证书与协议:使用有效证书;禁用不安全协议(如 SSLv2/SSLv3)
- 端口与攻击面
- 被动端口范围固定且最小化(如40000-50000),并在防火墙精确放行
- 仅开放必要端口(控制通道与被动端口)
- 系统与合规
- 启用 SELinux 时按需设置布尔值(如 ftp_home_dir、allow_ftpd_full_access),确保与目录标签/权限一致
- 定期更新系统与 vsftpd,限制登录失败次数,使用强密码策略