FTP协议在设计时未考虑数据加密,存在以下核心风险:
执行以下命令确认系统环境:
``` 检查系统版本 cat /etc/os-release 检查当前FTP服务状态 systemctl list-units | grep ftp 检查防火墙状态 sudo ufw status ```使用包管理器安装最新版vsftpd:
``` Ubuntu/Debian系统 sudo apt update sudo apt install vsftpd -y CentOS/RHEL系统 sudo yum install epel-release -y sudo yum install vsftpd -y ```备份原始配置文件:
``` sudo cp /etc/vsftpd.conf /etc/vsftpd.conf.backup ```编辑配置文件/etc/vsftpd.conf,修改以下关键参数:
``` 禁止匿名访问 anonymous_enable=NO 允许本地用户登录 local_enable=YES 启用chroot监狱,限制用户访问其主目录 chroot_local_user=YES allow_writeable_chroot=YES 设置本地用户掩码 local_umask=022 限制用户列表(需配合userlist_file使用) userlist_enable=YES userlist_deny=NO userlist_file=/etc/vsftpd.user_list 连接超时设置 idle_session_timeout=300 data_connection_timeout=120 最大客户端连接数 max_clients=50 max_per_ip=5 启用详细日志 xferlog_enable=YES xferlog_file=/var/log/vsftpd.log xferlog_std_format=YES 禁用ASCII模式传输,防止文件损坏 ascii_upload_enable=NO ascii_download_enable=NO 启用被动模式并指定端口范围 pasv_enable=YES pasv_min_port=60000 pasv_max_port=61000 ```创建不可登录系统的FTP专用用户:
``` 创建用户组 sudo groupadd ftpusers 创建用户并指定不可登录shell sudo useradd -g ftpusers -d /var/ftp/username -s /sbin/nologin username 设置用户密码 sudo passwd username 创建用户目录并设置权限 sudo mkdir -p /var/ftp/username sudo chown -R username:ftpusers /var/ftp/username sudo chmod 750 /var/ftp/username ```编辑/etc/vsftpd.user_list文件,添加允许访问的用户:
``` username1 username2 每行一个用户名 ```创建用户配置文件目录:
``` sudo mkdir /etc/vsftpd/user_conf ```为特定用户创建独立配置,例如/etc/vsftpd/user_conf/username:
``` 限制用户最大传输速率(单位:字节/秒) local_max_rate=1024000 限制用户并发连接数 max_clients=3 限制用户IP连接数 max_per_ip=2 ```使用UFW配置防火墙:
``` 允许SSH端口(保持远程管理) sudo ufw allow 22/tcp 允许FTP控制端口 sudo ufw allow 21/tcp 允许FTP被动模式端口范围 sudo ufw allow 60000:61000/tcp 启用防火墙 sudo ufw enable 查看规则状态 sudo ufw status numbered ```编辑/etc/hosts.allow文件:
``` vsftpd: 192.168.1.0/24 vsftpd: 10.0.0.0/8 ```
编辑/etc/hosts.deny文件:
``` vsftpd: ALL ```使用OpenSSL生成自签名证书:
``` 创建证书目录 sudo mkdir -p /etc/ssl/private 生成私钥和证书 sudo openssl req -x509 -nodes -days 3650 -newkey rsa:2048 \ -keyout /etc/ssl/private/vsftpd.key \ -out /etc/ssl/private/vsftpd.crt \ -subj "/C=CN/ST=Beijing/L=Beijing/O=Company/CN=ftp.yourdomain.com" ```在/etc/vsftpd.conf中添加以下配置:
``` 启用SSL ssl_enable=YES 强制所有用户使用SSL force_local_data_ssl=YES force_local_logins_ssl=YES 允许但不要求SSL ssl_tlsv1=YES ssl_sslv2=NO ssl_sslv3=NO 指定证书路径 rsa_cert_file=/etc/ssl/private/vsftpd.crt rsa_private_key_file=/etc/ssl/private/vsftpd.key SSL配置选项 require_ssl_reuse=NO ssl_ciphers=HIGH ```重启vsftpd服务:
``` sudo systemctl restart vsftpd sudo systemctl enable vsftpd ```检查服务状态:
``` sudo systemctl status vsftpd sudo netstat -tulpn | grep :21 ```使用FileZilla进行测试,连接配置如下:
执行以下操作验证功能:
``` 使用命令行测试(需安装lftp) sudo apt install lftp -y 测试SSL连接 lftp -u username -p 21 ftps://server_ip 登录后执行测试命令 ls put local_file.txt get remote_file.txt ```配置日志轮转,创建/etc/logrotate.d/vsftpd:
``` /var/log/vsftpd.log { daily missingok rotate 30 compress delaycompress notifempty create 640 root adm postrotate systemctl reload vsftpd > /dev/null 2>&1 || true endscript } ```定期执行安全检查:
``` 检查异常登录尝试 sudo grep "FAIL LOGIN" /var/log/vsftpd.log 检查文件权限 sudo find /var/ftp -type f -perm /o+w -ls 使用nmap扫描FTP服务 sudo nmap -sV -p 21 --script ftp- server_ip ```设置自动化更新和备份:
``` 创建备份脚本 /usr/local/bin/backup_ftp_config.sh !/bin/bash BACKUP_DIR="/backup/ftp_config" DATE=$(date +%Y%m%d_%H%M%S) 备份配置文件 tar -czf "$BACKUP_DIR/ftp_config_$DATE.tar.gz" \ /etc/vsftpd.conf \ /etc/vsftpd.user_list \ /etc/vsftpd/user_conf \ /etc/ssl/private/vsftpd. 保留最近30天备份 find "$BACKUP_DIR" -name ".tar.gz" -mtime +30 -delete 添加cron任务,每天凌晨2点执行 0 2 /usr/local/bin/backup_ftp_config.sh ```sudo chmod 600 /etc/ssl/private/vsftpd.key根据实际需求调整以下参数:
``` 增加并发连接数(高并发场景) max_clients=200 max_per_ip=20 调整传输缓冲区大小 anon_max_rate=1024000 local_max_rate=2048000 优化TCP参数 sysctl -w net.core.rmem_max=33554432 sysctl -w net.core.wmem_max=33554432 ```易频IT社区是综合性互联网IT技术门户网站,专注分享网络技术、服务器运维、网络安全、编程开发、系统架构、云计算、大数据等行业干货,实时更新IT行业资讯、零基础教程、实战案例,为IT从业者、技术爱好者提供专业的学习交流平台。
Copyright © 2021-2026 易频IT社区. All Rights Reserved. 备案号:闽ICP备2023013482号 网站地图