- 工信部备案号 滇ICP备05000110号-1
- 滇公网安备53011102001527号
- 增值电信业务经营许可证 B1.B2-20181647、滇B1.B2-20190004
- 云南互联网协会理事单位
- 安全联盟认证网站身份V标记
- 域名注册服务机构许可:滇D3-20230001
- 代理域名注册服务机构:新网数码
- CN域名投诉举报处理平台:电话:010-58813000、邮箱:service@cnnic.cn
Linux之nftables详解
欢迎来到8455线路检测中心技术小课堂,每天分享一个技术小知识。
NFTables(Netfilter Tables)是 Linux 内核中用于数据包过滤和分类的框架,它旨在取代传统的 iptables、ip6tables、arptables 和 ebtables 工具。NFTables 提供了更简洁的语法、更好的性能和更灵活的功能。
1. 核心概念
表(Tables):用于区分不同类型的处理(如 filter、nat)。
链(Chains):包含规则的有序列表,可以是基链(base chain,处理网络流量)或常规链(regular chain,用于跳转)。
规则(Rules):由表达式和语句组成,决定数据包的处理方式。
集合(Sets):用于存储数据(如 IP 地址、端口),支持动态更新。
2. 基本语法
创建表:nft add table
创建链:nft add chain
添加规则:nft add rule
3. 常用命令示例
查看规则:nft list ruleset
清空规则:nft flush ruleset
删除规则:nft delete rule
4. 优势
统一性:支持 IPv4、IPv6 和 ARP 等协议,无需切换工具。
性能:基于内核的虚拟机(VM)执行规则,效率更高。
动态性:支持原子规则更新和集合的动态修改。
5. 迁移工具
可使用 iptables-translate和 ip6tables-translate将现有 iptables 规则转换为 nftables 语法。
NFTables 是现代 Linux 系统推荐的防火墙管理工具,适用于复杂的网络策略管理。
nftables写篇技术分享文档
NFTables 技术分享:现代 Linux 防火墙架构
摘要
NFTables 是 Linux 内核 3.13 引入的数据包过滤框架,作为 iptables 的继任者。本次分享将介绍其架构设计、核心特性、实际应用及迁移策略。
1. 演进背景
iptables 的局限性:
IPv4/IPv6 需要不同工具
规则膨胀时性能下降
语法复杂,难以维护
NFTables 设计目标:
统一过滤框架
基于虚拟机的高效执行
支持动态规则集
2. 架构解析
2.1 核心组件
+--------------------------------+
| Application |
+--------------------------------+
| nft 命令行工具 |
+--------------------------------+
| Netlink API 通信 |
+--------------------------------+
| nftables 内核虚拟机 | ← 规则编译为字节码
+--------------------------------+
| Netfilter 钩子点 |
+--------------------------------+
| 网络协议栈 |
+--------------------------------+
2.2 协议族支持

3. 核心特性详解
3.1 统一语法结构
# 传统 iptables
iptables -A INPUT -s 192.168.1.0/24 -p tcp --dport 22 -j ACCEPT
# NFTables 等效规则
nft add rule ip filter input ip saddr 192.168.1.0/24 tcp dport 22 accept
3.2 集合与映射
动态集合示例:
# 创建集合
nft add set ip filter blacklist { type ipv4_addr\\; }
# 动态添加
nft add element ip filter blacklist { 10.0.0.5, 10.0.0.7 }
# 使用集合
nft add rule ip filter input ip saddr @blacklist drop
映射示例:
# 创建端口映射
nft add map ip filter portmap { type inet_service : verdict\\; }
# 添加映射项
nft add element ip filter portmap { 80 : accept, 22 : drop }
# 使用映射
nft add rule ip filter input tcp dport vmap @portmap
3.3 链的类型
# 基链(直接处理流量)
nft add chain ip filter input {
type filter hook input priority 0;
policy drop;
}
# 常规链(用于组织规则)
nft add chain ip filter http_chain
# 跳转到常规链
nft add rule ip filter input tcp dport {80,443} jump http_chain
4. 性能优势
4.1 测试对比

4.2 优化原理
字节码编译:规则编译为虚拟机字节码执行
集合查找优化:哈希表存储,O(1) 查找
原子操作:批量更新避免锁竞争
5. 实战案例
5.1 企业防火墙配置
#!/bin/bash# 清空现有规则
nft flush ruleset
# 创建表和链
nft add table inet firewall
nft add chain inet firewall input { type filter hook input priority 0\\; }
nft add chain inet firewall forward { type filter hook forward priority 0\\; }
nft add chain inet firewall output { type filter hook output priority 0\\; }
# 默认策略
nft add rule inet firewall input ct state established,related accept
nft add rule inet firewall input iif lo accept
nft add rule inet firewall input ct state invalid drop
# 允许 SSH(限特定网段)
nft add set inet firewall admin_ips { type ipv4_addr\\; }
nft add element inet firewall admin_ips { 10.0.0.0/24, 192.168.1.100 }
nft add rule inet firewall input tcp dport 22 ip saddr @admin_ips accept
# 速率限制
nft add rule inet firewall input tcp dport 80 limit rate 10/second burst 20 accept
5.2 Docker 容器网络
# 容器隔离规则
nft add table bridge docker
nft add chain bridge docker forward { type filter hook forward priority 0\\; }
# 允许容器间通信
nft add rule bridge docker forward iifname "docker0" oifname "docker0" accept
# 限制外部访问
nft add rule bridge docker forward iifname "eth0" oifname "docker0" ct state established,related accept
6. 迁移策略
6.1 自动转换
# 转换 iptables 规则
iptables-save > iptables.rules
iptables-restore-translate -f iptables.rules > nftables.rules
# 审查并加载
nft -f nftables.rules
6.2 混合部署
+---------------------+
| 现有 iptables 规则 |
+---------------------+ |
v
+---------------------+
| nftables 新规则 | ← 逐步迁移关键规则
+---------------------+
|
v
+---------------------+
| 统一 nftables 规则集 |
+---------------------+
7. 监控与调试
7.1 状态查看
# 查看完整规则集
nft list ruleset
# 监控流量计数
nft list chain inet filter input
# 追踪规则匹配
nft monitor trace
7.2 性能分析
# 查看规则统计
nft -a list ruleset
# 检查规则复杂度
nft --debug=netlink list ruleset
8. 最佳实践
命名规范:使用有意义的表名和链名
模块化设计:相关规则组织到同一链
版本控制:规则集纳入配置管理
测试验证:非生产环境验证规则
性能基线:记录关键性能指标
9. 未来展望
BPF 集成:与 eBPF 深度结合
云原生支持:Kubernetes CNI 集成
AI 优化:智能规则编排
结论
NFTables 代表了 Linux 防火墙技术的现代化演进,通过统一的语法、高效的执行引擎和灵活的数据结构,为复杂网络环境提供了强大支持。建议新项目直接采用 NFTables,现有系统可制定渐进式迁移计划。
8455线路检测中心官网上拥有完善的技术支持库可供参考,大家可自行查阅,更多技术问题,可以直接咨询。同时,8455线路检测中心整理了运维必备的工具包免费分享给大家使用,需要的朋友可以直接咨询。
更多技术知识,8455线路检测中心期待与你一起探索。
售前咨询
售后咨询
备案咨询
二维码

TOP