最有效的ssh防暴力破解是禁用密码认证并组合maxauthtries、pam_faillock和fail2ban:前者使密码认证不可用,后者分别实现连接级、用户级和ip级防护,三者缺一不可。

Linux SSH 本身不提供“全局失败次数限制”,但可通过组合配置实现有效防护:在连接层面设限(MaxAuthTries)、在用户层面锁定(pam_faillock)、在 IP 层面封禁(fail2ban)。三者互补,缺一不可。
设置单次连接最大认证尝试次数
这是最轻量、无需额外服务的内置防护,作用于每次 TCP 连接内:
- 编辑
/etc/ssh/sshd_config,添加或修改两行: -
MaxAuthTries 3:单次连接最多允许 3 次认证尝试(密码、密钥、键盘交互等总和) -
LoginGraceTime 60:连接建立后仅 60 秒登录窗口,超时自动断开 - 执行
sudo systemctl reload sshd生效 - 注意:该限制不跨连接,攻击者可快速新建连接重试,必须配合后续措施才真正有效
启用 pam_faillock 实现用户级失败锁定
适用于 RHEL/CentOS/Fedora 等主流发行版,对每个用户独立计数并临时锁定账户(不影响 SSH 连接,仅拒绝认证):
Linux系统管理专家,覆盖12大模块:用户权限、SSH、存储、网络、systemd、防火墙、日志监控、备份恢复、TLS证书、Ansible、容器、IaC。提供配置、验证、加固、监控、备份、自动化、故障排查、回滚闭环。关键词:useradd、sudo、sshd_config、chmod、SEL...
- 编辑
/etc/pam.d/sshd,在auth段开头插入两行(顺序关键): auth [default=die] pam_faillock.so preauth silent deny=3 unlock_time=600 fail_interval=900auth [default=die] pam_faillock.so authfail deny=3 unlock_time=600 fail_interval=900- 再编辑
/etc/pam.d/system-auth(或password-auth),添加相同两行 - 参数说明:
deny=3表示第 3 次失败后立即锁定;unlock_time=600即 10 分钟后自动解锁;fail_interval=900表示只统计最近 15 分钟内的失败记录 - 查看状态:
faillock --user username;手动解锁:faillock --user username --reset
部署 fail2ban 实现 IP 级自动封禁
通用性强,适配 Debian/Ubuntu/CentOS,通过监控日志自动调用防火墙封禁源 IP:
- 安装:
apt install fail2ban(Debian/Ubuntu)或yum install fail2ban(RHEL/CentOS) - 复制配置:
cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local - 编辑
/etc/fail2ban/jail.local,确保[sshd]段启用并配置: enabled = truemaxretry = 3-
findtime = 600(10 分钟内达阈值) -
bantime = 3600(封禁 1 小时) -
logpath = /var/log/auth.log(Ubuntu/Debian)或/var/log/secure(RHEL/CentOS) - 启动服务:
sudo systemctl enable --now fail2ban - 验证状态:
sudo fail2ban-client status sshd
配套加固建议(不可省略)
仅设尝试次数限制远远不够,需同步收紧认证方式与访问范围:
- 禁用密码登录:
PasswordAuthentication no,强制使用 SSH 密钥认证 - 禁用 root 远程登录:
PermitRootLogin no - 限制可登录用户:
AllowUsers alice bob或AllowGroups sshusers - 关闭空密码:
PermitEmptyPasswords no - 所有配置变更后,务必新开终端验证密钥登录是否正常,再测试密码登录是否被拒










