SSH暴力破解日志分析与自动封禁IP方案
概述
服务器SSH端口长期暴露在公网,极易遭受暴力破解攻击。攻击者通过自动化脚本尝试大量弱口令,占用系统资源并带来安全风险。本文介绍如何通过分析系统日志实时识别异常登录行为,并利用开源工具实现IP自动封禁,降低运维负担。
日志分析:定位暴力破解特征
Linux系统下,SSH登录日志默认记录在 /var/log/auth.log(Debian/Ubuntu)或 /var/log/secure(RHEL/CentOS)中。暴力破解的典型特征包括:
- 短时间内同一IP多次出现“Failed password”条目
- 连续尝试不存在的用户名(如 admin、root 等)
- 登录间隔极短,符合脚本并发特征
使用 grep 命令快速统计失败次数:
grep 'Failed password' /var/log/auth.log | awk '{print $(NF-3)}' | sort | uniq -c | sort -nr
该命令输出各IP的失败次数,便于人工判断阈值。
自动化封禁:fail2ban 实战
fail2ban 是业界广泛使用的入侵防御框架,通过监控日志文件并触发防火墙规则实现IP封禁。以下是标准配置流程:
1. 安装 fail2ban
以Ubuntu为例:sudo apt update && sudo apt install fail2ban -y
2. 创建本地配置文件
避免直接修改 /etc/fail2ban/jail.conf,建议新建 /etc/fail2ban/jail.local:
[sshd]
enabled = true
port = ssh
filter = sshd
logpath = /var/log/auth.log
maxretry = 5
bantime = 3600
findtime = 600
- maxretry:允许的最大失败次数(本例为5次)
- bantime:封禁时长(秒,3600即1小时)
- findtime:统计时间窗口(秒,600即10分钟)
3. 启动并验证
sudo systemctl restart fail2ban && sudo fail2ban-client status sshd
命令输出显示当前封禁IP列表及统计信息。
进阶优化:白名单与持久化
为避免误封内部或可信IP,可在 jail.local 中添加:ignoreip = 127.0.0.1/8 192.168.1.0/24
同时建议将封禁规则写入iptables持久化方案,例如使用 iptables-persistent 或 firewalld。
监测与告警集成
生产环境中,可将fail2ban的封禁事件通过日志采集工具(如Rsyslog、Filebeat)转发至集中分析平台,结合Prometheus或Zabbix实现实时告警。示例脚本可通过解析 /var/log/fail2ban.log 提取被封IP,触发Webhook通知。
总结
通过日志分析结合fail2ban自动化封禁,能有效压制SSH暴力破解攻击,减少人工干预。建议同时启用密钥认证、禁用root远程登录、修改SSH默认端口等纵深防御措施,构建更安全的远程访问环境。