SSH 一直被暴力破解怎么办:fail2ban 加密钥登录的完整配置步骤 核心要点图解,SSH 暴力破解可通过 fail2ban 自动封禁攻击 IP 有效缓解。;配置密钥登录并禁用密码认证是根治暴力破解的关键。;修改 SSH 配置后必须检查语法并保留一个活跃会话以防锁死。;fail2ban 的 jail.local 中 maxretry 和 bantime 需根据业务调整。
SSH 一直被暴力破解怎么办:fail2ban 加密钥登录的完整配置步骤 · 核心要点一图读懂(AegisX)

核心要点(TL;DR)

  • SSH 暴力破解可通过 fail2ban 自动封禁攻击 IP 有效缓解。
  • 配置密钥登录并禁用密码认证是根治暴力破解的关键。
  • 修改 SSH 配置后必须检查语法并保留一个活跃会话以防锁死。
  • fail2ban 的 jail.local 中 maxretry 和 bantime 需根据业务调整。

凌晨三点,服务器 CPU 飙升,登录一看 /var/log/auth.log 里满是 Failed password for root——SSH 暴力破解又来了。放任不管不仅消耗资源,还可能被撞库成功。本文将手把手带你用 fail2ban 自动封禁攻击 IP,并切换到密钥登录彻底关闭密码入口,附完整命令与检查清单,照着做就能搞定。

为什么 SSH 暴力破解必须立即处理

SSH 暴露在公网时,每天会遭遇数万次密码尝试。攻击者利用自动化工具轮询常见用户名和弱口令,一旦得手即可植入挖矿、勒索软件或作为跳板。单纯改端口只是延缓,无法根治。fail2ban 能动态分析日志并封禁异常 IP,而密钥登录则从认证方式上杜绝密码猜测,两者结合是运维标配。

第一步:安装并配置 fail2ban

主流 Linux 发行版均可通过包管理器安装:

# Debian/Ubuntu
apt update && apt install fail2ban -y
# CentOS/RHEL
 yum install epel-release -y && yum install fail2ban -y

安装后不要直接修改 jail.conf,应创建 /etc/fail2ban/jail.local 覆盖默认值。以下是一个针对 SSH 的推荐配置:

[sshd]
enabled = true
port = ssh
filter = sshd
logpath = /var/log/auth.log
maxretry = 3
bantime = 3600
findtime = 600
ignoreip = 127.0.0.1/8

说明:maxretry=3 表示 10 分钟内失败 3 次即封禁 1 小时;ignoreip 加入本机避免误封。CentOS 的日志路径可能是 /var/log/secure,需对应修改。保存后重启服务:

systemctl restart fail2ban
systemctl enable fail2ban

验证状态:fail2ban-client status sshd 应显示当前封禁 IP 列表。若未生效,检查日志 /var/log/fail2ban.log 排查过滤规则。

第二步:生成密钥并上传至服务器

在本地终端执行(不要用 root 直接生成,建议用普通用户):

ssh-keygen -t ed25519 -C "your_email@example.com"

按提示保存密钥(默认 ~/.ssh/id_ed25519),可设置密码短语增加安全性。然后上传公钥:

ssh-copy-id -i ~/.ssh/id_ed25519.pub user@server_ip

若没有 ssh-copy-id,可手动复制公钥内容追加到服务器 ~/.ssh/authorized_keys,并确保权限:

chmod 700 ~/.ssh
chmod 600 ~/.ssh/authorized_keys

测试密钥登录:ssh -i ~/.ssh/id_ed25519 user@server_ip,成功进入后再进行下一步。

第三步:禁用密码登录并加固 SSH

关键安全步骤:在修改配置前,保持一个已登录的 SSH 会话不退出,以防配置错误导致无法连接。编辑 /etc/ssh/sshd_config,修改以下参数:

PasswordAuthentication no
ChallengeResponseAuthentication no
UsePAM no
PubkeyAuthentication yes
PermitRootLogin prohibit-password

保存后先检查语法:sshd -t,无输出表示正常。然后重载配置:systemctl reload sshd。新开一个终端测试密钥登录,确认无误后再关闭旧会话。

检查清单与对比

完成配置后,逐项核对:

  • fail2ban 服务已启动并开机自启
  • fail2ban-client status sshd 显示正常
  • 密钥登录成功,密码登录被拒绝
  • sshd_config 中 PasswordAuthentication no 已生效
  • 防火墙放行 SSH 端口(默认 22)
  • 保留至少一个可用的密钥备份
防护措施作用推荐配置
fail2ban自动封禁暴力破解 IPmaxretry=3, bantime=3600
密钥登录杜绝密码猜测ed25519 密钥,禁用密码认证
修改端口减少自动化扫描非标准端口,如 2222

进阶防护与行动建议

对于高安全场景,可结合 AegisX 的入侵检测与实时封禁能力,自动联动防火墙阻断恶意 IP,减少人工干预。此外,定期更新系统补丁、限制 SSH 登录用户(AllowUsers)、启用双因素认证,能进一步收缩攻击面。现在就去检查你的 auth.log,按上述步骤配置 fail2ban 和密钥登录,今晚就能睡个安稳觉。

常见问题(FAQ)

fail2ban 安装后需要立即修改哪些配置?

安装后应创建 jail.local 文件覆盖默认设置,至少调整 maxretry(尝试次数)、bantime(封禁时长)和 findtime(时间窗口),并确保 sshd 日志路径正确。建议先启用 sshd 监狱并测试封禁效果。

如何生成 SSH 密钥并上传到服务器?

本地运行 ssh-keygen -t ed25519 生成密钥对,然后用 ssh-copy-id user@server 将公钥上传至服务器 ~/.ssh/authorized_keys。也可手动复制公钥内容追加到该文件,并确保权限为 600。

禁用密码登录后如何避免把自己锁在外面?

修改 sshd_config 前,保持一个已登录的 SSH 会话不退出,另开新会话测试密钥登录成功后再禁用密码。同时检查防火墙是否放行 SSH 端口,并确保密钥文件权限正确。

fail2ban 封禁的 IP 如何查看和解封?

使用 fail2ban-client status sshd 查看当前封禁列表。解封单个 IP 可执行 fail2ban-client set sshd unbanip 。如需永久解封,需调整 jail.local 中的 ignoreip 或白名单。

除了 fail2ban 和密钥登录,还有哪些 SSH 加固措施?

可修改默认 SSH 端口、限制登录用户、启用双因素认证、使用防火墙限制源 IP、定期更新 OpenSSH 版本,并监控日志异常。综合措施能显著降低攻击面。