SSH 一直被暴力破解怎么办:fail2ban 与密钥登录加固实战 核心要点图解,fail2ban 自动封禁暴力破解 IP,大幅降低风险。;禁用密码登录并启用密钥认证是根治方法。;配置 SSH 双因素认证可进一步提升安全性。;定期检查日志和更新系统是关键维护步骤。
SSH 一直被暴力破解怎么办:fail2ban 与密钥登录加固实战 · 核心要点一图读懂(AegisX)

核心要点(TL;DR)

  • fail2ban 自动封禁暴力破解 IP,大幅降低风险。
  • 禁用密码登录并启用密钥认证是根治方法。
  • 配置 SSH 双因素认证可进一步提升安全性。
  • 定期检查日志和更新系统是关键维护步骤。

痛点:SSH 暴力破解频发,服务器安全告急

如果你的服务器 SSH 端口暴露在公网,很可能每天都会遭受成千上万次暴力破解尝试。日志中满是 Failed password 记录,不仅消耗资源,更存在被攻破的风险。本文提供一套实战加固方案,通过 fail2ban 自动封禁 与 密钥登录 双管齐下,快速提升 SSH 安全性。以下步骤均在 Linux 服务器上实测通过,请跟随操作。

一、确认攻击现状:检查 SSH 日志

首先需要确认是否真的遭受了暴力破解。登录服务器,根据系统类型查看认证日志:

  • Debian/Ubuntu: /var/log/auth.log
  • CentOS/RHEL: /var/log/secure

执行以下命令统计失败登录次数:

grep 'Failed password' /var/log/auth.log | wc -l

如果数字很大(例如上千),且来源 IP 分散,说明正在被暴力破解。还可以使用 lastb 命令查看最近失败登录的用户名和 IP。记录下攻击频繁的 IP 段,后续可在防火墙中直接封禁。

二、安装与配置 fail2ban 自动封禁

fail2ban 通过监控日志,自动封禁多次尝试失败的 IP。安装方法:

  • Ubuntu/Debian: sudo apt install fail2ban
  • CentOS/RHEL: sudo yum install epel-release && sudo yum install fail2ban

安装后,复制默认配置文件并创建本地配置:

sudo cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local

编辑 /etc/fail2ban/jail.local,在 [sshd] 部分确保以下参数(若没有则添加):

[sshd]
enabled = true
port = ssh
filter = sshd
logpath = /var/log/auth.log
maxretry = 3
bantime = 1h
findtime = 10m

参数解释:maxretry 为最大失败次数,bantime 为封禁时长,findtime 为检测时间窗口。保存后重启服务:

sudo systemctl restart fail2ban

查看封禁状态:

sudo fail2ban-client status sshd

若需解封 IP,使用:sudo fail2ban-client set sshd unbanip <IP>。为避免误封,可在 [DEFAULT] 部分设置 ignoreip = 127.0.0.1/8 你的管理IP。

三、启用密钥登录并禁用密码认证

密钥登录比密码更安全,能从根本上防止暴力破解。操作如下:

1. 生成密钥对(在客户端执行)

ssh-keygen -t rsa -b 4096

按提示保存密钥(默认 ~/.ssh/id_rsa),可设置密码短语增加安全性。

2. 上传公钥到服务器

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

或手动将公钥内容追加到服务器 ~/.ssh/authorized_keys 文件。

3. 修改 SSH 配置禁用密码登录

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

PubkeyAuthentication yes
PasswordAuthentication no
ChallengeResponseAuthentication no

重启 SSH 服务:

sudo systemctl restart sshd

重要: 在禁用密码前,务必先测试密钥登录是否成功,以免将自己锁在门外。可新开一个终端测试,确认无误后再关闭当前会话。

四、进阶加固与检查清单

除了上述核心措施,建议完成以下加固项:

措施操作
修改默认端口编辑 /etc/ssh/sshd_config,设置 Port 2222(或其他非标准端口),重启 sshd
禁用 root 直接登录设置 PermitRootLogin no,使用普通用户登录后 sudo
限制登录用户添加 AllowUsers yourusername
防火墙限制使用 iptables/firewalld 仅允许可信 IP 访问 SSH 端口
双因素认证安装 Google Authenticator 并配置 PAM 模块

完成所有配置后,使用检查清单验证:

  • fail2ban 服务运行正常,且已封禁恶意 IP
  • 密钥登录成功,密码登录已禁用
  • SSH 端口已修改(可选),防火墙规则生效
  • 日志中不再出现大量失败登录

在防护建议方面,可考虑使用 AegisX 的入侵检测与自动封禁能力,其基于行为分析的实时防护能有效补充 fail2ban 的规则匹配,尤其适合高安全要求的场景。

五、行动建议:立即加固你的 SSH

不要等到服务器被攻破才行动。请立即按照本文步骤:1) 安装并配置 fail2ban;2) 启用密钥登录并禁用密码认证;3) 完成进阶加固项。定期检查 /var/log/auth.log 和 fail2ban 日志,保持系统更新。安全是一个持续过程,从基础加固开始,逐步构建纵深防御体系。

常见问题(FAQ)

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

可通过查看 /var/log/auth.log(Debian/Ubuntu)或 /var/log/secure(CentOS/RHEL)中的失败登录记录来判断。使用命令 `grep 'Failed password' /var/log/auth.log | wc -l` 统计失败次数,或 `lastb` 查看最近失败登录。若数量巨大且 IP 分散,说明正遭受暴力破解。

fail2ban 安装后需要哪些基本配置?

安装后需配置 jail.local 文件,启用 sshd 监控,设置 maxretry(最大尝试次数)、bantime(封禁时间)和 findtime(检测时间窗口)。例如:`[sshd] enabled = true, maxretry = 3, bantime = 1h, findtime = 10m`。然后重启 fail2ban 服务生效。

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

首先在客户端生成密钥对 `ssh-keygen -t rsa -b 4096`,将公钥上传至服务器 `~/.ssh/authorized_keys`。然后编辑 /etc/ssh/sshd_config,设置 `PasswordAuthentication no` 和 `PubkeyAuthentication yes`,重启 sshd 服务。确保密钥登录测试成功后再禁用密码。

fail2ban 误封了 IP 如何解封?

使用 `fail2ban-client status sshd` 查看封禁列表,用 `fail2ban-client set sshd unbanip ` 解封特定 IP。也可直接编辑 /etc/fail2ban/jail.local 调整白名单(ignoreip)避免误封。

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

可修改默认 SSH 端口、限制用户登录(AllowUsers)、禁用 root 直接登录(PermitRootLogin no)、使用 SSH 双因素认证(如 Google Authenticator)、配置防火墙只允许特定 IP 访问 SSH 端口,以及定期更新 OpenSSH 版本修复漏洞。