SSH 一直被暴力破解怎么办:fail2ban 与密钥登录加固实操 核心要点图解,fail2ban 可自动封禁频繁失败的 IP,有效缓解 SSH 暴力破解。;密钥登录比密码更安全,应禁用密码认证并强制使用密钥。;配置 fail2ban 需调整 jail.local 并设置合理的封禁时长。;加固后务必测试新连接,避免锁死自己。
SSH 一直被暴力破解怎么办:fail2ban 与密钥登录加固实操 · 核心要点一图读懂(AegisX)

核心要点(TL;DR)

  • fail2ban 可自动封禁频繁失败的 IP,有效缓解 SSH 暴力破解。
  • 密钥登录比密码更安全,应禁用密码认证并强制使用密钥。
  • 配置 fail2ban 需调整 jail.local 并设置合理的封禁时长。
  • 加固后务必测试新连接,避免锁死自己。

痛点:SSH 暴力破解为何屡禁不止

如果你的服务器暴露在公网,SSH 端口每天都会遭受成千上万次暴力破解尝试。攻击者利用自动化工具扫描并尝试常见用户名和弱密码,一旦得手,轻则植入挖矿程序,重则数据泄露。仅靠强密码远远不够,你需要一套主动防御机制。本文将手把手教你使用 fail2ban 自动封禁恶意 IP,并配置 SSH 密钥登录彻底告别密码认证,从根源上加固服务器安全。

原理:fail2ban 如何阻断暴力破解

fail2ban 通过监控系统日志(如 /var/log/auth.log),匹配 SSH 登录失败的记录。当某个 IP 在指定时间内失败次数超过阈值,fail2ban 会自动调用防火墙(iptables/firewalld)将该 IP 封禁一段时间。这样攻击者无法持续尝试,大幅降低破解成功率。同时,密钥登录要求客户端持有私钥,几乎无法被暴力破解,两者结合能有效防护 SSH 安全。

实操一:安装并配置 fail2ban

1. 安装 fail2ban

根据系统类型执行:

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

2. 创建 jail.local 配置文件

不要直接修改 jail.conf,而是创建 jail.local 覆盖默认设置:

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

在 [sshd] 部分确保启用并设置参数:

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

解释:10 分钟内失败 3 次即封禁 1 小时。可根据需要调整 bantime(秒)。

3. 启动并验证

sudo systemctl enable fail2ban
sudo systemctl start fail2ban
sudo fail2ban-client status sshd

输出应显示当前封禁的 IP 列表。若看到“Status for the jail: sshd”及“Banned IP list:”即表示运行正常。

实操二:配置 SSH 密钥登录并禁用密码

1. 生成密钥对(本地操作)

ssh-keygen -t rsa -b 4096 -C "your_email@example.com"

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

2. 上传公钥到服务器

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

或手动复制公钥内容到服务器 ~/.ssh/authorized_keys 文件。

3. 测试密钥登录

新开终端,尝试 ssh user@server_ip,应无需密码直接登录。确认成功后继续。

4. 修改 sshd_config 禁用密码认证

sudo vim /etc/ssh/sshd_config

修改以下参数:

PasswordAuthentication no
ChallengeResponseAuthentication no
UsePAM no
PubkeyAuthentication yes

重要:修改前保持一个已连接的 SSH 会话不退出,以防配置错误被锁。

5. 重启 SSH 服务

sudo systemctl restart sshd

再次测试新连接,确保密钥登录正常,密码登录被拒绝。

检查清单与对比

项目推荐设置检查命令
fail2ban 状态运行中,sshd 监狱启用systemctl status fail2ban
封禁参数maxretry=3, bantime=3600grep -E 'maxretry|bantime' /etc/fail2ban/jail.local
密钥登录PubkeyAuthentication yesgrep PubkeyAuthentication /etc/ssh/sshd_config
密码登录PasswordAuthentication nogrep PasswordAuthentication /etc/ssh/sshd_config
root 登录PermitRootLogin prohibit-passwordgrep PermitRootLogin /etc/ssh/sshd_config

完成以上步骤后,你的 SSH 服务已具备基础防护。建议定期检查 fail2ban 日志(/var/log/fail2ban.log)和 SSH 登录记录,及时发现异常。

行动建议:持续加固与监控

安全是一个持续过程。除了 fail2ban 和密钥登录,还可考虑修改 SSH 端口、限制访问 IP、启用双因素认证。对于需要更高级防护的场景,可以了解 AegisX 的入侵检测与响应能力,它能够实时监控异常登录行为并提供自动化阻断,与 fail2ban 形成互补。立即动手,让你的服务器远离暴力破解威胁。

常见问题(FAQ)

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

安装 fail2ban 后,主要修改 jail.local 文件(而非 jail.conf),启用 [sshd] 监狱并设置 maxretry、bantime、findtime 等参数。建议将 bantime 设为 1 小时以上,maxretry 设为 3-5 次。同时确保日志路径与系统一致,最后重启服务生效。

如何生成 SSH 密钥并部署到服务器?

在本地终端运行 ssh-keygen -t rsa -b 4096 生成密钥对,默认保存在 ~/.ssh/ 下。然后使用 ssh-copy-id user@server 将公钥上传至服务器,或手动将公钥内容追加到服务器的 ~/.ssh/authorized_keys 文件中,并设置正确权限(700 目录,600 文件)。

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

在修改 SSH 配置前,务必保持一个已连接的 SSH 会话不退出,并另开一个会话测试密钥登录。确认密钥登录成功后,再修改 /etc/ssh/sshd_config 设置 PasswordAuthentication no,然后重启 sshd 服务。如果配置错误,可通过当前会话恢复。

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

使用 fail2ban-client status sshd 查看当前封禁的 IP 列表。解封单个 IP 可执行 fail2ban-client set sshd unbanip 。如果需要永久解封,需检查防火墙规则并手动删除,或调整 fail2ban 配置。

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

还可以修改默认 SSH 端口、限制用户登录(AllowUsers)、禁用 root 直接登录、使用双因素认证、配置防火墙只允许特定 IP 访问 SSH 端口,以及定期更新 SSH 服务端软件。综合使用这些措施能显著提升安全性。