nftables 相较于 iptables 的优点
更新速度更快
在 iptables 中添加一条规则,会随着规则数量增多而变得非常慢。这种状况对 nftables 而言就不存在了,因为 nftables 使用原子的快速操作来更新规则集合。

内核更新更少。
使用 iptables 时,每一个匹配或投递都需要内核模块的支持。因此,如果你忘记一些东西或者要添加新的功能时都需要重新编译内核。而在 nftables 中就不存在这种情况了, 因为在 nftables 中,大部分工作是在用户态完成的,内核只知道一些基本指令(过滤是用伪状态机实现的)。例如,icmpv6 支持是通过 nft 工具的一个简单的补丁实现的,而在 iptables 中这种类型的更改需要内核和 iptables 都升级才可以。

nftables 基础操作
nftables 和 iptables 一样,由表(table)、链(chain)和规则(rule)组成,其中表包含链,链包含规则,规则是真正的动作。

在 nftables 中,表是链的容器。所以开始使用 nftables 时你首先需要做的是添加至少一个表。然后,你可以向你的表里添加链,然后往链里添加规则。

nftables 的表管理
与 iptables 中的表不同,nftables 中没有内置表。表的数量和名称由用户决定。但是,每个表只有一个地址簇,并且只适用于该簇的数据包。nftables 表可以指定为以下五个簇中的一个:

nftables 簇    对应 iptables 的命令行工具
ip    iptables
ip6    ip6tables
inet    iptables 和 ip6tables
arp    arptables
bridge    ebtables

ip(即 IPv4)是默认簇,如果未指定簇,则使用该簇。如果要创建同时适用于 IPv4 和 IPv6 的规则,请使用 inet 簇 。inet 允许统一 ip 和 ip6 簇,以便更容易地定义规则。

注意: inet 不能用于 nat 类型的链,只能用于 filter 类型的链。

下面我们来看看 nftables 是如何进行表管理操作的,以下为 nftables 创建表的基本命令语法。

sudo nft list tables [<family>]
sudo nft list table [<family>] <name> [-n] [-a]
sudo nft (add | delete | flush) table [<family>] <name>

这里我们以创建一个 inet 簇的表为例,演示如何创建和管理一个新的表。

创建表

# 创建一个新的表
sudo nft add table inet mytable

列出表

# 列出所有表
sudo nft list tables

# 列出指定族的所有表
sudo nft list tables inet

# 列出 inet 簇中 mytable 表中的所有规则
sudo nft list table inet mytable

删除表

# 删除一个表
sudo nft delete table inet mytable

注意:只能删除不包含链的表。

清空表

# 清空一个表中的所有规则
sudo nft flush table inet mytable

标签: nftables

仅有一条评论

  1. Adoncn Adoncn

    努力学习中

添加新评论