
核心要点(TL;DR)
- 禁用密码登录并启用密钥认证是防暴力破解的根本措施。
- fail2ban 可自动封禁频繁失败的 IP,降低攻击面。
- 修改默认 SSH 端口并限制用户可进一步减少攻击尝试。
- 定期检查日志和更新系统是维持安全的关键。
痛点:SSH 暴力破解为何防不胜防
如果你管理过公网服务器,一定见过 /var/log/auth.log 里密密麻麻的 SSH 失败记录。攻击者利用自动化工具全天候扫描,尝试常见用户名和弱密码。一旦得手,服务器就可能沦为肉鸡。仅靠修改密码或换端口治标不治本,必须从认证机制和主动防御两层加固。本文提供 fail2ban 与密钥登录的完整操作步骤,跟着做就能显著降低风险。
第一步:启用 SSH 密钥登录,彻底告别密码
密码是暴力破解的根源,改用密钥认证能直接免疫密码猜解。操作如下:
- 生成密钥对(在本地机器执行):
ssh-keygen -t ed25519 -C "your_email@example.com"
按提示保存密钥(默认~/.ssh/id_ed25519),建议设置私钥密码。 - 上传公钥到服务器:
ssh-copy-id -i ~/.ssh/id_ed25519.pub user@server_ip
或手动将公钥内容追加到服务器~/.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,调整以下参数:
Port 2222 # 修改默认端口,降低扫描频率 PermitRootLogin no # 禁止 root 直接登录 PasswordAuthentication no # 禁用密码认证 PubkeyAuthentication yes # 启用密钥认证 AllowUsers your_username # 仅允许特定用户登录
保存后重启 SSH 服务:systemctl restart sshd。使用新端口和密钥登录验证,确认无误后关闭旧会话。
第三步:安装配置 fail2ban,自动封禁攻击 IP
fail2ban 通过监控日志,自动封禁多次认证失败的 IP。以 Ubuntu/Debian 为例:
- 安装:
apt update && apt install fail2ban -y
- 创建本地配置:
cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local
编辑jail.local,在[sshd]段设置:enabled = true port = 2222 maxretry = 3 bantime = 1h findtime = 10m
- 启动并设置开机自启:
systemctl enable fail2ban systemctl start fail2ban
- 查看状态:
fail2ban-client status sshd可看到当前封禁的 IP 列表。
如需调整封禁策略,可修改 bantime(封禁时长)和 maxretry(最大失败次数)。
第四步:验证与监控,确保加固生效
完成上述步骤后,进行以下检查:
- 使用密码登录应被拒绝,密钥登录正常。
- 故意输错密钥密码几次,观察 fail2ban 是否封禁你的 IP(可在服务器上用
fail2ban-client status sshd查看)。 - 检查 SSH 日志:
tail -f /var/log/auth.log,确认无异常登录成功记录。 - 使用
ss -tlnp | grep sshd确认 SSH 监听在新端口。
建议定期查看 fail2ban 日志和封禁列表,及时调整规则。
第五步:进阶加固与工具推荐
除了基础配置,还可采取以下措施:
- 启用双因素认证(如 Google Authenticator)。
- 使用
ufw或firewalld限制访问源 IP。 - 定期更新系统和 SSH 软件补丁。
- 部署入侵检测系统,如 AegisX 可提供实时 SSH 暴力破解防护和异常行为告警,与 fail2ban 互补,形成多层防御。
行动建议:立即加固你的 SSH
不要等到服务器被入侵才行动。按照本文步骤,今天就去配置密钥登录、禁用密码认证、安装 fail2ban,并修改默认端口。完成后用检查清单逐项核对,确保每项措施生效。安全是一个持续的过程,定期审计日志和更新规则同样重要。
常见问题(FAQ)
我已经用了密钥登录,为什么还有大量 SSH 失败日志?
即使启用了密钥登录,攻击者仍会尝试连接并触发认证失败。这些日志是正常的扫描行为,只要密码登录已禁用,攻击就不会成功。建议配合 fail2ban 自动封禁这些 IP,减少日志噪音。
fail2ban 安装后需要修改哪些配置才能生效?
安装后需创建 jail.local 文件启用 sshd 监控,并设置 maxretry、bantime 等参数。默认配置可能不启用 sshd,需手动添加 [sshd] 段并设置 enabled = true,然后重启服务。
如何安全地生成和使用 SSH 密钥对?
使用 ssh-keygen -t ed25519 生成密钥对,将公钥上传至服务器 ~/.ssh/authorized_keys,并设置权限 600。私钥务必加密保存,避免泄露。
修改 SSH 端口后需要注意什么?
修改端口后需更新防火墙规则允许新端口,并确保 SELinux 或 AppArmor 策略放行。同时通知相关用户,避免连接失败。建议先保留旧端口一段时间过渡。
除了 fail2ban 和密钥登录,还有哪些加固措施?
可禁用 root 直接登录、限制可登录用户、启用双因素认证、定期更新系统补丁,并使用入侵检测工具如 AegisX 进行实时监控和防护。