SSH暴力破解防护:实用配置清单与最佳实践
引言
SSH(Secure Shell)是服务器远程管理最常用的协议,但同时也是暴力破解攻击的主要目标。攻击者通过自动化脚本不断尝试用户名和密码组合,一旦成功将直接威胁服务器安全。本文整理了一份经过验证的SSH防护配置清单,帮助管理员从基础到进阶加固服务器。
核心防护措施
1. 修改默认SSH端口
将默认的22端口改为高位端口(如2222、10022),可显著降低扫描攻击的命中率。编辑SSH配置文件 /etc/ssh/sshd_config,设置 Port 2222,并确保防火墙放行新端口。
2. 禁止root直接登录
编辑配置文件,设置 PermitRootLogin no。仅允许普通用户通过SSH登录,需要提权时使用 sudo 命令。这可以有效阻止针对root账户的暴力破解。
3. 使用公钥认证替代密码登录
生成密钥对(ssh-keygen -t ed25519),将公钥添加到目标服务器的 ~/.ssh/authorized_keys 文件中。然后在配置文件中设置 PasswordAuthentication no 和 PubkeyAuthentication yes。密钥认证几乎无法被暴力破解。
4. 限制可登录用户与IP白名单
在 /etc/ssh/sshd_config 中添加 AllowUsers username 或 AllowGroups groupname,仅允许指定用户或组登录。同时利用防火墙(如iptables、ufw)设置来源IP白名单:ufw allow from 192.168.1.0/24 to any port 2222。
自动化防御工具
5. 部署Fail2ban
Fail2ban能实时监控SSH登录日志,检测到多次失败尝试后自动添加防火墙规则封禁发起IP。安装命令:apt install fail2ban(Debian/Ubuntu)或 yum install fail2ban(CentOS)。复制默认配置 /etc/fail2ban/jail.conf 为 jail.local,并启用SSH监控:
- 设置 [sshd] 段落下的 enabled = true
- 调整 maxretry = 5(单IP最多失败5次)
- 设置 bantime = 86400(封禁24小时)
- 设定 findtime = 600(检测窗口10分钟)
重启服务:systemctl restart fail2ban。
6. 启用SSH双因素认证(2FA)
安装 libpam-google-authenticator 包,运行 google-authenticator 生成二维码,将密钥绑定到手机应用(如Google Authenticator)。在 /etc/pam.d/sshd 首行添加 auth required pam_google_authenticator.so,并在 sshd_config 中设置 ChallengeResponseAuthentication yes 和 AuthenticationMethods publickey,keyboard-interactive。这样登录需同时提供密钥和动态验证码。
日志与审计
7. 开启详细日志并定期审查
在sshd_config中设置 LogLevel VERBOSE 以记录更多详情(如公钥指纹)。日志位置:/var/log/auth.log(Debian/Ubuntu)或 /var/log/secure(CentOS)。可使用 journalctl -u sshd(systemd系统)查看。建议配合logwatch、ossec等工具自动分析异常。
8. 限制SSH连接频率与黏性连接
通过配置 MaxAuthTries 3(每次连接最多尝试次数)和 MaxStartups 10:30:100(当未认证连接数达到10后开始以30%概率拒绝新连接,直到100上限)来降低暴力破解效率。
总结
SSH暴力破解是持续性的威胁,但通过上述配置清单——修改端口、禁用密码登录、密钥认证、Fail2ban、2FA、IP白名单及日志审计——能将风险降至极低。管理员应定期检查配置是否生效,并结合系统更新与入侵检测工具形成纵深防御体系。安全无小事,主动防护胜过事后补救。