我已经读了一段时间了。
我的理解是:
- nftables 是现代 Linux 内核数据包分类框架。 nftables 是 iptables 的继承者。它取代了现有的 iptables、ip6tables、arptables 和 ebtables 框架。
- x_tables 是承载 iptables、ip6tables、arptables 和 ebtables 使用的共享代码部分的内核模块的名称,因此,Xtables 或多或少用于指代整个防火墙(v4、v6、arp 和 eb)架构。作为系统管理员,我不应该担心 xtables / x_tables (有些人使用下划线,所以不确定 xtables 是否与 x_tables 相同),这实际上是内核中的一些代码。
- nftables 使用 nf_tables,其中 nf_tables 是内核模块的名称。作为系统管理员,我不应该担心 nf_tables,它实际上是内核中的一些代码。
- iptables-nft 看起来像 iptables,但行为却像 nftables。它的全部目的是从 iptables 迁移到 nftables。
- iptables-nft 使用 xtables-nft,其中 xtables-nft 是内核模块的名称。作为系统管理员,我不应该担心 xtables-nft。
请告知我上述说法是否正确或错误。如果错误的话请给我正确的说法。
答案1
我的观点是 iptables、ip6tables、ebtables 和 arptable 是 Netfilter 的前端工具集。
它们是一个用户空间工具集,用于格式化和编译规则以将它们加载到在内核中运行的核心 Netfilter 中。您可以在模块目录中找到 Netfilter 的所有内核部分,它们具有您的内核模块ls /lib/modules/$(uname -r)/kernel/net/netfilter/
的形式。nf_*, nft_*, xt_*
这些工具的问题在于它们以规则粒度进行操作,因此每次调整规则都意味着下载所有内核规则,对二进制 blob 进行修改,然后将其上传回内核。当规则变得太多时,这个过程的 CPU 负载就会变得非常密集。
nftables 是这个工具系列在一个独特工具中的重写(统治它们......咳咳),这使得它更易于使用且性能更高,但它仍然是 Netfilter 的前端,但主要区别在于它具有一种平滑的语法,能够解决 Netfilter 的每个部分,并且能够直接在 Netfilter 内部修改整个二进制规则集,而无需逐一下载和上传它们,这代表了一个巨大的进步表现。
这也说明你可以同时使用 iptables 和 nftables 来修改规则,但不建议这样做,因为你看不到不同规则之间的优先级,或者这个优先级可能不是你想要的。
现在,根据分发策略,我们可以找到不同的软件包集来与新的 Netfilter 核心内核集模块配合使用。您提到了 xtables-nft :它只是指定用户空间工具的中间集(或包)的快捷方式,这些{ip|ip6,eb,arp}tables
工具能够在新的 Netfilter 核心上工作,与旧工具的使用方式相同,因此它有帮助和简化从旧方式到 nftables(新方式)的迁移。
还有一个名为 iptables-legacy 的软件包,可以使ip{,6}tables
一组传统工具以与新的 Netfilter 核心相同的方式工作,但无法将规则直接转换为 nftables,因此像防火墙脚本工具这样的工具ferm
可以在新安装的现代内核上继续工作。
连接两者,例如可以iptables-legacy-save |iptables-nft-restore
将一组旧的 iptables 规则直接转换为新的 nftables 规则集。
xtables-nft 只是指定由 {ip,eb,arp} 表组成的用户空间工具中间集(或包)的快捷方式,能够在新的 Netfilter 核心上工作,就像使用旧工具一样,因此它有助于并简化从旧方式到 nftables(新方式)的迁移
问候。