优化 CentOS 上的 FTPServer(通常指 vsftpd + SSL/TLS) 可以从 性能、安全、稳定性、可维护性 四个方面入手。下面给你一套实战型优化方案,适用于生产环境。
vsftpd(最稳定、常用)yum install -y vsftpd openssl
openssl req -x509 -nodes -days 3650 \
-newkey rsa:2048 \
-keyout /etc/vsftpd/vsftpd.key \
-out /etc/vsftpd/vsftpd.crt
编辑配置文件:
vim /etc/vsftpd/vsftpd.conf
# 基础
listen=YES
listen_ipv6=NO
anonymous_enable=NO
local_enable=YES
write_enable=YES
local_umask=022
# 安全
chroot_local_user=YES
allow_writeable_chroot=YES
userlist_enable=YES
userlist_deny=NO
userlist_file=/etc/vsftpd/user_list
# SSL / TLS(FTPS)
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/vsftpd/vsftpd.crt
rsa_private_key_file=/etc/vsftpd/vsftpd.key
# 性能优化
max_clients=500
max_per_ip=10
idle_session_timeout=300
data_connection_timeout=120
local_max_rate=0 # 不限速,或设为 1048576(1MB/s)
# 被动模式(必须)
pasv_enable=YES
pasv_min_port=30000
pasv_max_port=31000
pasv_address=你的公网IP
⚠️ 被动模式端口一定要在防火墙放行
vim /etc/security/limits.conf
* soft nofile 65535
* hard nofile 65535
vim /etc/sysctl.conf
net.core.somaxconn = 65535
net.ipv4.tcp_max_syn_backlog = 65535
net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_fin_timeout = 30
net.core.netdev_max_backlog = 65535
生效:
sysctl -p
firewall-cmd --permanent --add-port=21/tcp
firewall-cmd --permanent --add-port=30000-31000/tcp
firewall-cmd --reload
setsebool -P ftp_home_dir on
setsebool -P allow_ftpd_full_access on
✅ 禁止 root 登录
echo "root" >> /etc/vsftpd/ftpusers
✅ 限制用户访问
vim /etc/vsftpd/user_list
只放允许的用户
✅ 启用 fail2ban
yum install -y fail2ban
systemctl enable --now fail2ban
xferlog_enable=YES
xferlog_std_format=YES
log_ftp_protocol=YES # 调优时可开启
查看日志:
tail -f /var/log/vsftpd.log
| 场景 | 建议 |
|---|---|
| 大文件传输 | 使用被动模式 + 不限速 |
| 高并发 | 调大 max_clients |
| 内网 | 可关闭 SSL(不推荐) |
| 云服务器 | 一定要配置 pasv_address |
❌ 连接慢
✅ 关闭 DNS 反解:
reverse_lookup_enable=NO
❌ 上传失败
✅ 检查 SELinux、目录权限、chroot
如果你愿意,可以告诉我:
我可以帮你 定制一份 vsftpd 最优配置模板 ✅