温馨提示×

Linux vsftp防火墙设置:如何提高服务器安全性

小樊
43
2025-12-25 22:30:53
栏目: 云计算

Linux vsftpd 防火墙设置与安全加固指南

一 防火墙放行与模式选择

  • 明确 FTP 的两种数据通道:控制通道为21/TCP;主动模式数据通道由服务器从20/TCP主动连客户端;被动模式数据通道由服务器在配置的端口范围内监听,客户端来连。若使用显式 FTPS,控制通道通常为990/TCP。为减少攻击面,建议禁用匿名访问,仅开放必要端口与网段。
  • firewalld 示例(推荐固定被动端口范围,便于精确放行):
    • 放行控制端口与被动端口段(示例范围:40000–50000/TCP
      • firewall-cmd --permanent --add-port=21/tcp
      • firewall-cmd --permanent --add-port=40000-50000/tcp
      • firewall-cmd --reload
    • 如需显式 FTPS,额外放行:firewall-cmd --permanent --add-port=990/tcp && firewall-cmd --reload
    • 按需限制来源 IP(示例仅允许办公网段):
      • firewall-cmd --permanent --zone=public --add-rich-rule=‘rule family=“ipv4” source address=“203.0.113.0/24” port port=“21” protocol=“tcp” accept’
      • firewall-cmd --permanent --zone=public --add-rich-rule=‘rule family=“ipv4” source address=“203.0.113.0/24” port port=“40000-50000” protocol=“tcp” accept’
      • firewall-cmd --reload
  • UFW 示例(Debian/Ubuntu 常用):
    • 放行控制端口与被动端口段:ufw allow 21/tcp;ufw allow 40000:50000/tcp
    • 如需显式 FTPS:ufw allow 990/tcp
    • 启用防火墙:ufw enable
  • 主动模式与被动模式要点:
    • 主动模式需服务器主动出站到客户端高位端口,通常需放行服务器20/TCP出站(云环境/严格 egress 策略下可能受限)。
    • 被动模式更利于穿越防火墙/NAT,务必固定并放行被动端口段,否则会出现“能登录但列目录失败”。

二 使用连接追踪简化被动模式放行(可选)

  • 若不想固定被动端口段,可启用内核连接追踪模块以自动放行 FTP 数据连接(适合测试或端口不固定的环境):
    • 加载模块:modprobe nf_conntrack_ftp
    • 持久化(RHEL/CentOS):在 /etc/sysconfig/iptables-config 中加入:IPTABLES_MODULES=“nf_conntrack_ftp”
    • 放行控制端口并允许已建立/相关连接:
      • iptables -I INPUT -p tcp --dport 21 -j ACCEPT
      • iptables -I INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
  • 注意:连接追踪对 FTP 的控制通道有依赖,且在高并发/复杂 NAT 场景下可能不如“固定被动端口段”稳定。

三 vsftpd 关键配置与防火墙联动

  • 建议的基础安全配置(/etc/vsftpd.conf):
    • 禁用匿名、启用本地用户、限制在家目录、按需开启写入:
      • anonymous_enable=NO
      • local_enable=YES
      • chroot_local_user=YES
      • allow_writeable_chroot=YES(vsftpd ≥ 3.0.2 推荐;旧版本可用“写权限+不可写根”的替代方案)
      • write_enable=YES(仅在确需上传时开启)
    • 启用并固定被动端口范围(与防火墙放行保持一致):
      • pasv_enable=YES
      • pasv_min_port=40000
      • pasv_max_port=50000
      • pasv_address=SERVER_PUBLIC_IP(NAT/云主机建议显式指定公网地址)
  • 显式 FTPS(推荐):生成证书并启用加密
    • 生成自签名证书(示例):
      • openssl req -x509 -nodes -days 365 -newkey rsa:2048
        -keyout /etc/ssl/private/vsftpd.pem -out /etc/ssl/private/vsftpd.pem
    • vsftpd.conf 关键项:
      • ssl_enable=YES
      • allow_anon_ssl=NO
      • force_local_logins_ssl=YES
      • force_local_data_ssl=YES
      • rsa_cert_file=/etc/ssl/private/vsftpd.pem
      • rsa_private_key_file=/etc/ssl/private/vsftpd.pem
  • 重启服务使配置生效:systemctl restart vsftpd
  • 客户端连接:选择“FTP - 显式 TLS/SSL”,端口21(或990用于隐式 FTPS)。

四 访问控制与入侵防护

  • 基于 IP 的访问控制(防火墙层面优先,vsftpd 作为补充):
    • firewalld 富规则示例(仅允许白名单网段访问 21/TCP 与被动端口段):
      • firewall-cmd --permanent --zone=public --add-rich-rule=‘rule family=“ipv4” source address=“203.0.113.0/24” port port=“21” protocol=“tcp” accept’
      • firewall-cmd --permanent --zone=public --add-rich-rule=‘rule family=“ipv4” source address=“203.0.113.0/24” port port=“40000-50000” protocol=“tcp” accept’
      • firewall-cmd --reload
  • 防暴力破解与登录审计:
    • 使用 Fail2Ban 监控日志并自动封禁:
      • 配置 jail(/etc/fail2ban/jail.local 或 /etc/fail2ban/jail.d/vsftpd.local):
        • [vsftpd]
        • enabled = true
        • port = ftp
        • filter = vsftpd
        • logpath = /var/log/vsftpd.log
        • maxretry = 3
        • bantime = 600
      • 重启:systemctl restart fail2ban
  • SELinux 场景(RHEL/CentOS):
    • 启用策略以允许 FTP 访问:setsebool -P ftpd_full_access=on
    • 如涉及家目录访问:setsebool -P ftp_home_dir on
  • 系统加固补充:
    • 仅使用专用 FTP 用户,禁止其 SSH 登录(如:useradd -m -d /home/ftpuser -s /usr/sbin/nologin ftpuser)
    • 定期更新系统与 vsftpd,关注日志(如 /var/log/vsftpd.log)。

五 快速排错与验证

  • 能登录但“列目录失败”或数据通道不通:检查被动端口段是否在 vsftpd 与防火墙中一致放行;NAT/云主机设置 pasv_address;必要时改用“连接追踪”方案。
  • 客户端提示“不安全的服务器”:在客户端选择“显式 TLS/SSL”,并确认服务器证书与端口配置正确。
  • 服务与规则验证:
    • 服务状态:systemctl status vsftpd
    • 端口监听:ss -lntp | grep :21(或 :990 / 被动端口段)
    • 防火墙状态:firewall-cmd --list-allufw status
  • 主动模式测试:客户端执行 passive 关闭被动模式后尝试传输,验证服务器20/TCP出站与客户端防火墙策略是否允许。

0