温馨提示×

如何搭建Ubuntu FTP服务器集群

小樊
43
2025-12-21 05:15:50
栏目: 云计算

架构与方案选型

  • 采用多台 Ubuntu 22.04/20.04 服务器部署 vsftpd,前置 HAProxy 做四层(L4)负载均衡,后端节点对外统一提供 FTP/FTPS 服务。
  • 数据面建议共享存储(如 NFS、对象存储或分布式文件系统)以统一用户根目录;若暂不共享,需在各节点间做目录同步(如 rsync/lftp)。
  • 安全面建议启用 FTPS(990/tcp);被动模式需开放一段高位端口(如 40000–50000/tcp)以穿越防火墙/NAT。
  • 高可用可在 HAProxy 前再加 Keepalived VIP 或云厂商 负载均衡器 实现故障切换与对外固定入口。

节点与前置准备

  • 准备至少 2–3 台 Ubuntu 服务器(作为 FTP 节点)与 1 台 HAProxy 节点(可复用为管理/监控节点)。
  • 固定各节点 IP,规划共享目录(如 /data/ftp),统一 UID/GID 与权限模型,避免跨节点权限错乱。
  • 开放云安全组/本机防火墙端口:控制通道 21/tcp,FTPS 990/tcp,被动端口段(如 40000–50000/tcp)。示例(UFW):
    • sudo ufw allow 21/tcp
    • sudo ufw allow 990/tcp
    • sudo ufw allow 40000:50000/tcp
    • sudo ufw enable
  • 建议为 FTP 服务创建专用系统用户(禁止登录 shell),并限制在其家目录(chroot)。

安装与配置 vsftpd

  • 安装与基础安全配置(所有 FTP 节点执行):
    • sudo apt update && sudo apt install -y vsftpd
    • sudo systemctl enable --now vsftpd
    • 备份配置:sudo cp /etc/vsftpd.conf /etc/vsftpd.conf.bak
  • 编辑 /etc/vsftpd.conf(关键项示例,按需调整):
    • 基础:anonymous_enable=NO,local_enable=YES,write_enable=YES,chroot_local_user=YES,allow_writeable_chroot=YES
    • 被动模式:pasv_enable=YES,pasv_min_port=40000,pasv_max_port=50000
    • 日志:xferlog_enable=YES,xferlog_std_format=YES,log_ftp_protocol=YES
  • 启用 FTPS(可选但强烈建议):
    • 生成证书(PEM 合并证书与私钥):
      • sudo openssl req -x509 -nodes -days 365 -newkey rsa:2048
        -keyout /etc/ssl/private/vsftpd.pem -out /etc/ssl/private/vsftpd.pem
    • vsftpd 配置追加/修改:
      • ssl_enable=YES
      • allow_anon_ssl=NO
      • force_local_data_ssl=YES
      • force_local_logins_ssl=YES
      • rsa_cert_file=/etc/ssl/private/vsftpd.pem
      • rsa_private_key_file=/etc/ssl/private/vsftpd.pem
  • 创建 FTP 专用用户(示例):
    • sudo adduser --system --home /data/ftp/ftpuser --shell /usr/sbin/nologin ftpuser
    • sudo mkdir -p /data/ftp/ftpuser/files && sudo chown ftpuser:ftpuser /data/ftp/ftpuser/files
  • 重启生效:sudo systemctl restart vsftpd
  • 验证单节点:命令行 ftp 或 FileZilla 连接 21 端口,登录后尝试上传/下载。

负载均衡与高可用

  • 安装 HAProxy(负载均衡节点执行):sudo apt install -y haproxy
  • 配置 /etc/haproxy/haproxy.cfg(四层转发示例,FTPS 同样走 21 端口):
    • global
      • log /dev/log local0
      • log /dev/log local1 notice
      • daemon
      • maxconn 4096
    • defaults
      • log global
      • mode tcp
      • option tcplog
      • timeout connect 5000ms
      • timeout client 50000ms
      • timeout server 50000ms
    • frontend ftp_front
      • bind *:21
      • default_backend ftp_back
    • backend ftp_back
      • balance roundrobin
      • server ftp1 192.168.1.101:21 check
      • server ftp2 192.168.1.102:21 check
      • server ftp3 192.168.1.103:21 check
  • 启用与验证:
    • sudo systemctl enable --now haproxy
    • 使用客户端连接 HAProxy_IP:21 测试登录与传输;FTPS 连接 990/tcp 同理。
  • 高可用(可选):
    • 在 HAProxy 节点前部署 Keepalived VIP,或直接使用云厂商 负载均衡器 作为入口,实现故障自动切换与对外固定地址。

数据一致性与运维监控

  • 数据一致性:
    • 共享存储优先:将 /data/ftp 挂载为 NFS 或对象存储挂载点,天然保证多节点一致性。
    • 无共享方案:定期/实时用 rsync/lftp mirror 在节点间同步用户目录,注意锁与一致性窗口,避免并发写入冲突。
  • 日志与排障:
    • 查看 vsftpd 日志:sudo tail -f /var/log/vsftpd.log;FTPS 握手与传输在日志中可见(启用 xferlog 更便于审计)。
    • 常见故障:被动端口未放行导致数据通道卡住;证书路径/权限错误导致 FTPS 握手失败;chroot 目录不可写导致上传失败;用户 shell 为 /usr/sbin/nologin 却被 PAM/ftp 策略拒绝(检查 /etc/shells 与 PAM 配置)。
  • 监控与告警:
    • 监控 HAProxy 后端健康(4xx/5xx、会话数、后端宕机),监控节点磁盘/带宽/CPU。
    • 建议接入 Prometheus + Grafana 做可视化与阈值告警,结合日志采集(如 rsyslog/filebeat)完善可观测性。

0