
核心要点(TL;DR)
- SSH暴力破解可通过/var/log/auth.log中的Failed password记录快速确认。
- fail2ban能自动分析日志并调用iptables封禁恶意IP,是阻断SSH爆破的有效工具。
- 配置fail2ban时需调整bantime、findtime和maxretry以平衡安全与误封。
- 结合密钥登录、更改默认端口和防火墙限制可大幅降低SSH被爆破风险。
痛点:SSH 22 端口为何总被盯上
SSH 22 端口是 Linux 服务器的默认管理入口,也是攻击者自动化扫描和暴力破解的首选目标。一旦被攻破,服务器将面临数据泄露、勒索软件植入等严重风险。本文从实战角度出发,手把手教你如何快速排查 SSH 暴力破解迹象,并通过 fail2ban 自动封禁恶意 IP,同时给出加固建议,让你在 30 分钟内完成从发现到阻断的全过程。
第一步:确认是否遭受 SSH 暴力破解
登录服务器,执行以下命令查看认证日志中的失败记录:
grep 'Failed password' /var/log/auth.log | tail -20如果输出中频繁出现来自不同 IP 的“Failed password for root”等字样,说明正在被爆破。还可以统计失败次数最多的 IP:
grep 'Failed password' /var/log/auth.log | awk '{print }' | sort | uniq -c | sort -nr | head -10另外,使用 lastb 命令可查看失败的登录尝试列表。确认攻击后,立即进入下一步防护。
第二步:安装并配置 fail2ban
fail2ban 能监控日志文件,根据规则自动封禁恶意 IP。以 Ubuntu/Debian 为例:
sudo apt update
sudo apt install fail2ban -y创建本地配置文件 /etc/fail2ban/jail.local,内容如下:
[DEFAULT]
bantime = 1h
findtime = 10m
maxretry = 5
ignoreip = 127.0.0.1/8 192.168.1.0/24
[sshd]
enabled = true
port = ssh
logpath = %(sshd_log)s
backend = %(sshd_backend)s参数说明:bantime 为封禁时长,findtime 为检测时间窗口,maxretry 为最大失败次数,ignoreip 用于设置白名单。保存后重启服务:
sudo systemctl restart fail2ban
sudo systemctl enable fail2ban第三步:验证封禁效果与日常管理
查看 fail2ban 运行状态:
sudo fail2ban-client status sshd输出中会显示当前封禁的 IP 列表。若要手动解封某个 IP:
sudo fail2ban-client set sshd unbanip 192.0.2.1也可通过 iptables 查看封禁规则:
sudo iptables -L -n --line-numbers | grep f2b建议配置邮件通知,以便及时感知攻击动态。在 jail.local 的 [DEFAULT] 段添加:
destemail = your@email.com
sender = fail2ban@yourhost
mta = sendmail
action = %(action_mwl)s第四步:SSH 加固检查清单
fail2ban 是事后封禁,结合以下措施可大幅降低风险:
- 禁用密码登录:修改
/etc/ssh/sshd_config中PasswordAuthentication no,改用密钥认证。 - 更改默认端口:将
Port 22改为其他端口,减少自动化扫描。 - 限制访问源 IP:通过防火墙仅允许可信 IP 访问 SSH 端口。
- 启用双因素认证:如 Google Authenticator,增加额外保护层。
- 定期更新软件:保持 OpenSSH 为最新版本,修复已知漏洞。
完成以上步骤后,SSH 暴力破解的成功率将趋近于零。若你希望更省心地管理服务器安全,可以考虑使用 AegisX 的入侵检测与自动封禁能力,它集成了类似 fail2ban 的功能,并提供可视化面板和实时告警,适合多服务器场景。
行动建议
立即登录你的服务器,执行 grep 'Failed password' /var/log/auth.log | wc -l 检查失败次数。若数值异常,请按本文步骤部署 fail2ban,并逐项完成加固清单。安全无小事,早一步行动,少一分风险。
常见问题(FAQ)
如何快速判断SSH是否正在被暴力破解?
执行 grep 'Failed password' /var/log/auth.log | tail -20 查看最近失败记录。若出现大量来自不同IP的失败尝试,或同一IP高频失败,即可判定遭受暴力破解。也可用 lastb 命令查看失败登录列表。
fail2ban 安装后需要做哪些基本配置?
安装后主要修改 /etc/fail2ban/jail.local 文件,启用 [sshd] 并设置 enabled = true,调整 bantime(封禁时长)、findtime(检测时间窗)和 maxretry(最大失败次数)。建议 bantime 设为 1h 以上,maxretry 设为 3-5 次。
fail2ban 封禁后如何查看或解封 IP?
使用 fail2ban-client status sshd 查看当前封禁列表。解封单个 IP 用 fail2ban-client set sshd unbanip 。也可直接查看 iptables 规则:iptables -L -n --line-numbers | grep f2b。
fail2ban 会不会误封正常用户?如何避免?
有可能误封,尤其是用户多次输错密码时。可通过设置白名单(ignoreip)排除可信 IP,并适当调大 maxretry(如 5 次)和 findtime(如 10 分钟)。同时启用邮件通知以及时发现误封。
除了 fail2ban,还有哪些 SSH 防护措施?
建议禁用密码登录,改用密钥认证;修改 SSH 默认端口;使用防火墙限制访问源 IP;启用双因素认证;定期更新 SSH 服务端软件。多层防护可显著降低被入侵风险。