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段需包含管理机IPbantime封禁时长1h-24h为宜findtime检测时间窗口建议10-30分钟maxretry允许失败次数通常3-5次3. 高级防护策略3.1 邮件告警配置修改jail.local添加[DEFAULT] destemail adminyourdomain.com sender fail2banyourdomain.com mta sendmail action %(action_mwl)s需要安装mailutilssudo 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 实时监控命令查看当前被封禁IPsudo fail2ban-client status sshd手动解封IPsudo 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 IP5.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直接登录启用密钥认证定期更新系统补丁