如何设置SSHD以限制特定IP的最大并发连接数,防御DoS攻击?
- 内容介绍
- 相关推荐
本文共计691个文字,预计阅读时间需要3分钟。
通过`sshd_config`本身无法限制每个IP的并发连接数,它不提供按源IP计数的机制。真正有效的方法是结合使用`iptables`的`connlimit`模块,在内核网络层拦截超过限制的连接。这是防止单个IP耗尽SSH资源(如进程、内存、文件描述符)的最可靠方式。
用 iptables + connlimit 限制单IP并发SSH连接
该规则作用于已建立的 TCP 连接(ESTABLISHED 状态),防止一个IP开10个终端、脚本误配长连接或慢速DoS攻击:
- 运行命令限制每个IPv4地址最多3个并发SSH连接:
iptables -A INPUT -p tcp --dport 22 -m connlimit --connlimit-above 3 --connlimit-mask 32 -j REJECT --reject-with tcp-reset -
--connlimit-mask 32表示精确到单个IP;若需按C类网段(如192.168.1.0/24)统一限制,改为--connlimit-mask 24 - 使用
REJECT --reject-with tcp-reset而非DROP,能让客户端立刻收到RST包,避免长时间等待超时,体验更干净
配合 MaxStartups 防未认证连接泛滥
即使 connlimit 生效,大量未完成认证的连接(如暴力扫描的SYN+ACK后卡住)仍会堆积。
本文共计691个文字,预计阅读时间需要3分钟。
通过`sshd_config`本身无法限制每个IP的并发连接数,它不提供按源IP计数的机制。真正有效的方法是结合使用`iptables`的`connlimit`模块,在内核网络层拦截超过限制的连接。这是防止单个IP耗尽SSH资源(如进程、内存、文件描述符)的最可靠方式。
用 iptables + connlimit 限制单IP并发SSH连接
该规则作用于已建立的 TCP 连接(ESTABLISHED 状态),防止一个IP开10个终端、脚本误配长连接或慢速DoS攻击:
- 运行命令限制每个IPv4地址最多3个并发SSH连接:
iptables -A INPUT -p tcp --dport 22 -m connlimit --connlimit-above 3 --connlimit-mask 32 -j REJECT --reject-with tcp-reset -
--connlimit-mask 32表示精确到单个IP;若需按C类网段(如192.168.1.0/24)统一限制,改为--connlimit-mask 24 - 使用
REJECT --reject-with tcp-reset而非DROP,能让客户端立刻收到RST包,避免长时间等待超时,体验更干净
配合 MaxStartups 防未认证连接泛滥
即使 connlimit 生效,大量未完成认证的连接(如暴力扫描的SYN+ACK后卡住)仍会堆积。

