- 首页 >
- 问答 >
-
云计算 >
- Linux vsftp防火墙配置:保护服务器免受攻击
Linux vsftp防火墙配置:保护服务器免受攻击
小樊
40
2025-12-10 04:44:44
Linux vsftpd 防火墙配置与加固指南
一、基础安全原则
- 禁用匿名访问:设置 anonymous_enable=NO,仅允许可信本地用户。
- 限制用户目录:启用 chroot_local_user=YES,避免用户越权访问系统目录。
- 最小权限:按需开启 write_enable=YES,并为上传目录设置专用用户与权限。
- 加密传输:优先启用 SSL/TLS(FTPS),避免明文凭据与数据被窃听。
- 加固被动端口:在 vsftpd 中固定 pasv_min_port/pasv_max_port,并在防火墙中精确放行该范围。
- 日志与审计:开启 xferlog_enable=YES,定期审计登录与传输行为。
二、防火墙放行与控制连接
- firewalld(CentOS/RHEL 7+/Fedora)
- 放行控制端口与被动端口范围(示例范围:30000–31000):
- sudo firewall-cmd --permanent --add-port=21/tcp
- sudo firewall-cmd --permanent --add-port=20/tcp
- sudo firewall-cmd --permanent --add-port=30000-31000/tcp
- sudo firewall-cmd --reload
- 如需使用 firewalld 的 FTP 助手模块(模块会自动处理被动端口与状态跟踪),可执行:
- sudo firewall-cmd --permanent --add-service=ftp && sudo firewall-cmd --reload
- UFW(Ubuntu/Debian)
- 放行控制端口与被动端口范围:
- sudo ufw allow 21/tcp
- sudo ufw allow 20/tcp
- sudo ufw allow 30000:31000/tcp
- iptables(传统方式)
- 放行控制与被动端口,并允许已建立/相关连接返回:
- sudo iptables -A INPUT -p tcp --dport 21 -j ACCEPT
- sudo iptables -A INPUT -p tcp --dport 20 -j ACCEPT
- sudo iptables -A INPUT -p tcp --dport 30000:31000 -j ACCEPT
- sudo iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
- 规则持久化:
- Debian/Ubuntu:sudo apt-get install iptables-persistent && sudo netfilter-persistent save
- CentOS/RHEL:sudo service iptables save
说明:FTP 控制通道使用 21/tcp,主动模式数据通道使用 20/tcp,被动模式数据通道使用配置的范围端口。
三、vsftpd 关键配置示例
- 基本与访问控制(/etc/vsftpd.conf)
- anonymous_enable=NO
- local_enable=YES
- write_enable=YES
- chroot_local_user=YES
- allow_writeable_chroot=NO(更安全的做法;若必须可写,请评估风险)
- userlist_enable=YES
- tcp_wrappers=YES
- 被动模式端口范围(示例:30000–31000)
- pasv_enable=YES
- pasv_min_port=30000
- pasv_max_port=31000
- SSL/TLS(FTPS)
- 生成自签证书(示例):
- sudo openssl req -new -x509 -days 365 -nodes -out /etc/ssl/certs/ftp.crt -keyout /etc/ssl/private/ftp.key
- 启用加密:
- ssl_enable=YES
- ssl_cert_file=/etc/ssl/certs/ftp.crt
- ssl_key_file=/etc/ssl/private/ftp.key
- force_local_logins_ssl=YES
- force_local_data_ssl=YES
修改后重启服务:sudo systemctl restart vsftpd。
四、SELinux 与系统加固
- SELinux(若启用)
- 允许家目录访问与完整 FTP 访问:
- sudo setsebool -P ftp_home_dir on
- sudo setsebool -P allow_ftpd_full_access on
- 目录上下文(示例):
- sudo chcon -Rv --type=public_content_t /home/ftpuser
- 访问控制与监控
- 仅允许必要来源 IP(在 firewalld 中使用 rich rules 或外部防火墙限制)。
- 定期更新系统与 vsftpd,监控日志:
- sudo tail -f /var/log/vsftpd.log
- 检查系统日志:/var/log/messages。
五、验证与故障排查
- 服务与端口
- 检查 vsftpd:sudo systemctl status vsftpd
- 检查端口监听:ss -lntp | grep -E ‘(:21|:30000)’
- 连通性测试
- 本地回环:ftp localhost
- 远程客户端(显式 FTPS):使用 FileZilla 选择 FTP over TLS,验证登录与传输。
- 常见问题
- 被动模式失败:确认防火墙已放行 pasv_min_port–pasv_max_port,且客户端使用被动模式。
- 登录被拒或目录不可写:核对 anonymous_enable、chroot_local_user、目录权限与 SELinux 布尔值。
- 明文被窃听风险:确保启用 SSL/TLS 并禁用明文 FTP。