nftables是Linux内核的一个子系统,提供网络数据包、报文、以太网帧的过滤和分类。该系统从2014年1月19日Linux内核版本3.13发布之后可用。
nftables取代了Netfilter的旧版用户空间工具iptables。nftables相对于iptables的优点是代码重复度少并且更容易扩展到新协议。nftables通过用户空间实用程序nft进行配置,代替之前的传统工具即iptables、 ip6tables、arptables和ebtables。
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整合了字典、映射表和连接表等[https://wiki.nftables.org/wiki-nftables/index.php/Main_Page#Advanced_data_structures_for_performance_packet_classification 高级数据结构] ,这些在iptables中并不存在。利用这些特性,可显著减少实现特定数据包过滤设计所需的链表和规则数量。
iptables-translate工具可用于将许多现有的iptables规则转换为等效的nftables规则。Debian 10(Buster)等Linux发行版采用nftables作为默认数据包过滤后端,并配合iptables-translate使用。
历史
该项目首次由Netfilter核心团队的Patrick McHardy在2008年Netfilter研讨会上公开展示。 内核和用户空间实现的首个预览版于2009年3月发布。 尽管该工具被誉为“自2001年iptables问世以来Linux防火墙领域最重大的变革”,却很少有媒体获得关注。 知名黑客戈登·里昂表示,他“正期待该功能在主流Linux内核中的正式发布”。 但后者从未正式发布。2012年10月,Pablo Neira Ayuso为iptables提出了一层兼容性接口,并宣布该项目可能被纳入主流内核。
2013年10月16日,Pablo Neira Ayuso向Linux内核主线提交了nftables核心功能的pull请求。 该功能于2014年1月19日随Linux内核3.13版本的发布合并至内核主线。
上述组织方式与iptables防火墙代码相悖,后者将协议识别功能深度嵌入逻辑层,导致代码不得不为IPv4、IPv6、ARP及以太网桥接四种场景分别复写——因防火墙引擎过于依赖特定协议,无法实现通用化应用。以及使用nftables后端的语法兼容iptables命令版本。
参考文献
外部链接
- [https://lore.kernel.org/netdev/[email protected]/ First release of nftables (2009-03-18)]
- [https://lore.kernel.org/netdev/20121025170632.GA4890@1984/ Pablo Neira Ayuso: [RFC] back on nf_tables (plus compatibility layer)]
- [https://home.regit.org/netfilter-en/nftables-quick-howto/ nftables quick HOWTO]
- nftables sections in [https://wiki.archlinux.org/index.php/Nftables ArchWiki] and [https://wiki.gentoo.org/wiki/Nftables Gentoo Wiki]
*
*
- [https://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/commit/?id=5191f4d82daf22b7ee9446f83527d2795e225974 nft_compat extended to support ebtables extensions] (merged in Linux kernel 4.0)
- [https://www.mankier.com/8/nft Extended and enhanced manual for the nft command line tool]
评论 (0)