
MaxStartups 不是用来限制“已认证用户数”或“并发登录人数”的,它专管刚建立 TCP 连接、但还没完成密码/密钥验证的那批连接——也就是未认证连接队列。这类连接最容易被暴力扫描、慢速 DoS 或配置错误的脚本堆满,导致真正用户连不上。它的梯度丢弃机制不是简单“到上限就全拒”,而是分阶段按概率控制,让服务保持可用性。
理解 MaxStartups 的三段式语法:start:rate:full
格式必须是三个用英文冒号分隔的整数,例如 5:30:10:
- start(起始阈值):未认证连接数 ≤ 5 时,全部放行;超过 5 个,进入丢弃阶段
- rate(丢弃率):每新增 30 个连接,随机拒绝其中 1 个(即约 3.3% 概率)
- full(硬上限):未认证连接总数达到 10 个时,后续所有新连接直接拒绝,不给任何机会
为什么叫“平滑梯度”?关键在 rate 阶段
它避免了“突然断崖式拒绝”,让服务在压力上升时仍能响应部分合法请求:
- 当有 6~9 个未认证连接时,新连接不会立即失败,而是以小概率被丢弃(比如 6→7 时有 3.3% 拒绝,7→8 时再有 3.3%,依此类推)
- 客户端感知是“偶尔连不上”,而非“完全无法连接”,真实用户重试一次大概率成功
- 攻击者则因大量连接被随机拦截,难以稳定维持高密度扫描
推荐配置与实操要点
生产环境常用组合:10:30:60 或更严格些的 5:20:30,取决于服务器负载和安全要求:
- 低负载小服务器(如边缘设备):用 3:10:15,宁可严一点
- 中等业务服务器:优先选 10:30:60,平衡可用性与防护
- 高安全场景(如金融后台):可设为 5:10:20,快速收紧
- 修改后必须重启生效:sudo systemctl restart sshd
- 验证是否生效:sshd -T | grep maxstartups,输出应为小写 maxstartups 和你设置的值
它不能单独扛住全部压力,需配合其他措施
MaxStartups 只管“未认证连接”,对已建立但长期空闲的连接、单 IP 开太多会话、或高频新建连接无能为力:
- 防单 IP 并发泛滥:必须用 iptables -m connlimit 在内核层限制每个 IP 的 ESTABLISHED 连接数
- 防爆破节奏:加 fail2ban 或用 iptables -m limit 控制每分钟新建 SSH 连接次数
- 防单连接多会话滥用:调整 MaxSessions(默认 10),尤其在 SFTP 场景下











