如何利用Iptables的Hashlimit模块实现人人平等的QoS并发限速

阿芳姑娘_6563

阿芳姑娘_6563

2026-05-27

698人浏览

原创

“人人平等”的并发限速指每个源ip独立受限(如每分钟最多5个new连接),互不影响,核心靠--hashlimit-mode srcip实现per-ip计数,配合-m state --state new精准匹配新建连接,而非全局或带宽限制。

如何利用iptables的hashlimit模块实现人人平等的qos并发限速

用 iptables 的 hashlimit 模块做“人人平等”的并发限速,核心是:**对每个源 IP 单独限制连接数(如 NEW 状态),不偏向任何用户,也不依赖全局阈值**。它不是限带宽,而是限“同时能建多少新连接”,天然适合防扫描、控登录、抑刷接口等场景。

明确目标:什么是“人人平等”的并发限速

“人人平等”指:每个客户端(源 IP)被施加相同的连接新建速率约束,互不影响。A 用户建满限额,不影响 B 用户建自己的限额;没有 VIP 通道,也没有排队等待机制。这和基于总体带宽的 QoS(如 tc + HTB)逻辑不同,hashlimit 是 per-IP 的状态化限速。

典型适用场景:

  • SSH 登录:每 IP 每分钟最多 5 次新连接(防暴力破解)
  • Web 登录接口:每 IP 每 30 秒最多 3 个 POST /login(防爆破)
  • API 网关前置:每 IP 每分钟新建 TCP 连接 ≤ 20(防连接耗尽)

关键参数与规则写法(以 SSH 为例)

以下命令限制每个源 IP 每分钟最多发起 5 个新的 SSH 连接(即匹配 tcp dpt:22 且 state NEW 的包):

iptables -A INPUT -p tcp --dport 22 -m state --state NEW \
  -m hashlimit \
  --hashlimit-above 5/minute \
  --hashlimit-burst 2 \
  --hashlimit-mode srcip \
  --hashlimit-name ssh_per_ip \
  -j DROP

逐项说明:

  • --hashlimit-above 5/minute:超出门限即触发动作(这里是 DROP)。注意单位支持 /second、/minute、/hour、/day
  • --hashlimit-burst 2:允许突发 2 个额外连接(即首分钟最多 7 个),平滑体验,避免严格均分导致误拦
  • --hashlimit-mode srcip:按源 IP 哈希计数 —— 这是“人人平等”的技术基础。也可加 srcport 实现更细粒度(如每 IP+端口对),但通常只需 srcip
  • --hashlimit-name ssh_per_ip:为该规则命名,用于内核哈希表隔离(不同名字=不同计数器)。勿重复使用同一 name 给不同规则
  • 务必搭配 -m state --state NEW:只统计新建连接,避免把 ESTABLISHED 或 ACK 包误计入

避坑要点:为什么你的规则可能没生效

常见实效原因及对策:

  • 位置错误:规则必须放在 state NEW 判定之后、目标链(如 ACCEPT)之前。推荐插入在默认策略前,例如:iptables -I INPUT 1 ...
  • 未加载模块:运行 lsmod | grep ip_tables_hashlimit,若无输出则执行 modprobe ipt_hashlimit
  • IPv6 忽略:上述规则仅作用于 IPv4。如需 IPv6,改用 ip6tables 并确保加载 ip6t_hashlimit
  • 连接跟踪失效:若系统关闭了 conntrack(如某些容器环境),state NEW 不可用,可改用 --syn(仅 SYN 包)替代,但精度略降
  • 哈希表满:默认哈希桶数有限(一般 1024),海量 IP 时可能碰撞。可通过 sysctl -w net.netfilter.nf_conntrack_hashsize=4096 调大(需 root),或改用 connlimit 模块替代(后者基于连接跟踪表,非哈希)

进阶:结合 recent 或 LOG 做可观测限速

单纯 DROP 不利于排查。可先记录再限速:

iptables -A INPUT -p tcp --dport 22 -m state --state NEW \
  -m hashlimit \
  --hashlimit-above 5/minute \
  --hashlimit-burst 2 \
  --hashlimit-mode srcip \
  --hashlimit-name ssh_per_ip \
  -j LOG --log-prefix "SSH_HASHLIMIT_DROP: "

iptables -A INPUT -p tcp --dport 22 -m state --state NEW \
  -m hashlimit \
  --hashlimit-above 5/minute \
  --hashlimit-burst 2 \
  --hashlimit-mode srcip \
  --hashlimit-name ssh_per_ip \
  -j DROP

或用 recent 模块标记高频 IP 后统一处理:

iptables -A INPUT -p tcp --dport 22 -m state --state NEW \
  -m hashlimit \
  --hashlimit-above 5/minute \
  --hashlimit-mode srcip \
  --hashlimit-name ssh_limit \
  -m recent --name ssh_abuser --set \
  -j DROP

后续可配合脚本读取 /proc/net/nf_conntrack 或 iptables -L -n -v 输出分析攻击源。

PHP速学视频免费教程(入门到精通)
PHP速学视频免费教程(入门到精通)

PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载

相关标签:

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

相关专题

更多
服务器是什么
服务器是什么

服务器是一种计算机硬件设备或软件程序,它具有强大的计算和存储能力,用请求、存储数据和提供服务。它在互联网中着关重要的作用,为用户提供各种服务和资源。本专题为大家提供服务器相关的文章、下载、课程内容,供大家免费下载体验。

2023.08.15

457

5

连接apple id服务器时出错
连接apple id服务器时出错

连接apple id服务器时出错的原因包括网络连接问题、服务器问题、Apple ID账户问题、设备问题、防火墙或安全软件问题、时间和日期设置问题、Apple服务器维护等。本专题为大家提供apple id相关的文章、下载、课程内容,供大家免费下载体验。

2023.09.08

940

5

搭建互联网服务器
搭建互联网服务器

搭建互联网服务器需要:1、选择合适的硬件和操作系统,第一步是选择合适的硬件和操作系统;2、安装和配置操作系统,是搭建互联网服务器的关键步骤;3、安装和配置服务器软件,是搭建互联网服务器的下一步,常见的服务器软件包括Apache、Nginx、Tomcat等;4、配置防火墙和安全性,是搭建互联网服务器的重要步骤;5、域名解析和配置,是搭建互联网服务器的最后一步。

2023.09.19

3152

5

如何查看服务器状态
如何查看服务器状态

查看服务器状态的方法有使用命令行工具、图形界面工具、监控工具、日志文件和远程管理工具等。本专题为大家提供服务器状态相关的文章、下载、课程内容,供大家免费下载体验。

2023.10.09

1036

5

服务器域名转接慢怎么解决
服务器域名转接慢怎么解决

服务器域名转接慢的解决办法有DNS优化、服务器优化、CDN加速、前端优化和网络优化等。本专题为大家提供服务器相关的文章、下载、课程内容,供大家免费下载体验。

2023.10.17

929

5

服务器评测软件
服务器评测软件

服务器评测软件有PassMark Software、CPU-Z、GPU-Z、CrystalDiskMark、IOmeter、JMeter、LoadRunner、Apache Bench等等。详细介绍:1、PassMark Software是一款综合性的服务器性能测试软件,可以评估服务器在各种负载条件下的性能;2、CPU-Z是一款可以提供服务器CPU详细信息的软件等等。

2023.10.17

474

3

如何开启TFTP服务器
如何开启TFTP服务器

开启TFTP服务器的步骤包括选择TFTP服务器软件、下载和安装软件、配置TFTP服务器以及启动和测试服务器等。本专题为大家提供服务器相关的文章、下载、课程内容,供大家免费下载体验。

2023.10.18

2876

4

服务器负载不兼容怎么解决
服务器负载不兼容怎么解决

解决方法:1、增加服务器资源;2、负载均衡;3、优化应用程序;4、增加缓存机制;5、分布式架构;6、限流和熔断;7、自动化扩容。想知道更详细服务器负载不兼容的解决方法,可以访问本专题下面的文章。

2023.10.20

5392

4

宽带如何接入服务器
宽带如何接入服务器

宽带接入服务器的方法有ADSL宽带接入服务器、光纤接入服务器、无线接入服务器和以太网接入服务器等。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

2023.10.20

847

5

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
热门推荐
/
最新课程
phpStudy极速入门视频教程
phpStudy极速入门视频教程

共6课时 | 54.7万人学习

独孤九贱(4)_PHP视频教程
独孤九贱(4)_PHP视频教程

共89课时 | 133.9万人学习