centos 8 默认安装了nftables ,但是默认禁用状态
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
版权属于:Joyber
本文链接:https://blog.qqvbc.com/default/426.html
转载时须注明出处及本声明
努力学习中