如何使用 nftables 在一行中匹配给定端口的 UDP 和 TCP

Mic*_* TM 10 linux firewall configuration netfilter nftables

我怎样才能在一行中做到这一点?

tcp dport 53 counter accept comment "accept DNS"
udp dport 53 counter accept comment "accept DNS"
Run Code Online (Sandbox Code Playgroud)

Tot*_*tor 11

如果足够新nftables,你可以写:

meta l4proto {tcp, udp} th dport 53 counter accept comment "accept DNS"
Run Code Online (Sandbox Code Playgroud)

事实上,你可以做得更好:

set okports {
  type inet_proto . inet_service
  counter
  elements = {
    tcp . 22,  # SSH
    tcp . 53,  # DNS (TCP)
    udp . 53   # DNS (UDP)
}
Run Code Online (Sandbox Code Playgroud)

进而:

meta l4proto . th dport @okports accept
Run Code Online (Sandbox Code Playgroud)

如果您更喜欢使用端口/服务名称(来自) ,您也可以编写domain代替。53/etc/services

  • @Lethargos `th` 表示“传输标头”。`th dport` 是 `@th,16,16` 的“人类可读”快捷方式,这意味着:读取传输头中偏移量 16 处的 16 位。这是使用 TCP 或 UDP 时设置目标端口的位置。有关更多详细信息,请参阅[本文档](https://www.mankier.com/8/nft#Payload_Expressions-Raw_Payload_Expression)。 (5认同)