温馨提示×

Linux vsftp防火墙配置:保护服务器免受攻击

小樊
40
2025-12-10 04:44:44
栏目: 云计算

Linux vsftpd 防火墙配置与加固指南

一、基础安全原则

  • 禁用匿名访问:设置 anonymous_enable=NO,仅允许可信本地用户。
  • 限制用户目录:启用 chroot_local_user=YES,避免用户越权访问系统目录。
  • 最小权限:按需开启 write_enable=YES,并为上传目录设置专用用户与权限。
  • 加密传输:优先启用 SSL/TLS(FTPS),避免明文凭据与数据被窃听。
  • 加固被动端口:在 vsftpd 中固定 pasv_min_port/pasv_max_port,并在防火墙中精确放行该范围。
  • 日志与审计:开启 xferlog_enable=YES,定期审计登录与传输行为。

二、防火墙放行与控制连接

  • firewalld(CentOS/RHEL 7+/Fedora)
    • 放行控制端口与被动端口范围(示例范围:30000–31000):
      • sudo firewall-cmd --permanent --add-port=21/tcp
      • sudo firewall-cmd --permanent --add-port=20/tcp
      • sudo firewall-cmd --permanent --add-port=30000-31000/tcp
      • sudo firewall-cmd --reload
    • 如需使用 firewalld 的 FTP 助手模块(模块会自动处理被动端口与状态跟踪),可执行:
      • sudo firewall-cmd --permanent --add-service=ftp && sudo firewall-cmd --reload
  • UFW(Ubuntu/Debian)
    • 放行控制端口与被动端口范围:
      • sudo ufw allow 21/tcp
      • sudo ufw allow 20/tcp
      • sudo ufw allow 30000:31000/tcp
  • iptables(传统方式)
    • 放行控制与被动端口,并允许已建立/相关连接返回:
      • sudo iptables -A INPUT -p tcp --dport 21 -j ACCEPT
      • sudo iptables -A INPUT -p tcp --dport 20 -j ACCEPT
      • sudo iptables -A INPUT -p tcp --dport 30000:31000 -j ACCEPT
      • sudo iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
    • 规则持久化:
      • Debian/Ubuntu:sudo apt-get install iptables-persistent && sudo netfilter-persistent save
      • CentOS/RHEL:sudo service iptables save
        说明:FTP 控制通道使用 21/tcp,主动模式数据通道使用 20/tcp,被动模式数据通道使用配置的范围端口。

三、vsftpd 关键配置示例

  • 基本与访问控制(/etc/vsftpd.conf)
    • anonymous_enable=NO
    • local_enable=YES
    • write_enable=YES
    • chroot_local_user=YES
    • allow_writeable_chroot=NO(更安全的做法;若必须可写,请评估风险)
    • userlist_enable=YES
    • tcp_wrappers=YES
  • 被动模式端口范围(示例:30000–31000
    • pasv_enable=YES
    • pasv_min_port=30000
    • pasv_max_port=31000
  • SSL/TLS(FTPS)
    • 生成自签证书(示例):
      • sudo openssl req -new -x509 -days 365 -nodes -out /etc/ssl/certs/ftp.crt -keyout /etc/ssl/private/ftp.key
    • 启用加密:
      • ssl_enable=YES
      • ssl_cert_file=/etc/ssl/certs/ftp.crt
      • ssl_key_file=/etc/ssl/private/ftp.key
      • force_local_logins_ssl=YES
      • force_local_data_ssl=YES
        修改后重启服务:sudo systemctl restart vsftpd。

四、SELinux 与系统加固

  • SELinux(若启用)
    • 允许家目录访问与完整 FTP 访问:
      • sudo setsebool -P ftp_home_dir on
      • sudo setsebool -P allow_ftpd_full_access on
    • 目录上下文(示例):
      • sudo chcon -Rv --type=public_content_t /home/ftpuser
  • 访问控制与监控
    • 仅允许必要来源 IP(在 firewalld 中使用 rich rules 或外部防火墙限制)。
    • 定期更新系统与 vsftpd,监控日志:
      • sudo tail -f /var/log/vsftpd.log
      • 检查系统日志:/var/log/messages

五、验证与故障排查

  • 服务与端口
    • 检查 vsftpd:sudo systemctl status vsftpd
    • 检查端口监听:ss -lntp | grep -E ‘(:21|:30000)’
  • 连通性测试
    • 本地回环:ftp localhost
    • 远程客户端(显式 FTPS):使用 FileZilla 选择 FTP over TLS,验证登录与传输。
  • 常见问题
    • 被动模式失败:确认防火墙已放行 pasv_min_port–pasv_max_port,且客户端使用被动模式。
    • 登录被拒或目录不可写:核对 anonymous_enablechroot_local_user、目录权限与 SELinux 布尔值。
    • 明文被窃听风险:确保启用 SSL/TLS 并禁用明文 FTP。

0