可通过iptables的limit和connlimit模块分别限制ssh请求速率与并发连接数:一、用limit模块限制每分钟最多5个新建连接,burst值为5;二、用connlimit限制单ip最多3个并发ssh会话,使用reject加tcp-reset;三、组合策略先限速再限并发;四、需验证规则并持久化保存。

可以通过 iptables 的 limit 和 connlimit 模块分别限制 SSH 连接的请求速率和并发连接数,有效缓解暴力破解和连接泛滥问题。
一、限制单位时间内的新 SSH 连接请求数(防爆破)
使用 iptables -m limit 控制每分钟允许多少个新的 SSH 连接请求(基于 SYN 包),超出即丢弃:
- 只对新建连接(
--syn)生效,不影响已建立的会话 - 推荐配置:每分钟最多 5 个新连接,触发后 1 分钟内后续请求全拒
- 命令示例:
iptables -A INPUT -p tcp --dport 22 -m state --state NEW -m limit --limit 5/min --limit-burst 5 -j ACCEPT
iptables -A INPUT -p tcp --dport 22 -m state --state NEW -j DROP
注意:--limit-burst 是初始突发阈值,首次可连 5 次;之后严格按 5/min 执行。若设为 0,则首包即限速。
二、限制单个 IP 同时发起的 SSH 并发连接数(防占线)
用 connlimit 限制每个源 IP 最多建立几个并发 SSH 连接(适用于防止一个 IP 开多个终端):
- 匹配的是已建立的连接(ESTABLISHED 状态),非新建请求
- 常用策略:单 IP 最多 3 个并发 SSH 会话
- 命令示例:
iptables -A INPUT -p tcp --dport 22 -m connlimit --connlimit-above 3 -j REJECT --reject-with tcp-reset
使用 REJECT 而非 DROP,能让客户端快速感知拒绝,避免超时等待;tcp-reset 主动断连更友好。
三、组合策略:先限速再限并发,增强防护层级
实际部署建议将两者叠加,形成“请求频率 + 并发数量”双重控制:
- 先放行合规的新建连接(带限速)
- 再对已建立连接做并发数检查
- 最后兜底拒绝所有未匹配的 SSH 新建请求
完整规则链示意(按执行顺序):
iptables -A INPUT -p tcp --dport 22 -m state --state NEW -m limit --limit 5/min --limit-burst 5 -j ACCEPT
iptables -A INPUT -p tcp --dport 22 -m state --state NEW -j DROP
iptables -A INPUT -p tcp --dport 22 -m state --state ESTABLISHED -m connlimit --connlimit-above 3 -j REJECT --reject-with tcp-reset
四、验证与持久化注意事项
规则生效后需验证效果,并确保重启不丢失:
- 用
iptables -L -n -v查看命中计数,确认规则在工作 - 从另一台机器用
ssh多次快速连接,测试限速是否触发 - 开 4 个终端连同一 IP,验证并发限制是否生效
- CentOS/RHEL 保存规则:
service iptables save或iptables-save > /etc/sysconfig/iptables
Ubuntu/Debian 推荐用iptables-persistent工具固化规则
不复杂但容易忽略:SSH 服务本身(sshd_config)的 MaxStartups 参数也影响并发接受能力,建议与 iptables 规则协同调整。










