本文目录导读:

针对FTP暴力破解的拦截,需要从网络层、系统层、应用层以及监控响应四个维度部署防御措施,以下是一套完整的实战方案:
网络层拦截(最前置)
-
防火墙策略
- 限制来源IP:只允许特定IP段访问FTP端口(21/990/tcp)。
- 速率限制:使用
iptables或云防火墙限制单个IP每秒连接数(如iptables -A INPUT -p tcp --dport 21 -m state --state NEW -m limit --limit 10/minute --limit-burst 5 -j ACCEPT)。 - 地区封锁:若业务无海外需求,直接封锁境外IP。
-
边界设备/IPS
- 部署入侵防御系统(如Snort/Suricata),配置FTP暴力破解规则(检测频率:5分钟内同一IP尝试10次密码错误)。
- 启用云服务商的DDoS/暴力破解防护(如AWS WAF、阿里云WAF)。
系统层强化 (服务器端)
-
SSH/OS加固
- 修改FTP默认端口(非标准端口可降低扫描成功率)。
- Fail2ban(最推荐的开源方案):
# /etc/fail2ban/jail.local [vsftpd] enabled = true port = 21 filter = vsftpd logpath = /var/log/vsftpd.log maxretry = 3 bantime = 3600 #锁定1小时 findtime = 600 #10分钟内
- PAM模块:使用
pam_tally2限制错误登录次数(如auth required pam_tally2.so deny=5 unlock_time=900)。
-
系统资源限制
- 通过
ulimit限制FTP进程最大文件句柄数。 - 使用
cgroups隔离FTP服务CPU/内存,防止DoS。
- 通过
应用层配置 (FTP软件)
-
vsftpd配置(/etc/vsftpd.conf)
# 限制连接速率 local_max_rate=50000 # 50KB/s # 超时设置 idle_session_timeout=300 data_connection_timeout=120 # 黑名单 banner_fail="Connection rejected" # 限制最大客户端数 max_clients=10 max_per_ip=2
-
ProFTPD配置
MaxLoginAttempts 3:丢弃3次失败后的连接。ModDelayOn:对暴力破解进行延迟惩罚。
-
禁用匿名访问
anonymous_enable=NO,减少攻击面。
检测与告警系统
-
实时监控
- ELK/Wazuh:配置FTP日志分析告警(如1小时内同一IP失败>5次)。
- 使用
lnav /var/log/vsftpd.log快速查看实时登录失败记录。
-
蜜罐技术
在生产服务器旁部署FTP蜜罐(如Cowrie),捕获攻击者行为并自动屏蔽其IP。
替代方案 (最终防线)
- 更换协议:使用SFTP(SSH协议,本身提供加密和重试限制)或FTPS(TLS加密+证书验证)。
- 双因子认证:FTP结合Google Authenticator(通过PAM模块实现)。
- 一次性链接:使用FileZilla Server的“一次性访问令牌”功能。
应急响应步骤
当发现持续暴力破解时:
- 立即拒绝:执行
iptables -A INPUT -s <恶意IP> -j DROP。 - 取证:
grep "FAIL LOGIN" /var/log/vsftpd.log | awk '{print $3}' | sort | uniq -c | sort -nr。 - 自动化脚本:编写脚本将超过阈值的IP自动添加到
/etc/hosts.deny文件。
典型攻击场景对抗示例
- 攻击者连续尝试密码:
→ vsftpd 生成
331 Please specify the password.和530 Login incorrect.→ Fail2ban 监控到/var/log/vsftpd.log的530模式。 → 达到maxretry=3后,生成iptables规则封锁IP 3600秒。 → 管理员收到Nginx告警插件发送的Slack消息。
注意事项
- 避免误封己方IP:在Fail2ban中配置
ignoreip = 你的公司公网IP段。 - 日志完整:确保
vsftpd.conf中xferlog_std_format=YES且日志权限为644。 - 组合防御:任何单一方案都不完美,建议网络层黑名单 + Fail2ban + 认证限制三层叠加。
通过以上方案的组合实施,可将FTP暴力破解的成功率降低至0.1%以下,实际部署时建议先从Fail2ban+端口修改入手,确保修改前备份原始配置文件。