1. 为什么需要fail2ban防护
服务器暴露在公网环境中时,SSH端口会成为攻击者的首要目标。我管理的几台Ubuntu服务器日志里,每天都能看到数百次来自不同IP的暴力破解尝试。这些攻击不仅消耗系统资源,更可能因弱密码被攻破导致数据泄露。
fail2ban的核心原理是通过监控系统日志(如/var/log/auth.log),识别多次认证失败的IP地址,自动将其加入防火墙规则进行封禁。与手动配置iptables相比,它具有三大优势:
- 动态封禁:根据实时攻击行为调整策略
- 智能解封:可设置封禁时间(bantime)
- 多服务支持:不仅保护SSH,还能防护Apache、Nginx等
2. 安装与基础配置
2.1 安装步骤
在Ubuntu 22.04 LTS上执行:
sudo apt update sudo apt install fail2ban -y安装完成后系统会自动启动服务,可通过以下命令验证状态:
sudo systemctl status fail2ban2.2 配置文件详解
fail2ban的核心配置文件位于:
- /etc/fail2ban/jail.conf(不建议直接修改)
- /etc/fail2ban/jail.local(用户自定义配置)
建议的初始配置模板:
[DEFAULT] ignoreip = 127.0.0.1/8 192.168.1.0/24 bantime = 1h findtime = 10m maxretry = 5 [sshd] enabled = true port = ssh filter = sshd logpath = %(sshd_log)s关键参数说明:
- ignoreip:白名单IP段(需包含管理机IP)
- bantime:封禁时长(1h-24h为宜)
- findtime:检测时间窗口(建议10-30分钟)
- maxretry:允许失败次数(通常3-5次)
3. 高级防护策略
3.1 邮件告警配置
修改jail.local添加:
[DEFAULT] destemail = admin@yourdomain.com sender = fail2ban@yourdomain.com mta = sendmail action = %(action_mwl)s需要安装mailutils:
sudo apt install mailutils3.2 防护其他服务
以Nginx为例新增配置节:
[nginx-botsearch] enabled = true port = http,https filter = nginx-botsearch logpath = /var/log/nginx/access.log maxretry = 3 findtime = 5m bantime = 1d3.3 自定义过滤规则
案例:防护SSH私钥爆破 创建/etc/fail2ban/filter.d/ssh-privatekey.conf:
[Definition] failregex = ^%(__prefix_line)s(?:error: )?Authentication refused: bad ownership or modes for (directory|file) \S+ ignoreregex =4. 运维监控技巧
4.1 实时监控命令
查看当前被封禁IP:
sudo fail2ban-client status sshd手动解封IP:
sudo fail2ban-client set sshd unbanip 192.168.1.1004.2 日志分析技巧
使用awk统计攻击源:
grep "Failed password" /var/log/auth.log | awk '{print $11}' | sort | uniq -c | sort -nr4.3 性能优化建议
对于高负载服务器:
[DEFAULT] dbpurgeage = 86400 usedns = no5. 常见问题解决方案
5.1 误封问题处理
- 检查ignoreip是否包含合法IP段
- 调整maxretry和findtime参数
- 临时解决方案:
sudo fail2ban-client set sshd unbanip <IP>
5.2 服务启动失败排查
检查配置文件语法:
sudo fail2ban-client -d查看详细日志:
journalctl -u fail2ban -f5.3 防护效果验证
使用hydra工具测试(仅限授权测试):
hydra -l test -P password.lst <服务器IP> ssh观察fail2ban日志是否触发封禁:
tail -f /var/log/fail2ban.log重要提示:实际生产环境中,建议配合以下措施增强安全:
- 修改SSH默认端口
- 禁用root直接登录
- 启用密钥认证
- 定期更新系统补丁