1. 禁用匿名访问
匿名访问是FTP服务器最易被滥用的入口,必须彻底关闭。编辑vsftpd主配置文件/etc/vsftpd.conf
,将anonymous_enable=YES
修改为anonymous_enable=NO
,阻止未授权用户通过匿名账号(如anonymous
)登录服务器。
2. 限制用户访问范围(Chroot Jail)
通过chroot
机制将用户限制在自己的主目录内,防止其访问系统其他敏感目录。在/etc/vsftpd.conf
中设置:
chroot_local_user=YES
(强制所有本地用户进入chroot环境);
allow_writeable_chroot=YES
(允许chroot目录可写,避免用户因目录不可写导致无法上传文件)。
同时,可通过/etc/vsftpd.chroot_list
文件指定允许或禁止chroot的用户列表(需配合chroot_list_enable=YES
使用)。
3. 启用SSL/TLS加密传输
FTP协议默认以明文传输数据(包括用户名、密码和文件内容),极易被窃听。需启用SSL/TLS加密保护数据传输:
sudo apt install openssl
;sudo openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout /etc/ssl/private/vsftpd.pem -out /etc/ssl/private/vsftpd.pem
;ssl_enable=YES
(启用SSL)、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
(私钥路径);ssl_tlsv1=YES
、ssl_sslv2=NO
、ssl_sslv3=NO
(仅允许TLSv1.2及以上版本)。4. 配置防火墙限制访问
使用ufw
(Uncomplicated Firewall)或iptables
限制FTP服务的访问范围,仅允许可信IP地址或网段访问:
sudo ufw allow 21/tcp
、sudo ufw allow 20/tcp
;sudo ufw allow 1024:1048/tcp
;sudo ufw allow from 192.168.1.100 to any port 21/tcp
;sudo ufw enable
。5. 控制用户权限与功能
/etc/vsftpd.conf
中设置ls_recurse_enable=NO
(关闭ls -R
递归命令,防止DoS攻击)、ascii_download_enable=NO
(关闭ASCII模式下载,避免CPU资源消耗);write_enable=NO
(禁止写入);若需允许上传,需确保chroot目录权限正确(如/home/ftpuser
设置为755
,避免用户上传可执行文件);max_clients=50
(最大并发连接数)和max_per_ip=5
(单个IP最大并发连接数)参数,防止资源耗尽攻击。6. 使用强认证与用户管理
sudo adduser ftpuser
创建专用用户,并设置复杂密码;/etc/vsftpd.userlist
文件指定允许登录的用户,设置userlist_enable=YES
、userlist_file=/etc/vsftpd.userlist
、userlist_deny=NO
(仅允许列表内用户登录);/sbin/nologin
或/bin/false
(如sudo usermod -s /sbin/nologin ftpuser
),防止用户通过FTP登录后获得系统shell权限。7. 启用日志记录与监控
开启详细日志记录,便于及时发现异常活动。在/etc/vsftpd.conf
中设置:
xferlog_enable=YES
(启用传输日志)、xferlog_file=/var/log/vsftpd.log
(日志文件路径)、xferlog_std_format=YES
(使用标准日志格式);
定期检查日志文件(如sudo tail -f /var/log/vsftpd.log
),关注异常登录(如频繁失败尝试)、异常传输(如大量下载/上传)等行为。
8. 定期更新与补丁管理
保持vsftpd及系统软件包为最新版本,及时修补已知安全漏洞。使用以下命令更新系统:
sudo apt update && sudo apt upgrade -y
(Debian/Ubuntu);
sudo yum update -y
(CentOS/RHEL)。
9. 使用被动模式(PASV)并配置端口范围
被动模式可避免FTP服务器主动连接客户端(解决NAT环境下连接失败问题),同时需限制被动模式端口范围,便于防火墙管理。在/etc/vsftpd.conf
中设置:
pasv_enable=YES
(启用被动模式)、pasv_min_port=1024
(被动模式最小端口)、pasv_max_port=1048
(被动模式最大端口)。
10. 集成TCP Wrappers(可选)
通过TCP Wrappers进一步增强访问控制,编辑/etc/hosts.allow
和/etc/hosts.deny
文件:
hosts.allow
:vsftpd: 192.168.1.100
(仅允许可信IP访问);hosts.deny
:vsftpd: ALL
(拒绝其他所有IP访问)。tcpd
包(sudo apt install tcpd
)。