在 nftables 中的表声明范围之外声明 ct 辅助对象

在 nftables 中的表声明范围之外声明 ct 辅助对象

ct helper这是当前如何声明对象的工作示例nftables 文档

#!/usr/sbin/nft -f

add table filter_4 {
    # TODO: Can helper object be declared outside the scope of table declaration scope?
    # ct helper stateful object
    # "ftp-standard" is the name of this ct helper stateful object
    # "ftp" is the in-kernel name of the ct helper for ftp
    ct helper ftp-standard {
        type "ftp" protocol tcp;
    }
}

然后该ct helper对象用于 ex。如下:

add chain filter_4 new_out_4 {
    comment "New output IPv4 traffic"
}

# FTP (active and passive)
# Rule for initial ftp connection (control channel), setting ct helper stateful object to use
# "ftp-standard" is the name of the ct helper stateful object
add rule filter_4 new_out_4 tcp sport >1023 tcp dport 21 ct helper set "ftp-standard" accept

我想要实现的是了解ct helper在表外声明对象的语法,其方式与声明集合的方式类似。

有关如何在表声明范围之外声明集合的示例

add set filter_4 multicast_proto { type inet_proto; comment "IPv4 multicast protocols"; }
add element ip filter_4 multicast_proto { udp, igmp }

以类似的方式,我想声明ct helper对象,例如:

# Table declaration
add table filter_4

# Declare ct helper separately
add ct helper ftp-standard {
    type "ftp" protocol tcp;
}

这当然不行,ct helper像这样添加\声明的语法是什么?

似乎ct helper必须绑定到一个表(这是真的吗?),因此也许应该在上面的示例中指定表名称。

答案1

语法描述于nft(8):

CT助手

add ct helper [family] table name { type type protocol protocol ; [l3proto family ;] }
delete ct helper [family] table name
list ct helpers

所以对于你的情况:

  • 从 shell(包括'在适当的情况下使用正确的 shell 转义,nft它本身并不关心:它解析参数相同,但它们是分开提供的):

    nft add ct helper filter_4 ftp-standard '{ type "ftp" protocol tcp; }'
    
  • 或者如果已经在nft上下文中,只需:

    add ct helper filter_4 ftp-standard { type "ftp" protocol tcp; }
    

相关内容