nftables set 地址怎么配置或排查
我在 nftables 里处理一组白名单地址时,最容易误判的不是命令本身,而是“集合已经存在”和“规则真的引用了它”被混成了一件事。地址集合要先挂在正确的 table 上,元素类型要和匹配表达式一致,规则里还要用 @集合名 引用。
最稳妥的排查顺序是:先看 table 和 set 的定义,再看元素,再看规则引用,最后才查防火墙链路。IPv4 地址集合通常定义为type ipv4_addr,规则匹配则写成ip saddr @trusted_hosts。
- named set 可以独立增删元素;匿名集合只能跟随规则改写。
- 集合所在的 family、元素类型和规则表达式必须对齐。
nft list set看定义和内容,nft get element适合核对一个地址。
先把地址集合定义在正确的 table 中
下面用 inet 表承载一组 IPv4 白名单。它只是配置示例,不代表已经在某台机器上执行;生产环境应先确认现有规则不会被覆盖。
# 创建一个同时支持 IPv4/IPv6 规则的表,并定义 IPv4 地址集合
nft add table inet filter
nft add set inet filter trusted_hosts { type ipv4_addr\; comment "可信来源地址"\; }
# 查看集合的定义、类型和当前元素
nft list set inet filter trusted_hosts
这里的 trusted_hosts 是 named set,所以后续可以独立添加和删除地址。type ipv4_addr 只接受 IPv4 地址或 IPv4 网段;如果规则写的是 ip6 saddr,就应另建 type ipv6_addr 的集合。若系统已存在同名 table 或 set,先用 list tables、list sets 确认,不要盲目重复创建。

添加地址并确认规则确实引用了 set
定义完成后,元素管理和规则引用分开处理。一个地址、多个地址和网段都可以放进同一个集合;规则侧使用 @ 而不是把集合名当普通字符串。
# 向 named set 添加单个地址和一个网段
nft add element inet filter trusted_hosts { 192.0.2.10 }
nft add element inet filter trusted_hosts { 198.51.100.0/24 }
# 将集合引用到输入链;注释说明这条规则保护的范围
nft add chain inet filter input
nft add rule inet filter input ip saddr @trusted_hosts accept comment "允许可信来源"
排查时先看三处输出:nft list set inet filter trusted_hosts 是否有地址,nft list chain inet filter input 是否出现 @trusted_hosts,以及规则是否位于实际经过的链。只看到集合存在,并不能说明数据包已经命中它。
| 现象 | 优先检查 | 常见原因 |
|---|---|---|
| 添加时报类型错误 | set 的 type | IPv4、IPv6 或端口类型写错 |
| 集合有地址但规则不生效 | 规则表达式和链 | 没有使用 @set,或流量没有经过该链 |
| 想删一个地址却删不掉 | 地址的精确写法 | 添加的是网段,删除时却写成单个主机 |
用 list、get 和 flush 缩小排查范围
list set 适合看整体,get element 适合核对一个元素。需要清空集合时用 flush set,它会保留集合定义但移除其中元素;误用 delete set 则会连集合本身一起删除。
# 精确查询一个地址是否位于集合中;地址必须符合集合类型
nft get element inet filter trusted_hosts { 192.0.2.10 }
# 删除一个元素,保留 set 和引用它的规则
nft delete element inet filter trusted_hosts { 192.0.2.10 }
# 清空元素但保留集合结构;执行前确认这不是线上白名单
nft flush set inet filter trusted_hosts
如果 get element 查不到地址,先修元素而不是改规则;如果能查到而规则仍无效,再检查地址族、源地址是否被 NAT 改写、链的 hook/优先级和前面的终止性规则。这个顺序能避免把集合问题误诊成网络问题。

interval、timeout 和持久化配置别混用
需要保存连续地址范围时,可以在集合创建时声明 flags interval;需要让元素自动过期时使用 flags timeout。两者解决的是不同问题,不要为了“功能更全”随意叠加 flag;也不要把动态更新场景和只读常量集合混在一起。
table inet filter {
# interval 适合表达连续地址范围,元素仍按 IPv4 解析
set office_ranges {
type ipv4_addr
flags interval
elements = { 192.0.2.0/24 }
}
# 规则使用 @ 名称引用集合;配置可由 nft -f 文件加载
chain input {
type filter hook input priority filter; policy drop;
ip saddr @office_ranges accept
}
}
把配置写进文件后,可用 nft -c -f firewall.nft 做语法检查,再按发行版的 nftables 服务方式加载。最后再次执行 nft list ruleset,确认 set 和规则都出现在预期的 family/table 下。
常见问题
nftables set 地址能不能直接写在规则里?
可以,花括号里的匿名集合适合一次性规则;需要后续增删地址时使用 named set,维护更清晰。
为什么 set 里有地址,匹配仍然失败?
重点看规则是否写成 ip saddr @set名、流量是否经过该链,以及地址是否在 NAT 后发生了变化。
删除元素前要不要先 flush?
不需要。删除单个地址用 delete element;只有要清空全部元素并保留集合定义时才使用 flush set。
Lovart只输入一句活动需求能生成到什么程度?
- 上一篇
- Lovart只输入一句活动需求能生成到什么程度?
- 下一篇
- Go container/list 出错时怎么排查删除操作
-
- 文章 · linux | 2小时前 |
- ss 监听端口怎么配置或排查
- 233浏览 收藏
-
- 文章 · linux | 3小时前 |
- Linux logrotate 轮转后应用如何重新打开新日志文件
- 344浏览 收藏
-
- 文章 · linux | 4小时前 | Linux · systemd · 服务器运维 · 日志排查 · journalctl · journalctl启动筛选 journalctl查看上一次启动 journalctl -b -1 systemd日志按启动过滤 Linux启动日志排查
- journalctl 启动筛选怎么配置或排查
- 222浏览 收藏
-
- 文章 · linux | 6小时前 | Linux · 运维排障 · mount · Linux mount bind mount 只读挂载
- mount bind 只读怎么配置或排查
- 402浏览 收藏
-
- 文章 · linux | 8小时前 | cgroup cgroup v2 io.max Linux I/O 限速
- cgroup v2 io.max怎么配置或排查
- 345浏览 收藏
-
- 文章 · linux | 9小时前 | cgroup cgroup v2 memory.high Linux 内存限制
- cgroup v2 memory.high怎么配置或排查
- 420浏览 收藏
-
- 文章 · linux | 11小时前 | Linux · systemd · EnvironmentFile ·
- systemd EnvironmentFile 多行变量如何保留空格与换行
- 186浏览 收藏
-
- 文章 · linux | 12小时前 |
- systemd socket activation怎么配置或排查
- 245浏览 收藏
-
- 文章 · linux | 17小时前 |
- Linux ss 看不到监听端口时先查哪个 namespace
- 492浏览 收藏
-
- 前端进阶之JavaScript设计模式
- 设计模式是开发人员在软件开发过程中面临一般问题时的解决方案,代表了最佳的实践。本课程的主打内容包括JS常见设计模式以及具体应用场景,打造一站式知识长龙服务,适合有JS基础的同学学习。
- 543次学习
-
- GO语言核心编程课程
- 本课程采用真实案例,全面具体可落地,从理论到实践,一步一步将GO核心编程技术、编程思想、底层实现融会贯通,使学习者贴近时代脉搏,做IT互联网时代的弄潮儿。
- 516次学习
-
- 简单聊聊mysql8与网络通信
- 如有问题加微信:Le-studyg;在课程中,我们将首先介绍MySQL8的新特性,包括性能优化、安全增强、新数据类型等,帮助学生快速熟悉MySQL8的最新功能。接着,我们将深入解析MySQL的网络通信机制,包括协议、连接管理、数据传输等,让
- 500次学习
-
- JavaScript正则表达式基础与实战
- 在任何一门编程语言中,正则表达式,都是一项重要的知识,它提供了高效的字符串匹配与捕获机制,可以极大的简化程序设计。
- 487次学习
-
- 从零制作响应式网站—Grid布局
- 本系列教程将展示从零制作一个假想的网络科技公司官网,分为导航,轮播,关于我们,成功案例,服务流程,团队介绍,数据部分,公司动态,底部信息等内容区块。网站整体采用CSSGrid布局,支持响应式,有流畅过渡和展现动画。
- 485次学习
-
- H2O EvalGPT
- H2O EvalGPT是H2O.ai推出的开源LLM评估平台,提供详细的大模型性能排行榜、行业特定基准测试及A/B测试功能,助您快速选择最适合项目的高性能大语言模型。
- 112次使用
-
- LMArena
- LMArena是加州大学伯克利分校推出的AI模型匿名评测平台。通过盲测投票机制,用户可对比不同大模型回答并生成实时排行榜,助力开发者优化模型及用户选择最佳AI工具。
- 32次使用
-
- OpenCompass
- OpenCompass是上海AI实验室推出的开源大模型评测平台,提供CompassKit、CompassHub和CompassRank三大核心组件,支持LLM及多模态模型的一站式标准化评估与排行榜查询。
- 50次使用
-
- AGI-Eval
- AGI-Eval是由上海交大等高校联合发布的大模型评测社区,提供公正透明的LLM能力榜单、多领域评测集及Data Studio数据服务,助力AI模型性能评估与NLP科研开发。
- 31次使用
-
- SuperCLUE
- SuperCLUE是权威的中文大语言模型综合评测基准,涵盖语言理解、知识应用、AI Agent智能体及安全性等12项核心能力。通过多轮对话与客观测试,定期发布榜单与技术报告,为模型研发、优化及行业选型提供科学依据。
- 266次使用
-
- Linux vmstat 如何分辨内存抖动与磁盘等待:si、so、wa 与复测顺序
- 2026-08-30 501浏览
-
- Linux搭建vsftpdFTP服务器教程
- 2026-04-30 501浏览
-
- Shell脚本安装教程:.sh一键安装指南
- 2026-03-16 501浏览
-
- Linux清空文件内容的几种方法
- 2025-12-01 501浏览
-
- Linux命令行下载文件技巧
- 2025-11-23 501浏览

