SSH暴力破解防御实战:fail2ban与密钥登录加固 核心要点图解,禁用密码登录并启用密钥认证是防御SSH暴力破解的根本措施。;fail2ban能自动封禁多次尝试失败的IP,显著降低攻击面。;配置SSH仅允许密钥登录,并修改默认端口可减少自动化扫描。;定期检查日志并更新fail2ban规则,确保防护持续有效。
SSH暴力破解防御实战:fail2ban与密钥登录加固 · 核心要点一图读懂(AegisX)

核心要点(TL;DR)

  • 禁用密码登录并启用密钥认证是防御SSH暴力破解的根本措施。
  • fail2ban能自动封禁多次尝试失败的IP,显著降低攻击面。
  • 配置SSH仅允许密钥登录,并修改默认端口可减少自动化扫描。
  • 定期检查日志并更新fail2ban规则,确保防护持续有效。

痛点:SSH 暴力破解为何防不胜防

服务器暴露在公网,SSH 端口每天都会收到成千上万次登录尝试。默认配置下,攻击者利用字典暴力破解弱密码,一旦得手,服务器即被入侵。你是否也在日志中看到大量 `Failed password`?本文将手把手教你用 fail2ban 和密钥登录加固 SSH,彻底解决暴力破解问题。

原理:暴力破解如何发生与 fail2ban 如何工作

SSH 暴力破解通常由自动化工具发起,它们不断尝试常见用户名和密码组合。fail2ban 通过监控日志文件(如 /var/log/auth.log),匹配失败登录模式,当某个 IP 在指定时间内失败次数超过阈值,便自动调用防火墙规则封禁该 IP。密钥登录则从根本上杜绝密码猜测,因为私钥几乎无法被暴力破解。

排查:确认是否正在被攻击

首先检查日志中的失败记录:

grep 'Failed password' /var/log/auth.log | tail -20
# 或 CentOS/RHEL
grep 'Failed password' /var/log/secure | tail -20

如果输出大量来自不同 IP 的失败记录,说明正在被暴力破解。还可以用 `lastb` 查看失败登录列表,或统计攻击 IP 数量:

grep 'Failed password' /var/log/auth.log | awk '{print $(NF-3)}' | sort | uniq -c | sort -nr | head

分步解决:fail2ban 安装与配置

安装 fail2ban

Debian/Ubuntu:`sudo apt install fail2ban`;CentOS/RHEL:`sudo yum install epel-release && sudo yum install fail2ban`。

配置 jail.local

创建 `/etc/fail2ban/jail.local` 文件,内容如下:

[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 为最大失败次数,bantime 为封禁秒数,findtime 为时间窗口。重启服务:`sudo systemctl restart fail2ban`。

验证状态

使用 `sudo fail2ban-client status sshd` 查看当前封禁的 IP 和统计信息。

分步解决:密钥登录加固

生成密钥对

在本地终端执行:`ssh-keygen -t ed25519 -C "your_email@example.com"`,按提示保存密钥。

上传公钥

使用 `ssh-copy-id user@server` 自动上传,或手动将公钥内容追加到服务器 `~/.ssh/authorized_keys`。

修改 SSH 配置

编辑 `/etc/ssh/sshd_config`,确保以下设置:

PubkeyAuthentication yes
PasswordAuthentication no
ChallengeResponseAuthentication no
UsePAM yes

重启 SSH:`sudo systemctl restart sshd`。注意:在禁用密码前,务必确认密钥登录成功,并保留一个已登录会话以防万一。

检查清单与对比

措施作用实施难度
fail2ban自动封禁暴力破解 IP低
密钥登录杜绝密码猜测中
修改默认端口减少自动化扫描低
限制用户登录缩小攻击面低

完成上述步骤后,使用 `ssh -p 端口 user@host` 测试登录。建议定期检查 fail2ban 日志:`tail -f /var/log/fail2ban.log`。

行动建议

立即行动:1. 安装并配置 fail2ban;2. 启用密钥登录并禁用密码认证;3. 修改 SSH 默认端口;4. 定期审计日志。对于更高阶防护,可考虑 AegisX 的 SSH 安全加固方案,提供集中管理和实时威胁情报。

常见问题(FAQ)

如何检查SSH是否正在被暴力破解?

检查系统日志中的失败登录记录。使用命令 `grep 'Failed password' /var/log/auth.log`(Debian/Ubuntu)或 `grep 'Failed password' /var/log/secure`(CentOS/RHEL)。如果出现大量来自不同IP的失败记录,说明正在被暴力破解。也可使用 `lastb` 命令查看失败登录列表。

fail2ban如何配置以防护SSH?

安装fail2ban后,创建配置文件 `/etc/fail2ban/jail.local`,启用sshd监狱并设置参数:`[sshd] enabled = true`,`maxretry = 3`,`bantime = 3600`,`findtime = 600`。然后重启服务 `systemctl restart fail2ban`。这样10分钟内失败3次即封禁1小时。

如何设置SSH密钥登录并禁用密码认证?

首先生成密钥对:`ssh-keygen -t ed25519`,将公钥上传至服务器 `~/.ssh/authorized_keys`。然后编辑 `/etc/ssh/sshd_config`,设置 `PubkeyAuthentication yes`,`PasswordAuthentication no`,`ChallengeResponseAuthentication no`。重启SSH服务 `systemctl restart sshd`。确保密钥登录成功后再禁用密码,避免锁死。

修改SSH默认端口有什么好处?

修改默认端口(如从22改为2222)可以减少自动化扫描和暴力破解尝试,因为大多数攻击脚本只针对默认端口。编辑 `/etc/ssh/sshd_config` 中的 `Port` 行,重启服务。但需注意防火墙规则同步更新,且不能替代密钥认证等核心措施。

fail2ban误封了怎么办?

如果fail2ban误封了可信IP,可以使用 `fail2ban-client set sshd unbanip ` 解封。为避免误封,可将可信IP加入白名单:在jail.local的 `[sshd]` 段中添加 `ignoreip = 127.0.0.1/8 `。调整 `maxretry` 和 `findtime` 也可降低误封概率。