跳转到主内容
websoft网络软件专家 - 深耕网络技术,打造实用软件!

怎么利用Iptables的Conntrack模块限制最大网络并发身份认证状态数

iptables无法直接限制身份认证状态数,只能通过connlimit模块限制同一IP的并发TCP连接数或新建连接频率,结合conntrack和recent模块实现对SSH等认证行为的网络层防护。 iptables 本身不直接限制“身份认证状态数”,它没有用户会话或登录状态的概念。所谓“并发身份认证状态”,实际对应的是底层网络连接行为——比如 SSH 登录尝试、HTTP Basic Auth 请求、RADIUS/TACACS+ 连接等。真正能控制的,是这些协议建立的 TCP 连接数 或 新建连接频率 ,而核心依赖的是内核的 conntrack(连接跟踪)机制 和 connlimit 扩展模块 。 明确目标:把“认证状态”映射到可管控的网络实体 身份认证过程通常伴随以下典型网络表现: SSH 登录:每次新连接(
--syn
包)触发一次认证流程 HTTPS + 表单登录:每个用户会话常对应一个或多个长连接(如 WebSocket、Keep-Alive) RADIUS 认证:基于 UDP,但高频重试易被识别为扫描行为 因此,限制“并发身份认证状态数”,本质是限制: 单位时间内来自同一源 IP 的新建连接数 ,或 同一 IP 当前已建立的活跃连接数 。conntrack 模块提供连接状态视图,connlimit 则在此基础上做阈值判断。 用 connlimit 限制每个 IP 的并发认证连接数 这是最常用、最直接的方式,适用于 SSH、Web 登录端口等 TCP 服务: 限制每个 IP 对 SSH(22 端口)最多同时建立 3 个连接: iptables -I INPUT -p tcp --syn --dport 22 -m connlimit --connlimit-above 3 -j REJECT --reject-with tcp-reset 限制每个 C 类网段(如 192.168.1.0/24)对 Web 管理后台(8443 端口)总连接数不超过 5: iptables -I INPUT -p tcp --syn --dport 8443 -m connlimit --connlimit-above 5 --connlimit-mask 24 -j DROP 注意:
--syn
确保只匹配新建连接握手阶段,不影响已有会话数据传输
--connlimit-mask 24
表示按 /24 子网聚合统计,适合防御同一局域网内的暴力尝试 结合 conntrack + recent 实现时间窗口内新建连接频控 connlimit 控制“当前并发数”,而某些认证服务(如 PAM-over-SSH)在失败后仍会短暂占用连接资源。若需防爆破,建议叠加基于时间窗口的新建连接速率限制: 允许每个 IP 每 60 秒最多发起 6 次新的 SSH 连接请求: iptables -A INPUT -p tcp --syn --dport 22 -m conntrack --ctstate NEW -m recent --set --name ssh_attemptiptables -A INPUT -p tcp --syn --dport 22 -m conntrack --ctstate NEW -m recent --update --seconds 60 --hitcount 7 --name ssh_attempt -j DROP 该策略不依赖连接是否成功完成认证,只要发了 SYN 就计数,更贴近“认证尝试”的语义 务必确保
recent
模块已加载:
modprobe xt_recent
关键注意事项与调优点 实际生效前需确认几项基础前提: 系统必须启用连接跟踪:
net.ipv4.ip_conntrack_enable = 1
(现代内核默认开启) 检查当前 conntrack 表容量是否充足:
cat /proc/sys/net/netfilter/nf_conntrack_max
;若频繁出现 “nf_conntrack: table full” 日志,需增大该值 规则顺序很重要:应放在 ACCEPT 已建立连接(
ESTABLISHED,RELATED
)规则之后、其他拒绝规则之前 测试时建议用
-I INPUT 1
插入顶部,并搭配
iptables -L INPUT -n --line-numbers
验证位置 不复杂但容易忽略:所有限制都作用于网络层连接,无法区分“合法用户多开”和“恶意爆破”。如需更精细的业务层控制(如每账号限 2 个活跃会话),需由应用自身实现会话管理,iptables 只作第一道防线。

相关文章