如何通过Nftables Concat特性在Linux上一条规则内快速匹配源IP、目的端口及传输协议?
- 内容介绍
- 文章标签
- 相关推荐
本文共计564个文字,预计阅读时间需要3分钟。
直接使用 nftables 的 concat 特性,可以将源 IP、目标 IP 等信息连接起来,形成复合规则。例如,以下规则将源 IP 和目标 IP 进行拼接:
构造支持三字段拼接的映射表
先建一个类型为 ipv4_addr . inet_service . inet_protocol 的映射,注意字段顺序和类型必须严格对应:
-
ipv4_addr对应ip saddr(4 字节) -
inet_service对应tcp dport或udp dport(2 字节) -
inet_protocol对应ip protocol(1 字节),值为 6(TCP)或 17(UDP)
执行命令创建映射:
nft add map inet filter ipportproto_map { type ipv4_addr . inet_service . inet_protocol : verdict; }插入带协议区分的复合规则
同一个端口(比如 8080)对 TCP 和 UDP 可以定义不同动作。
本文共计564个文字,预计阅读时间需要3分钟。
直接使用 nftables 的 concat 特性,可以将源 IP、目标 IP 等信息连接起来,形成复合规则。例如,以下规则将源 IP 和目标 IP 进行拼接:
构造支持三字段拼接的映射表
先建一个类型为 ipv4_addr . inet_service . inet_protocol 的映射,注意字段顺序和类型必须严格对应:
-
ipv4_addr对应ip saddr(4 字节) -
inet_service对应tcp dport或udp dport(2 字节) -
inet_protocol对应ip protocol(1 字节),值为 6(TCP)或 17(UDP)
执行命令创建映射:
nft add map inet filter ipportproto_map { type ipv4_addr . inet_service . inet_protocol : verdict; }插入带协议区分的复合规则
同一个端口(比如 8080)对 TCP 和 UDP 可以定义不同动作。

