讲师中心 微信公众号
AI工具推荐 视频效率加速

如何使用 nftables 的优先级功能实现流量精细化控制

夜强君_9165

夜强君_9165

发布时间:2026-06-16 10:56:07

|

940人浏览过

|

来源于php中文网

原创

nftables的priority决定链在内核hook中的执行顺序而非规则排序,真正影响单条规则生效顺序的是其在链内的位置;应使用预定义语义化priority常量划分策略层级(如nf_nat=-100、filter=0、security=150),再通过insert/append控制链内规则顺序,并结合jump调用命名链实现模块化控制。

如何使用 nftables 的优先级功能实现流量精细化控制

nftables 的优先级(priority)不是用来“排序规则”的数字,而是决定链挂载到内核 hook 的执行顺序——它控制的是不同链(比如自定义链、base chain)在数据包处理流程中谁先介入、谁后介入。真正影响单条规则生效顺序的,是规则在链内的位置,而非 priority 值本身。

要实现流量精细化控制,关键在于:用 priority 区分策略层级(如连接跟踪前置、状态放行、应用层标记、最终决策),再用规则插入位置(position)和链内顺序落实细节。


用 priority 划分策略层级,避免逻辑冲突

每个 base chain(如 input、forward)都绑定一个 hook 和 priority。priority 值越小,链越早被调用。Linux 内核预定义了常用 priority 常量,推荐直接使用语义化名称,而不是硬写数字:

  • nf_nat(-100):NAT 相关,最早介入,用于地址转换
  • filter(0):过滤主链,默认值,适合放行/拒绝逻辑
  • mangle(-50 或 150):修改包字段(如 TOS、TTL),常用于 QoS 标记
  • security(150):SELinux/MAC 策略,最晚执行

例如,若你希望先做连接跟踪修正(如 FTP helper),再做端口限速,最后才由白名单链决策,就应按 priority 从低到高组织链:

# 创建 NAT 链(最早执行,确保地址已转换)
nft add chain inet filter prerouting { type nat hook prerouting priority -100 \; }

# 创建连接跟踪增强链(如启用 conntrack helper)
nft add chain inet filter ct_helper { type filter hook input priority -50 \; }

# 主过滤链(默认 priority 0)
nft add chain inet filter input { type filter hook input priority 0 \; policy drop \; }

# 安全审计链(最后执行,记录所有未匹配包)
nft add chain inet filter audit { type filter hook input priority 150 \; }

这样设计后,一个进来的 TCP 包会依次经过:prerouting(NAT)→ ct_helper(修正 conntrack 状态)→ input(核心放行/限速)→ audit(兜底日志),各层职责清晰,互不干扰。


在同一链内用 position 精确控制规则顺序

priority 管链之间顺序,而链内规则顺序靠插入位置(position)或追加顺序决定。nftables 规则严格按链内顺序匹配,第一条匹配即执行对应动作(accept/drop),后续不再检查。

所以必须保证:

  • ct state established,related accept 放最前(保障回包畅通)
  • iifname "lo" accept 紧随其后(本地通信无需审查)
  • 新连接规则(带 ct state new)放在中间
  • 默认 drop 放最后(或设为链默认策略)

插入规则时可指定位置:

# 查看当前链规则及 handle(handle 是唯一位置标识)
nft list chain inet filter input --numeric

# 在 handle 5 的规则之前插入新规则(比如插在 established 后、lo 前)
nft insert rule inet filter input position 5 ip saddr 127.0.0.1 accept

# 或追加到末尾(等效于 append,但显式更安全)
nft add rule inet filter input tcp dport 22 ct state new accept

常见错误是把 drop 规则写在中间,导致后续所有规则失效。正确做法是设链默认策略为 drop,或确保 drop 是链内最后一条规则。


结合命名链 + jump 实现模块化精细控制

把复杂逻辑拆成多个命名链(named chain),再用 jump 按需调用,既能复用、又便于调试。每个子链可设独立 priority(仅对 base chain 有效),但更常用的是在主链中用 jump 控制执行时机。

例如,对外 API 流量需同时做源限速、并发控制、SNI 过滤:

# 创建专用子链
nft add chain inet filter api_policy { type filter \; }

# 子链内规则(按需叠加)
nft add rule inet filter api_policy ip saddr @trusted_ips accept
nft add rule inet filter api_policy tcp dport 3000 ct count over 20 drop
nft add rule inet filter api_policy ct mark & 0x1 == 0x1 accept
nft add rule inet filter api_policy drop

# 主链中调用
nft add rule inet filter input tcp dport 3000 ct state new jump api_policy

这样,只有目标端口是 3000 且为新连接的包才会跳入 api_policy,其他流量不受影响,逻辑隔离干净。


优先级与性能优化的实用配合

priority 影响的是链调度开销,而链内规则匹配效率取决于结构:

  • 使用 set 替代重复 ip saddr 条件(哈希查找 O(1))
  • 把高频匹配条件(如 iifname、ct state)放在规则前面
  • 避免在高 priority 链里放耗时操作(如 log 或 limit 应尽量后置)

例如,把日志规则放在 priority 150 的 audit 链,而不是塞进主 input 链,既不影响主路径性能,又能集中审计。

本质上,priority 是策略分层的“楼层号”,而规则顺序才是每层楼里的“房间号”。搞清这个分工,精细化控制就不容易错位。

热门AI工具

更多
咔片AIPPT

一款在线AI演示文稿制作工具,可根据主题和内容需求辅助生成PPT结构与页面,提高演示材料制作效率。

VibeKnow
VibeKnow Hot

一款AI视频创作工具,主要用于全球首个AI知识视频创作平台,文档、文章、网页,一键生成视频,适合需要提升相关任务效率的用户。

二狗PPT
二狗PPT Hot

一款AI演示文稿工具,主要用于专为中式职场打造的AI PPT生成工具,适合需要提升相关任务效率的用户。

WorkBuddy

一款AI办公效率工具,主要用于腾讯云推出的AI原生桌面智能体工作台,适合需要提升相关任务效率的用户。

SkildArt
SkildArt Hot

SkildArt是一款AI文本写作工具,一站式 AI 视觉创作平台。

Seko
Seko Hot

一款AI视频创作工具,主要用于商汤科技推出的创编一体的AI短视频创作Agent,适合需要提升相关任务效率的用户。

豆包大模型

豆包大模型是一款由字节跳动推出的企业级大语言模型服务平台。

超级简历WonderCV

一款AI办公效率工具,主要用于免费求职简历模版下载制作,应届生职场人必备简历制作神器,适合需要提升相关任务效率的用户。

DeepSeek

DeepSeek是一款面向对话、写作、编程和推理场景的AI大模型工具。

相关专题

更多
Java 网络安全
Java 网络安全

本专题聚焦 Java 在网络安全与加密通信中的应用,系统讲解常见加密算法(MD5、SHA、AES、RSA)、数字签名、HTTPS证书配置、令牌认证(JWT、OAuth2)及常见安全漏洞防护(XSS、SQL注入、CSRF)。通过实战项目(如安全登录系统、加密文件传输工具),帮助学习者掌握 Java 安全开发与加密技术的实战能力。

5145

2025.10.13

PHP 安全与防护
PHP 安全与防护

本专题聚焦于PHP开发中的安全问题与防御措施,详细讲解SQL注入、XSS攻击、CSRF攻击、文件包含漏洞等常见安全风险及其修复方法。通过结合实际案例,帮助开发者理解漏洞成因,掌握输入验证、会话安全、加密存储与安全编码规范,全面提升PHP网站的安全防护水平。

435

2025.11.04

磁盘配额是什么
磁盘配额是什么

磁盘配额是计算机中指定磁盘的储存限制,就是管理员可以为用户所能使用的磁盘空间进行配额限制,每一用户只能使用最大配额范围内的磁盘空间。php中文网为大家提供各种磁盘配额相关的内容,教程,供大家免费下载安装。

4350

2023.06.21

如何安装LINUX
如何安装LINUX

本站专题提供如何安装LINUX的相关教程文章,还有相关的下载、课程,大家可以免费体验。

3653

2023.06.29

linux find
linux find

find是linux命令,它将档案系统内符合 expression 的档案列出来。可以指要档案的名称、类别、时间、大小、权限等不同资讯的组合,只有完全相符的才会被列出来。find根据下列规则判断 path 和 expression,在命令列上第一个 - ( ) , ! 之前的部分为 path,之后的是 expression。还有指DOS 命令 find,Excel 函数 find等。本站专题提供linux find相关教程文章,还有相关

2913

2023.06.30

linux修改文件名
linux修改文件名

本专题为大家提供linux修改文件名相关的文章,这些文章可以帮助用户快速轻松地完成文件名的修改工作,大家可以免费体验。

7210

2023.07.05

linux系统安装教程
linux系统安装教程

linux系统是一种可以免费使用,自由传播,多用户、多任务、多线程、多CPU的操作系统。本专题提供linux系统安装教程相关的文章,大家可以免费体验。

6842

2023.07.06

linux查看文件夹大小
linux查看文件夹大小

Linux是一种自由和开放源码的类Unix操作系统,存在着许多不同的Linux版本,但它们都使用了Linux内核。Linux可安装在各种计算机硬件设备中,比如手机、平板电脑、路由器、视频游戏控制台、台式计算机、大型机和超级计算机。linux怎么查看文件夹大小呢?php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

3913

2023.07.20

Uvicorn使用教程
Uvicorn使用教程

本专题汇总了Uvicorn使用教程与启动运行指南,涵盖其作为Python ASGI服务器的定位与特点,以及命令行启动(uvicorn main:app --reload)、参数配置(host/port/workers)、程序内嵌运行与Gunicorn结合部署等核心用法。同时整理了热重载调试、日志配置与生产环境部署优化等技巧,助你快速掌握Uvicorn的运行与配置。

0

2026.11.02

热门下载

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

精品课程

更多
热门推荐
/
最新课程
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn