在 Debian 上给 vsftpd 开启加密(FTP over TLS/SSL,也就是 FTPS),通常分为 安装证书 和 配置 vsftpd 两部分。下面给你一个可直接照做的完整流程。
sudo apt update
sudo apt install vsftpd -y
sudo openssl req -x509 -nodes -days 365 -newkey rsa:2048 \
-keyout /etc/ssl/private/vsftpd.key \
-out /etc/ssl/certs/vsftpd.crt
生成时会让你填写信息,Common Name 建议填服务器 IP 或域名。
sudo apt install certbot -y
sudo certbot certonly --standalone -d ftp.example.com
证书路径通常是:
/etc/letsencrypt/live/ftp.example.com/fullchain.pem
/etc/letsencrypt/live/ftp.example.com/privkey.pem
编辑配置文件:
sudo nano /etc/vsftpd.conf
# 启用 SSL
ssl_enable=YES
# 禁止匿名用户使用 SSL(可选)
allow_anon_ssl=NO
# 强制本地用户使用加密
force_local_data_ssl=YES
force_local_logins_ssl=YES
# SSL 证书
rsa_cert_file=/etc/ssl/certs/vsftpd.crt
rsa_private_key_file=/etc/ssl/private/vsftpd.key
# 使用 TLS 而不是 SSLv2/SSLv3
ssl_tlsv1=YES
ssl_sslv2=NO
ssl_sslv3=NO
# 提高安全性
require_ssl_reuse=NO
ssl_ciphers=HIGH
✅ 如果用 Let’s Encrypt,改成:
rsa_cert_file=/etc/letsencrypt/live/ftp.example.com/fullchain.pem
rsa_private_key_file=/etc/letsencrypt/live/ftp.example.com/privkey.pem
很多 FTPS 连接失败都是因为被动模式没开。
pasv_enable=YES
pasv_min_port=30000
pasv_max_port=31000
pasv_address=你的服务器公网IP
然后放行端口:
sudo ufw allow 30000:31000/tcp
sudo systemctl restart vsftpd
sudo systemctl status vsftpd
| 客户端 | 连接类型 |
|---|---|
| FileZilla | FTP over TLS(显式加密) |
| WinSCP | FTPS(TLS/SSL) |
| lftp | set ftp:ssl-force true |
⚠️ 不要用 SFTP(SSH),那是另一个协议。
pasv_address 没配置ssl_enable=YES
force_local_logins_ssl=YES
force_local_data_ssl=YES
rsa_cert_file=/etc/ssl/certs/vsftpd.crt
rsa_private_key_file=/etc/ssl/private/vsftpd.key
pasv_enable=YES
pasv_min_port=30000
pasv_max_port=31000
pasv_address=你的IP
如果你愿意,可以把你的 Debian 版本 + vsftpd 版本 + 报错日志 发出来,我可以帮你精确排查。