
核心要点(TL;DR)
- fail2ban可自动封禁频繁失败的IP,大幅减少暴力破解尝试。
- 禁用密码登录并启用密钥认证是防止SSH暴破的根本措施。
- 修改默认SSH端口能降低自动化攻击概率,但非长久之计。
- 定期检查日志和更新系统补丁是持续安全的关键。
痛点:SSH 端口为何总被暴力破解?
如果你管理过公网服务器,很可能见过 /var/log/auth.log 中密密麻麻的 Failed password 记录。SSH 作为远程管理入口,默认端口 22 是自动化扫描的重灾区,攻击者利用字典进行暴力破解,一旦得手即可完全控制服务器。本文提供从 fail2ban 到密钥登录的完整加固步骤,包含具体命令和检查清单,帮助你彻底阻断这类攻击。
原理与危害:暴力破解如何发生?
攻击者通过扫描开放 22 端口的 IP,使用常见用户名(如 root、admin)和弱密码字典尝试登录。一旦成功,他们会植入挖矿程序、勒索软件或后门,导致数据泄露、服务瘫痪。即使未成功,大量尝试也会消耗服务器资源,并可能触发账号锁定策略,影响正常运维。
具体排查:确认是否被攻击
首先检查登录日志:
sudo grep 'Failed password' /var/log/auth.log | tail -20
sudo lastb | head -20如果看到大量来自不同 IP 的失败记录,说明正在被扫描。还可以使用 sudo grep 'Accepted password' /var/log/auth.log 确认是否有异常成功登录。检查当前登录用户:who 或 w。
分步解决:从 fail2ban 到密钥登录
1. 安装并配置 fail2ban
fail2ban 能自动封禁多次尝试失败的 IP。安装:
sudo apt install fail2ban # Debian/Ubuntu
sudo yum install fail2ban # CentOS/RHEL创建本地配置 /etc/fail2ban/jail.local:
[sshd]
enabled = true
port = ssh
filter = sshd
logpath = /var/log/auth.log
maxretry = 3
bantime = 3600
findtime = 600重启服务:sudo systemctl restart fail2ban。查看状态:sudo fail2ban-client status sshd。
2. 修改 SSH 默认端口
编辑 /etc/ssh/sshd_config,将 Port 22 改为其他端口(如 2222),然后重启 sshd:sudo systemctl restart sshd。注意更新防火墙规则和 fail2ban 配置中的端口。
3. 启用密钥登录并禁用密码认证
在客户端生成密钥对:ssh-keygen -t rsa -b 4096,将公钥上传至服务器:ssh-copy-id -p 2222 user@server。测试密钥登录成功后,编辑 /etc/ssh/sshd_config:
PubkeyAuthentication yes
PasswordAuthentication no
ChallengeResponseAuthentication no重启 sshd 服务。确保不要关闭当前会话,另开窗口测试。
4. 限制登录用户和权限
在 sshd_config 中添加 AllowUsers yourusername,禁止 root 直接登录:PermitRootLogin no。设置 MaxAuthTries 3 减少尝试次数。
检查清单与对比
| 措施 | 作用 | 命令/配置 |
|---|---|---|
| fail2ban | 自动封禁恶意 IP | jail.local 配置 |
| 修改端口 | 降低自动化扫描 | Port 2222 |
| 密钥登录 | 杜绝密码爆破 | PasswordAuthentication no |
| 限制用户 | 减少攻击面 | AllowUsers |
完成以上步骤后,使用 sudo sshd -t 测试配置,然后重启服务。建议在「防护建议」处提及 AegisX 的入侵检测能力,可实时监控异常登录行为。
行动建议
立即备份 sshd_config,按顺序实施上述步骤,每步测试后再继续。定期检查日志和更新系统,考虑使用 AegisX 增强防护。安全是一个持续过程,切勿掉以轻心。
常见问题(FAQ)
fail2ban 如何安装和配置来防护 SSH?
安装 fail2ban 后,创建 jail.local 文件启用 sshd 监控,设置 maxretry 和 bantime 参数即可。例如在 /etc/fail2ban/jail.local 中添加 [sshd] enabled = true,maxretry = 3,bantime = 1h,然后重启服务。这样可自动封禁多次尝试失败的 IP。
如何禁用 SSH 密码登录并启用密钥认证?
首先在客户端生成密钥对(ssh-keygen -t rsa),将公钥上传到服务器的 ~/.ssh/authorized_keys。然后编辑 /etc/ssh/sshd_config,设置 PasswordAuthentication no 和 PubkeyAuthentication yes,重启 sshd 服务。确保密钥登录测试成功后再禁用密码。
修改 SSH 默认端口有什么好处和风险?
修改默认端口(如从22改为2222)可以减少自动化扫描攻击,降低日志噪音。但并不能阻止针对性攻击,且需同步更新防火墙规则和 fail2ban 配置。建议作为辅助措施,而非唯一防护手段。
除了 fail2ban 和密钥登录,还有哪些 SSH 加固措施?
可以限制登录用户(AllowUsers)、禁用 root 直接登录(PermitRootLogin no)、使用防火墙限制源 IP、启用双因素认证(如 Google Authenticator),以及定期更新 OpenSSH 版本以修复漏洞。多层防御能显著提升安全性。
如何监控 SSH 暴力破解尝试?
使用命令 `grep 'Failed password' /var/log/auth.log` 查看失败记录,或使用 `lastb` 命令。fail2ban 日志位于 /var/log/fail2ban.log。建议设置日志监控告警,及时发现异常。