
核心要点(TL;DR)
- 禁用密码登录并启用密钥认证是防止 SSH 暴力破解的根本措施。
- fail2ban 可自动封禁频繁失败的 IP,显著降低暴力破解风险。
- 配置 SSH 密钥登录需生成密钥对、上传公钥并修改 sshd_config。
- 定期检查日志和更新 fail2ban 规则是维持防护效果的关键。
痛点:SSH 暴力破解为何防不胜防
服务器暴露在公网,SSH 端口每天都会收到大量自动化暴力破解尝试。弱密码、默认端口、无频率限制,让攻击者有机可乘。一旦得手,数据泄露、勒索软件接踵而至。本文提供 fail2ban 与密钥登录的实操步骤,帮你彻底解决 SSH 暴力破解问题。
原理:暴力破解如何发生
攻击者使用字典工具(如 Hydra)对 SSH 服务进行自动化猜解。常见特征:
- 短时间内大量失败登录记录
- 尝试常见用户名(root、admin)
- 使用弱密码字典
排查:确认是否被攻击
登录服务器,检查认证日志:
# Debian/Ubuntu
grep 'Failed password' /var/log/auth.log | wc -l
# CentOS/RHEL
grep 'Failed password' /var/log/secure | wc -l若数字巨大(如数千),说明正被暴力破解。也可用 lastb 查看最近失败登录。实时监控:tail -f /var/log/auth.log。
方案一:fail2ban 自动封禁
fail2ban 监控日志,自动封禁频繁失败的 IP。安装:
# Debian/Ubuntu
apt install fail2ban -y
# CentOS/RHEL
yum install epel-release -y && yum install fail2ban -y创建本地配置 /etc/fail2ban/jail.local:
[sshd]
enabled = true
port = ssh
filter = sshd
logpath = /var/log/auth.log
maxretry = 3
bantime = 3600
findtime = 600重启服务:systemctl restart fail2ban。查看封禁列表:fail2ban-client status sshd。
方案二:SSH 密钥登录加固
密钥登录比密码更安全,杜绝猜解。步骤:
- 客户端生成密钥对:
ssh-keygen -t rsa -b 4096(一路回车)。 - 上传公钥到服务器:
ssh-copy-id user@server_ip。 - 修改服务器
/etc/ssh/sshd_config:PubkeyAuthentication yes PasswordAuthentication no ChallengeResponseAuthentication no - 重启 sshd:
systemctl restart sshd。 - 测试新会话密钥登录,成功后再关闭旧会话。
注意:修改前保留一个已连接会话,防止配置错误被锁。
检查清单与进阶建议
| 项目 | 检查点 | 操作 |
|---|---|---|
| fail2ban | 服务状态 | systemctl status fail2ban |
| fail2ban | 封禁IP | fail2ban-client status sshd |
| SSH配置 | 密码登录已禁用 | grep PasswordAuthentication /etc/ssh/sshd_config |
| SSH配置 | 密钥登录生效 | 新会话测试 |
进阶建议:更改默认 SSH 端口、限制访问源 IP、启用双因素认证。在防护建议处,可考虑使用 AegisX 的入侵检测与自动封禁能力,实现更智能的防护。
行动建议
立即行动:1. 检查日志确认攻击;2. 部署 fail2ban 并配置封禁策略;3. 启用密钥登录并禁用密码认证;4. 定期审计日志与更新规则。安全是持续过程,切勿松懈。
常见问题(FAQ)
如何检查服务器是否正在遭受 SSH 暴力破解?
可通过查看 /var/log/auth.log(Debian/Ubuntu)或 /var/log/secure(CentOS/RHEL)中的失败登录记录。使用命令 `grep 'Failed password' /var/log/auth.log | wc -l` 统计失败次数,或 `lastb` 查看最近失败登录。若次数异常高,说明正遭受暴力破解。
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-copy-id user@server`。接着修改服务器 /etc/ssh/sshd_config,设置 `PubkeyAuthentication yes` 和 `PasswordAuthentication no`,重启 sshd 服务。最后测试密钥登录是否成功。
禁用密码登录后如何避免被锁在服务器外?
在修改配置前,务必保持一个已连接的 SSH 会话不关闭,并另开一个会话测试密钥登录。确认密钥登录成功后再重启 sshd。同时建议在配置文件中先注释掉密码登录选项,测试无误后再永久禁用。
fail2ban 和密钥登录哪个更有效?
两者互补。密钥登录从根本上防止密码被猜解,是首选方案;fail2ban 则能减少日志噪音和自动化攻击尝试,降低资源消耗。最佳实践是同时启用两者,并配合防火墙限制访问源 IP。