nftables
| 原作者 | The Netfilter Project |
|---|---|
| 開發者 | The Netfilter Project |
| 当前版本 |
|
| 源代码库 | |
| 编程语言 | C |
| 操作系统 | Linux |
| 平台 | Netfilter |
| 许可协议 | GPLv2 |
| 网站 | |
nftables是Linux内核的一个子系统,提供网络数据包、报文、以太网帧的过滤和分类。该系统从2014年1月19日Linux内核版本3.13发布之后可用。 [2]
nftables取代了Netfilter的旧版用户空间工具iptables。nftables相对于iptables的优点是代码重复度少并且更容易扩展到新协议。nftables通过用户空间实用程序nft进行配置,代替之前的传统工具即iptables、 ip6tables、arptables和ebtables。[3]
nftables 利用Netfilter基础设施的构建块,例如网络堆栈中的现有挂钩、连接跟踪系统、用户空间排队组件和日志记录子系统。
nft
[编辑]命令行语法
[编辑]用于丢弃所有目标IP地址为1.2.3.4的数据包的一条命令:
nft add rule ip filter output ip daddr 1.2.3.4 drop
请注意,新语法与iptables的语法存在显著差异,在iptables中相同规则的写法如下:
iptables -A OUTPUT -d 1.2.3.4 -j DROP
新语法看似更冗长,但灵活性却大幅提升。nftables整合了字典、映射表和连接表等高级数据结构,这些在iptables中并不存在。利用这些特性,可显著减少实现特定数据包过滤设计所需的链表和规则数量。
iptables-translate工具可用于将许多现有的iptables规则转换为等效的nftables规则。[4][5]Debian 10(Buster)等Linux发行版采用nftables作为默认数据包过滤后端,并配合iptables-translate使用。[6]
历史
[编辑]该项目首次由Netfilter核心团队的Patrick McHardy在2008年Netfilter研讨会上公开展示。[7] 内核和用户空间实现的首个预览版于2009年3月发布。[8] 尽管该工具被誉为“自2001年iptables问世以来Linux防火墙领域最重大的变革”,却很少有媒体获得关注。[9] 知名黑客戈登·里昂表示,他“正期待该功能在主流Linux内核中的正式发布”。[9]
该项目始终处于alpha阶段,其官方网站于2009年被撤下。2010年3月,项目邮件列表中作者的邮件显示该项目仍在持续开发中,即将迎来beta版本的发布;[10][11] 但后者从未正式发布。2012年10月,Pablo Neira Ayuso为iptables提出了一层兼容性接口,[12]并宣布该项目可能被纳入主流内核。
2013年10月16日,Pablo Neira Ayuso向Linux内核主线提交了nftables核心功能的pull请求。[13] 该功能于2014年1月19日随Linux内核3.13版本的发布合并至内核主线。[2]
概览
[编辑]nftables内核引擎为Linux内核添加了一个简单的虚拟机,能够执行字节码来检查网络数据包并决定如何处理该数据包。该虚拟机实现的操作被刻意设计得基础化,它能够从数据包本身获取数据,查看关联的元数据(例如入站接口),并管理连接跟踪数据。基于这些数据,可使用算术运算符、位运算符和比较运算符进行决策。该虚拟机还支持操作数据集合(通常为IP地址),从而能用单次集合查询替代多次比较操作。[14]
上述组织方式与iptables防火墙代码相悖,后者将协议识别功能深度嵌入逻辑层,导致代码不得不为IPv4、IPv6、ARP及以太网桥接四种场景分别复写——因防火墙引擎过于依赖特定协议,无法实现通用化应用。[14]
nftables相较于iptables的主要优势在于:简化Linux内核应用程序二进制接口(ABI)、减少代码重复、改进错误报告机制,以及实现更高效的过滤规则执行、存储与增量变更。传统使用的、、和(分别用于IPv4、IPv6、ARP和以太网桥接)将被nft取代,作为统一实现方案,在内核虚拟机之上提供防火墙配置功能。
nftables还提供了一个改进的用户空间API,允许在单次Netlink事务中原子性地替换一条或多条防火墙规则。这能加速大型规则集环境中的防火墙配置变更,同时有助于避免规则变更执行过程中的竞争条件。nftables还包含兼容性功能以简化从旧版防火墙的迁移,提供可转换iptables格式规则的命令行工具, [15]以及使用nftables后端的语法兼容iptables命令版本。[16]
参考文献
[编辑]- ^ [ANNOUNCE] nftables 1.1.6 release. 2025年12月5日 [2025年12月8日].
- ^ 2.0 2.1 nftables, the successor of iptables. Linux 3.13. kernelnewbies.org. 2014-01-19 [2016-03-04]. (原始内容存档于2024-05-18).
- ^ How We Used eBPF to Build Programmable Packet Filtering in Magic Firewall.
- ^ Moving from iptables to nftables - nftables wiki. wiki.nftables.org. [2025-08-28].
- ^ List of available translations via iptables-translate tool - nftables wiki. wiki.nftables.org. [2025-08-28].
- ^ nftables - Debian Wiki. wiki.debian.org. [2025-08-28].
- ^ User day program – NFWS2008. workshop.netfilter.org. 2008-10-03 [2014-02-22].
- ^ initial release announcement.
- ^ 9.0 9.1 Gray, Patrick. NEWS: Linux Gets New Firewall. Risky.biz. March 26, 2009.
- ^ Linux Netfilter Devel – Re: Current state of nftables. Spinics.net. [2014-01-20].
- ^ Linux Netfilter Devel – Re: Current state of nftables. Spinics.net. [2014-01-20].
- ^ Linux Netfilter Devel – [RFC] back on nf_tables (plus compatibility layer). Spinics.net. [2014-01-20].
- ^ [PATCH 00/17] netfilter updates: nf_tables pull request. Marc.info. [2014-01-20].
- ^ 14.0 14.1 Jonathan Corbet. The return of nftables. LWN.net. 2013-08-20 [2013-10-22].
- ^ Neira Ayuso, Pablo. nftables – nft command line tool. git.netfilter.org. [24 January 2019].
- ^ Arturo, Ral. Netfilter Workshop 2018 Berlin summary. ral-arturo.org. [24 January 2019].
外部链接
[编辑]- First release of nftables (2009-03-18)
- Pablo Neira Ayuso: [RFC] back on nf_tables (plus compatibility layer)
- nftables quick HOWTO
- nftables sections in ArchWiki and Gentoo Wiki
- Corbet, Jonathan. nftables: a new packet filtering engine. LWN.net. 2009-03-24.
- McHardy, Patrick. nftables – a successor to iptables, ip6tables, ebtables and arptables. Netfilter Workshop 2008. 2008-09-30. (原始内容 (ODP)存档于2009-03-22).
- nft_compat extended to support ebtables extensions (merged in Linux kernel 4.0)
- Extended and enhanced manual for the nft command line tool