2.3.2. nftables 链的基础知识

表由链组成,后者是规则的容器。存在以下两种规则类型:

  • 基本链 :您可以使用基本链作为来自网络堆栈的数据包的入口点。
  • 常规链 :您可以使用常规链作为 jump 目标来更好地组织规则。

如果要在表中添加基本链,要使用的格式取决于您的防火墙脚本:

  • 在原生语法的脚本中,使用:

    table <table_address_family> <table_name> {
      chain <chain_name> {
        type <type> hook <hook> priority <priority>
        policy <policy> ;
      }
    }
  • 在 shell 脚本中,使用:

    nft add chain <table_address_family> <table_name> <chain_name> { type <type> hook <hook> priority <priority> \; policy <policy> \; }

    为了避免 shell 将分号解释为命令的结尾,请在分号的前面放置 \ 转义字符。

这两个示例都创建了 基本链。要创建 常规链,请不要在大括号中设置任何参数。

链类型

以下是链类型以及您可以使用的地址系列和 hook 概述:

类型地址系列Hook描述

filter

all

all

标准链类型

nat

ip,ip6,inet

PREROUTING输入输出postrouting

这个类型的链根据连接跟踪条目执行原生地址转换。只有第一个数据包遍历此链类型。

route

ip,ip6

output

如果 IP 标头的相关部分已更改,则遍历此链类型的数据包会导致新的路由查找。

链优先级

priority 参数指定数据包使用相同的 hook 值遍历链的顺序。您可以将此参数设置为整数值,或使用标准优先级名称。

以下列表概述了标准优先级名称及其数字值,您可以使用哪个地址系列和 hook:

文本值数字值地址系列Hook

raw

-300

ip,ip6,inet

all

mangle

-150

ip,ip6,inet

all

dstnat

-100

ip,ip6,inet

prerouting

-300

bridge

prerouting

filter

0

ip,ip6,inet,arp,netdev

all

-200

bridge

all

安全

50

ip,ip6,inet

all

srcnat

100

ip,ip6,inet

postrouting

300

bridge

postrouting

out

100

bridge

output

链策略

链策略定义 nftables 是否应该接受或丢弃数据包(如果此链中的规则没有指定任何操作)。您可以在链中设置以下策略之一:

  • accept (默认)
  • drop