1. 为什么你的ECS服务器需要Fail2ban防护最近帮朋友处理了一台被暴力破解的ECS服务器登录一看发现/var/log/secure里密密麻麻全是SSH登录失败的记录攻击者用自动化工具每秒尝试几十次密码组合。这种情况在云服务器上太常见了——暴露在公网的22端口就像黑夜里的灯塔不断吸引着脚本小子的扫描。传统的密码防护就像用木门防贼而Fail2ban则是给你的服务器装上了智能安防系统。Fail2ban本质上是个自动化安全卫士它持续监控系统日志当检测到某个IP在短时间内多次认证失败时比如1分钟失败5次就会自动调用防火墙规则封禁该IP。我经手过的服务器中未防护的ECS实例平均每天会遭受3000次暴力破解尝试而配置得当的Fail2ban能拦截99%的这类攻击。与云厂商自带的安全组相比Fail2ban有三大优势一是响应速度更快秒级阻断二是能动态学习攻击模式三是支持自定义防护策略。去年我管理的电商平台就遇到过针对性攻击攻击者用200多个IP轮番尝试全靠Fail2ban的智能识别才避免了数据泄露。2. 十分钟快速部署Fail2ban2.1 安装前的准备工作先检查系统环境这些命令能帮你少踩坑# 确认系统版本 cat /etc/redhat-release # CentOS/RHEL lsb_release -a # Ubuntu/Debian # 检查Python版本Fail2ban依赖Python python --version # 查看SELinux状态建议关闭 getenforce对于CentOS 7/8和Ubuntu 20.04 LTS这些主流系统安装非常简单# CentOS/RHEL sudo yum install epel-release -y sudo yum install fail2ban -y # Ubuntu/Debian sudo apt update sudo apt install fail2ban -y安装完成后别急着启动先做两个重要操作备份原始配置sudo cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.conf.bak创建本地配置文件sudo touch /etc/fail2ban/jail.local2.2 基础防护配置实战jail.local文件建议这样配置关键参数已调优[DEFAULT] # 全局设置 ignoreip 127.0.0.1/8 192.168.0.0/16 # 白名单IP段 bantime 86400 # 封禁时长(秒)建议24小时 findtime 600 # 检测时间窗口(秒) maxretry 5 # 最大尝试次数 [sshd] enabled true port ssh filter sshd logpath /var/log/secure # CentOS日志路径 # /var/log/auth.log # Ubuntu日志路径启动服务并设置开机自启sudo systemctl enable --now fail2ban sudo systemctl status fail2ban # 检查状态应为active3. 高级防护策略配置3.1 针对SSH的强化防护在原有配置基础上增加这些参数[sshd] # 启用增强模式 mode aggressive # 封禁前发送警告邮件需配置邮件服务 destemail youremail.com sender rootyourhostname action %(action_mwl)s对于使用非标准端口的场景比如2022端口[sshd-custom] enabled true port 2022 filter sshd logpath /var/log/secure maxretry 33.2 防护其他服务MySQL防护配置示例[mysqld-auth] enabled true filter mysqld-auth port 3306 logpath /var/log/mysqld.log maxretry 3Nginx防护CC攻击配置[nginx-cc] enabled true port http,https filter nginx-cc logpath /var/log/nginx/access.log maxretry 100 # 100次请求/分钟 findtime 60 bantime 36004. 日常管理与故障排查4.1 常用管理命令查看被封禁的IPsudo fail2ban-client status sshd手动封禁/解封IP# 封禁特定IP sudo fail2ban-client set sshd banip 192.168.1.100 # 解封特定IP sudo fail2ban-client set sshd unbanip 192.168.1.100 # 查看所有防护监狱状态 sudo fail2ban-client status4.2 日志分析技巧实时监控攻击日志tail -f /var/log/fail2ban.log | grep Ban分析攻击源统计# 统计攻击IP排名 grep Failed password /var/log/secure | awk {print $11} | sort | uniq -c | sort -nr4.3 常见问题解决如果发现Fail2ban不生效按这个流程排查检查服务状态systemctl status fail2ban验证配置语法fail2ban-client -t查看详细日志journalctl -u fail2ban -f测试规则匹配fail2ban-regex /var/log/secure /etc/fail2ban/filter.d/sshd.conf5. 安全加固的进阶建议除了Fail2ban建议实施这些防护措施修改SSH默认端口编辑/etc/ssh/sshd_config中的Port参数禁用root登录设置PermitRootLogin no启用密钥认证设置PasswordAuthentication no配置防火墙规则firewall-cmd --permanent --add-rich-rulerule familyipv4 source address攻击IP drop对于高价值业务服务器建议组合使用Fail2ban进行动态防护云安全组设置IP白名单定期审计日志文件使用证书管理工具如Vault管理密钥最后提醒一个容易忽略的点定期更新Fail2ban规则。去年Log4j漏洞爆发时及时更新过滤规则的服务器都成功拦截了漏洞利用尝试。更新命令很简单# CentOS sudo yum update fail2ban # Ubuntu sudo apt update sudo apt upgrade fail2ban