MaxAuthTries设为3仅限单次连接内3次认证尝试,无法阻止多线程并发新建连接爆破,必须搭配LoginGraceTime 60、MaxStartups 10:30:60及Fail2ban IP封禁才有效防御。

MaxAuthTries 本身不防多线程爆破,它只限制单次连接内的认证尝试次数。要真正防范多线程密码爆破,必须把它作为“连接层第一道关卡”,再叠加 IP 级封禁和连接行为管控——三者缺一不可。
为什么 MaxAuthTries 单独设为 3 不够?
攻击者用 10 个线程并发新建 SSH 连接,每个连接试 3 次密码,1 秒内就能完成 30 次尝试。MaxAuthTries 只让每次连接在第 4 次时断开,但完全不限制新连接发起。所以它防的是“单连接内反复试”,不是“多连接并行试”。
必须搭配的三项关键配置
- MaxAuthTries 3:单次连接最多允许 3 次失败认证(含密码、密钥、键盘交互等所有方式总和),输错第 4 次立即断连,不给提示
- LoginGraceTime 60:连接建立后只有 60 秒登录窗口,超时自动关闭,压缩攻击者建连-试密节奏
- MaxStartups 10:30:60:未认证连接数达 10 个后,新连接按 30% 概率接受;超过 60 个则全部拒绝,直接压制并发连接洪泛
必须启用 Fail2ban 封禁真实 IP
仅靠 sshd_config 无法识别“同一 IP 多次建连”。Fail2ban 才是核心防线:
- 监听 /var/log/auth.log(Ubuntu/Debian)或 /var/log/secure(RHEL/CentOS)
- 配置 [sshd] jail:设 maxretry = 3、findtime = 600(10 分钟)、bantime = 3600(封 1 小时)
- 确保 UsePAM yes 已开启,否则部分日志可能不触发
操作后务必验证与 reload
- 编辑 /etc/ssh/sshd_config 后,运行 sudo sshd -t 检查语法
- 用 sudo systemctl reload sshd 生效(不是 restart,避免中断现有会话)
- 确认生效:sudo sshd -T | grep -E "maxauthtries|logingracetime|maxstartups"
- 观察实时失败记录:sudo journalctl -u sshd -f | grep "Failed password"

















