Appearance
数据类型
nft describe 您可以使用 nft describe 来获取有关数据类型的信息,找出特定选择器的数据类型,并列出该选择器的预定义符号常量
shell
[root@localhost ~]# nft describe iif
meta expression, datatype iface_index (network interface index) (basetype integer), 32 bits
[root@localhost ~]# nft describe iifname
meta expression, datatype ifname (network interface name) (basetype string), 16 characters
[root@localhost ~]#
以下是可用匹配项的不完整列表:
- meta (元属性,例如 interfaces)
- icmp (ICMP 协议)
- icmpv6 (ICMPv6 协议)
- ip (IP 协议)
- ip6 (IPv6 协议)
- tcp (TCP 协议)
- udp (UDP 协议)
- sctp (SCTP 协议)
- ct (连接跟踪 connection tracking)
yml
meta:
oif <output interface INDEX>
iif <input interface INDEX>
oifname <output interface NAME>
iifname <input interface NAME>
(oif 和 iif 接受字符串参数并转换为接口索引)
(oifname 和 iifname 更动态,但由于字符串匹配,速度较慢)
icmp:
type <icmp type>
icmpv6:
type <icmpv6 type>
ip:
protocol <protocol>
daddr <destination address>
saddr <source address>
ip6:
daddr <destination address>
saddr <source address>
tcp:
dport <destination port>
sport <source port>
udp:
dport <destination port>
sport <source port>
sctp:
dport <destination port>
sport <source port>
ct:
state <new | established | related | invalid>
1. 数据包元信息匹配
元选择器允许您匹配 - 在某些情况下,设置 - 数据包元信息。也就是说,本地主机拥有的有关数据包的信息(例如如何/何时接收数据包),这些信息不一定在数据包本身中携带。
以下元选择器通过数据包本身携带的信息来匹配数据包:
Keyword | Settable | Description | Data Type 数据类型 | Notes |
---|---|---|---|---|
pkttype | Y | packet type (unicast, broadcast, multicast, other) | pkt_type | host 0[不建议使用] 单拨unicast 0 广播broadcast 1 多播multicast 2 其他other 3 |
length | 数据包长度(以字节为单位) | integer (32 bit) | ||
protocol | 数据包 协议/EtherType 协议值 | ether_type | as in skb->protocol | |
nfproto | NetFilter 数据包协议族 | integer (32 bit) | 如IPv4、IPv6,etc....;仅在 Inet 表中有用 | |
l4proto | layer 4 protocol 第 4 层协议 | integer (8 bit) 整数(8 位) | 像TCP、UDP,etc......;跳过 IPv6 扩展标头 |
2. 接口匹配
元选择器根据传入或传出接口匹配数据包,以下仅列出常用的匹配方式,完整内容请参考官网
Keyword | Settable | Description | Data Type | Notes |
---|---|---|---|---|
iif | 输入接口索引 | iface_index | 比 iifname 更快,因为它只需要比较一个 32 位无符号整数而不是一个字符串。接口索引是动态分配的,因此不要将其用于动态创建和销毁的接口,例如。PPP0 中。 | |
iifname | 输入接口名称 | ifname | ||
oif | 输出接口索引 | iface_index | 比 oifname 更快,因为它只需要比较一个 32 位无符号整数而不是一个字符串。 接口索引是动态分配的,因此不要将其用于动态创建和销毁的接口,例如。PPP0 中。 | |
oifname | 输出接口名称 | ifname |
shell
[root@localhost ~]# ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
link/ether 00:0c:29:03:19:e8 brd ff:ff:ff:ff:ff:ff
inet 192.168.1.26/24 brd 192.168.1.255 scope global noprefixroute ens33
valid_lft forever preferred_lft forever
inet6 2408:8244:8600:43f:20c:29ff:fe03:19e8/64 scope global dynamic noprefixroute
valid_lft 245803sec preferred_lft 159403sec
inet6 fe80::20c:29ff:fe03:19e8/64 scope link noprefixroute
valid_lft forever preferred_lft forever
[root@localhost ~]# nft add rule inet test chain1 meta iif 2 accept #
[root@localhost ~]# nft add rule inet test chain1 meta iif ens33 accept #
[root@localhost ~]#
[root@localhost ~]# nft -a -n list table inet test
table inet test { # handle 21
chain chain2 { # handle 2
comment "常规链"
}
chain chain1 { # handle 58
comment "常规链"
type filter hook input priority 0; policy accept;
tcp dport 22 accept # handle 66
tcp dport 12 accept # handle 70
tcp dport 443 accept # handle 67
tcp dport 114 accept # handle 71
tcp dport 1443 accept # handle 68
ip saddr 192.168.1.21 counter packets 0 bytes 0 # handle 75
iif "ens33" accept # handle 76
iif "ens33" accept # handle 77
}
chain chain4 { # handle 60
type filter hook input priority 110; policy accept;
tcp dport 22 accept # handle 65
}
}
[root@localhost ~]#
3. 按数据包标记、路由类别和领域进行匹配
Keyword | Settable | Description | Data Type 数据类型 | Notes |
---|---|---|---|---|
mark | Y | 数据包标记 | mark | |
priority | Y | TC 数据包优先级 | tc_handle | detailed usage example 详细使用示例 |
rtclassid | 路由领域 | realm | Routing realm references: 路由领域引用:linux-ip.netpolicyrouting.org |