Linux vsftp防火墙设置:如何保护服务器免受攻击
小樊
37
2026-01-12 01:13:50
Linux vsftpd 防火墙设置与防护要点
一、基础安全原则
- 禁用匿名访问:设置 anonymous_enable=NO,仅允许可信本地或虚拟用户。
- 限制用户权限:启用 chroot_local_user=YES 将用户限制在其家目录;如必须可写,使用 allow_writeable_chroot=YES(权衡安全性)。
- 访问控制列表:利用 /etc/vsftpd.ftpusers 与 /etc/vsftpd.user_list 配合 userlist_deny=YES/NO 实现黑名单/白名单。
- 加密传输:优先启用 TLS/SSL(FTPS),避免明文凭据与数据泄露。
- 日志与超时:开启 xferlog_enable=YES、设置 idle_session_timeout、data_connection_timeout 等降低被滥用风险。
二、防火墙放行与被动模式端口规划
- 主动模式(PORT):需放行控制通道 21/tcp 与数据通道 20/tcp(由服务器主动连客户端)。
- 被动模式(PASV):除 21/tcp 外,还需在防火墙显式放行一段被动端口范围(如 50000–60000/tcp),并在 vsftpd 配置中设定相同的端口范围,便于状态防火墙准确跟踪连接。
- 端口规划建议:选择一段高位端口(如 50000–60000),范围不宜过大,便于审计与资源控制。
- 加密端口:若启用 FTPS,通常开放 990/tcp(控制) 与 989/tcp(数据)。
三、按发行版配置防火墙
- firewalld(RHEL/CentOS/Fedora)
- 放行控制端口与被动端口段(示例范围 50000–60000/tcp):
firewall-cmd --permanent --add-port=21/tcp
firewall-cmd --permanent --add-port=50000-60000/tcp
firewall-cmd --reload
- 如需 FTPS:
firewall-cmd --permanent --add-port=990/tcp
firewall-cmd --permanent --add-port=989/tcp
firewall-cmd --reload
- 验证:firewall-cmd --list-all
- UFW(Debian/Ubuntu)
- 放行端口:
ufw allow 21/tcp
ufw allow 50000:60000/tcp
ufw enable
- 如需 FTPS:
ufw allow 990/tcp
ufw allow 989/tcp
- 验证:ufw status verbose
- iptables(通用)
- 放行端口:
iptables -A INPUT -p tcp --dport 21 -j ACCEPT
iptables -A INPUT -p tcp --dport 50000:60000 -j ACCEPT
- 持久化:
Debian/Ubuntu:apt install iptables-persistent && netfilter-persistent save
RHEL/CentOS:service iptables save 或使用 firewalld 管理规则
四、vsftpd 关键配置示例与 TLS 启用
- 基本安全与被动端口(/etc/vsftpd.conf):
anonymous_enable=NO
local_enable=YES
write_enable=YES
chroot_local_user=YES
allow_writeable_chroot=YES
pasv_enable=YES
pasv_min_port=50000
pasv_max_port=60000
xferlog_enable=YES
idle_session_timeout=600
data_connection_timeout=120
- 启用 TLS/SSL(FTPS):
- 生成证书:
openssl req -new -x509 -days 365 -nodes -out /etc/ssl/certs/vsftpd.crt -keyout /etc/ssl/private/vsftpd.key
- vsftpd 配置:
ssl_enable=YES
rsa_cert_file=/etc/ssl/certs/vsftpd.crt
rsa_private_key_file=/etc/ssl/private/vsftpd.key
可选:force_local_data_ssl=YES,force_local_logins_ssl=YES
- 防火墙放行 990/tcp、989/tcp(见第三部分)。
五、验证与加固清单
- 连通性与被动端口:
- 使用 FileZilla 以 FTPES(990) 或普通 PASV 连接,验证登录、列目录与传输。
- 服务端查看端口监听:ss -lntp | grep ‘:21|:990’;查看被动端口是否被占用与放行。
- 日志与审计:
- 确认 xferlog_enable=YES 生效,定期审计登录与传输日志。
- 访问控制:
- 通过 /etc/vsftpd.ftpusers 与 /etc/vsftpd.user_list 严格限制可登录用户;必要时仅开放白名单。
- 运行与端口变更:
- 若自定义控制端口(如 2222/tcp),需同步放行防火墙端口,并确保 SELinux/AppArmor 允许该端口作为 FTP 使用(如 semanage port -a -t ftp_port_t -p tcp 2222)。
- 安全提醒:
- 传统 FTP 明文风险高,生产环境优先 FTPS 或改用 SFTP/SCP(基于 SSH);限制并发会话与速率,最小化暴露面。