温馨提示×

Ubuntu vsftpd SSL加密

小樊
35
2025-11-16 17:32:09
栏目: 云计算

Ubuntu 上 vsftpd 启用 SSL 加密

一 准备与证书

  • 安装组件:sudo apt update && sudo apt install vsftpd openssl
  • 证书方案(二选一):
    • 自签名(测试/内网):
      sudo openssl req -x509 -nodes -days 365 -newkey rsa:2048
      -keyout /etc/ssl/private/vsftpd.pem -out /etc/ssl/certs/vsftpd.pem
      提示输入国家、组织等信息;生产环境不建议长期使用自签名。
    • Let’s Encrypt(公网/可被信任):
      sudo apt install certbot python3-certbot-nginx
      sudo certbot certonly --standalone -d yourdomain.com
      证书路径:/etc/letsencrypt/live/yourdomain.com/fullchain.pemprivkey.pem

二 配置 vsftpd 启用 SSL

  • 编辑配置文件:sudo nano /etc/vsftpd.conf,建议的基础与 SSL 关键项如下:
    • 基础与访问
      • listen=YES
      • anonymous_enable=NO
      • local_enable=YES
      • write_enable=YES
      • chroot_local_user=YES
      • pam_service_name=vsftpd
    • SSL/TLS
      • ssl_enable=YES
      • allow_anon_ssl=NO
      • force_local_data_ssl=YES
      • force_local_logins_ssl=YES
      • ssl_tlsv1=YES
      • ssl_sslv2=NO
      • ssl_sslv3=NO
      • rsa_cert_file=/etc/letsencrypt/live/yourdomain.com/fullchain.pem(或 /etc/ssl/certs/vsftpd.pem
      • rsa_private_key_file=/etc/letsencrypt/live/yourdomain.com/privkey.pem(或 /etc/ssl/private/vsftpd.pem
  • 说明:上述组合启用显式 FTPS(FTP over SSL/TLS),并强制本地用户登录与数据传输均使用加密。

三 防火墙与被动模式端口

  • 放行端口(UFW 示例):sudo ufw allow 21/tcp;sudo ufw allow 990/tcp;sudo ufw reload。
  • 被动模式(如启用)需开放一段高位端口,并在 vsftpd.conf 中设置:
    • pasv_enable=YES
    • pasv_min_port=10090
    • pasv_max_port=10100
      同时在防火墙放行该端口段:sudo ufw allow 10090:10100/tcp

四 验证与客户端连接

  • 命令行验证 SSL 握手:
    openssl s_client -connect your_server_ip:21 -starttls ftp
    看到 TLS 握手与证书链信息即表明 SSL 配置生效。
  • 图形客户端(FileZilla):协议选择 FTP - FTPS(显式),主机填域名或 IP,端口 21,输入用户名与密码连接;若使用自签名证书,首次会提示信任。
  • 服务重启与状态:
    sudo systemctl restart vsftpd;sudo systemctl status vsftpd

五 常见问题与优化

  • 协议选择:vsftpd 的 SSL 配置对应显式 FTPS(FTPES,端口 21 + STARTTLS),并非 SFTP(基于 SSH 的 22 端口)。
  • 证书权限:证书与私钥建议权限为 600,属主 root,防止其他用户读取私钥。
  • 加密套件与协议:生产环境建议仅启用 TLSv1.2/1.3,禁用 SSLv2/3 与不安全套件;可结合 ssl_ciphers 限制为 HIGH
  • 被动端口范围:若客户端在 NAT/云环境,务必正确设置 pasv_min_port/pasv_max_port 并在防火墙放行,否则数据通道会失败。
  • 证书更新:Let’s Encrypt 证书有效期 90 天,建议配置自动续期(如 systemd 定时器或 certbot 续期钩子),续期后重启 vsftpd 使新证书生效。

0