如何配置Nftables实现针对不同子网的分布式流量哈希哈希限速

风萱酱_6318

风萱酱_6318

2026-06-26

308人浏览

原创

nftables可通过ct mark标记子网+limit实现按/24子网独立限速,虽无原生hashlimit模块,但借助连接跟踪、地址匹配与速率限制组合可等效达成;多子网差异化策略可用set定义区间并分层限速;并发控制需结合ct count与mark。

如何配置nftables实现针对不同子网的分布式流量哈希哈希限速

直接用 nftables 实现“按子网哈希限速”,核心是 limit 和 ct(连接跟踪)配合使用,但要注意:nftables 本身没有内置的 hashlimit 模块——它不支持 iptables 那种 -m hashlimit --hashlimit-mode srcip --hashlimit-srcmask 24 的原生哈希分组计数方式。不过,通过合理组合 ct、ip saddr、counter 和 limit,仍可达成等效目标:对每个 /24 子网独立限速。

用 ct mark + limit 模拟子网哈希限速

由于 nftables 缺少直接按掩码聚合源地址的限速原语,推荐做法是:先按子网范围标记连接,再对已标记连接做速率控制。适用于 TCP/UDP 服务入口(如 HTTP、DNS):

  • 创建一个自定义链,匹配源 IP 所属子网并打标记
  • 在主链中跳转到该链处理
  • 对已标记连接应用 limit rate,并结合 burst 控制突发流量

示例:限制每个 /24 子网每秒最多发起 10 个新连接(针对 TCP SYN):

nft add table inet filter<br>nft add chain inet filter input { type filter hook input priority 0; policy drop; }<br>nft add chain inet filter subnet_limit { type filter hook input priority -1; }<br><br># 将来自 192.168.0.0/16 的连接打上 mark 1<br>nft add rule inet filter subnet_limit ip saddr 192.168.0.0/16 ct mark set 1<br><br># 对 mark=1 的连接,限制新建连接速率为 10/second,允许最多 5 个突发<br>nft add rule inet filter input ct mark 1 tcp flags & (fin | syn) == syn limit rate 10/second burst 5 counter drop<br><br># 允许其他常规流量(如已建立连接、ICMP 等)<br>nft add rule inet filter input ct state established,related accept<br>nft add rule inet filter input icmp type echo-request limit rate 5/second accept<br>nft add rule inet filter input ip protocol tcp tcp dport 22 ct state new accept

用集合(set)+ limit 实现多子网差异化策略

若需为多个特定子网设置不同限速阈值(如办公网段宽松、公网段严格),可用 set 存储子网列表,并搭配 limit 规则逐条匹配:

  • 定义命名集合,例如 trusted_nets 存放 10.10.0.0/16、172.16.0.0/12
  • 为信任子网设高限速(如 50/second),为默认公网设低限速(如 3/second)
  • 规则顺序很重要:更具体的子网规则必须放在通用规则之前

片段示意:

新趣集
新趣集

一款AI开发辅助工具,主要用于新趣集是一个产品发现社区,发现最新的网站,移动 App和技术产品,适合需要提升相关任务效率的用户。

下载
nft add set inet filter trusted_nets { type ipv4_addr; flags interval; }<br>nft add element inet filter trusted_nets { 10.10.0.0/16, 172.16.0.0/12 }<br><br># 信任子网:宽松限速<br>nft add rule inet filter input ip saddr @trusted_nets tcp dport 80 limit rate 50/second burst 20 accept<br><br># 所有其他来源:严格限速<br>nft add rule inet filter input tcp dport 80 limit rate 3/second burst 2 counter drop

结合 conntrack 实现并发连接数控制

仅控请求频率不够,还需防 SYN Flood 或连接耗尽。nftables 支持 ct count 和 ct state new 组合实现每子网并发连接数限制:

  • 用 ct count 统计当前处于 new 状态的连接数
  • 配合 ip saddr 和子网掩码(需用 ip saddr & 255.255.255.0 形式模拟 /24 分组,但注意 nftables 不支持动态掩码运算)
  • 更实用的方式:用 ct mark 标记后,再用 ct count 查该 mark 下的新连接数

例如:任一 /24 子网内,同时新建连接不得超过 30 个:

# 假设已在 subnet_limit 链中为各子网设置了不同 mark 值<br>nft add rule inet filter input ct mark 1 ct count over 30 counter drop

持久化与调试要点

配置完务必保存并验证:

  • 导出规则集:nft list ruleset -n -a > /etc/nftables.conf
  • 启用开机启动:systemctl enable nftables && systemctl start nftables
  • 查看实时计数器:nft list chain inet filter input -n,观察 counter packets 是否增长
  • 测试时建议先用 log 替代 drop,确认匹配逻辑无误后再启用丢弃

注意:nftables 的 limit 是 per-rule 计数,不是 per-source-group;真正实现“哈希限速”语义需靠外部标记机制(如 ct mark)辅助,这是与 iptables-hashlimit 的关键差异。不复杂但容易忽略。

相关专题

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

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

2023.08.15

437

5

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

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

2023.09.08

880

5

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

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

2023.09.19

2692

5

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

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

2023.10.09

896

5

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

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

2023.10.17

809

5

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

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

2023.10.17

414

3

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

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

2023.10.18

2436

4

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

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

2023.10.20

4512

4

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

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

2023.10.20

727

5

热门下载

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

精品课程

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

共6课时 | 54.6万人学习

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

共89课时 | 133.4万人学习