Linux限制SSH并发连接数需协同配置:MaxStartups控未认证连接(如10:30:100),iptables connlimit限单IP并发,limit模块控新建速率,并调高系统文件描述符上限。

Linux 系统中限制 SSH 客户端的最大并发连接请求数,需区分两个关键场景:未认证连接数(防暴力扫描) 和 已认证后的并发会话能力(防资源滥用)。两者机制不同,不能混用,必须协同配置才有效。
一、用 MaxStartups 控制未认证连接洪水
该参数限制的是刚连上 SSH 端口、尚未完成密码或密钥验证的连接数量,是防御爆破和连接耗尽的第一道防线。
- 编辑
/etc/ssh/sshd_config,添加或修改:MaxStartups 10:30:100
含义:最多允许 10 个未认证连接;超过后每新增 30 个连接随机丢弃 1 个;达到 100 个则全部拒绝。 - 修改后必须重启服务:
sudo systemctl restart sshd - 验证是否生效:
sudo sshd -T | grep maxstartups,或查日志grep "max startups" /var/log/auth.log
二、用 iptables + connlimit 限制单 IP 并发连接数
sshd 自身不支持按源 IP 限连接数,必须依赖内核层拦截:
- 限制每个 IPv4 地址最多 3 个并发 SSH 连接(含已建立状态):
sudo iptables -A INPUT -p tcp --dport 22 -m connlimit --connlimit-above 3 --connlimit-mask 32 -j REJECT --reject-with tcp-reset - 若只控新建连接(避免影响长连接),加
--syn:sudo iptables -A INPUT -p tcp --syn --dport 22 -m connlimit --connlimit-above 5 -j REJECT - 规则需持久化(如 CentOS 用
service iptables save,Ubuntu 用iptables-persistent)
三、配合限速规则压制短时请求洪峰
单靠限并发不够,还需控频率:
- 每分钟最多放行 5 个新 SSH 连接,突发上限为 5:
sudo iptables -A INPUT -p tcp --dport 22 -m state --state NEW -m limit --limit 5/min --limit-burst 5 -j ACCEPTsudo iptables -A INPUT -p tcp --dport 22 -m state --state NEW -j DROP - 注意:这条规则要放在 connlimit 规则之前,形成“先限频、再限并发”的顺序
四、别忽略系统级资源瓶颈
即使上述全配好,若文件描述符不足,连接仍会失败:
- 查当前 sshd 进程上限:
cat /proc/$(pgrep -f "sshd -D")/limits | grep "Max open files" - 永久放宽:在
/etc/security/limits.conf加sshd hard nofile 65535,并确保/etc/pam.d/sshd含session required pam_limits.so - systemd 用户还需:
sudo systemctl edit sshd→ 添加[Service] LimitNOFILE=65535,然后重载并重启
不复杂但容易忽略


















