搜索

6.4. 使用 nftables 命令中的设置

download PDF
nftables 框架原生支持集合。您可以使用一个集合,例如,规则匹配多个 IP 地址、端口号、接口或其他匹配标准。

6.4.1. 在 nftables 中使用匿名集合

匿名集合包含用逗号分开的值,如 { 22, 80, 443 },您直接在规则中使用。您还可以将匿名集合用于 IP 地址或其他匹配标准。
匿名集合的缺陷是,如果要更改集合,则需要替换规则。对于动态解决方案,请使用命名集,如 第 6.4.2 节 “在 nftables 中使用命名集” 所述。

先决条件

  • inet 系列中的 example_chain 链和 example_table 表存在。

过程 6.13. 在 nftables 中使用匿名集合

  1. 例如,要向 example_table 中的 example_chain 添加一条规则,其允许传入流量到端口 2280443
    # nft add rule inet example_table example_chain tcp dport { 22, 80, 443 } accept
  2. 另外,还可在 example_table 中显示所有链及其规则:
    # nft list table inet example_table
    table inet example_table {
      chain example_chain {
        type filter hook input priority filter; policy accept;
        tcp dport { ssh, http, https } accept
      }
    }
    

6.4.2. 在 nftables 中使用命名集

nftables 框架支持可变命名集合。命名集是一个列表或一组元素,您可以在表中的多个规则中使用。匿名集合的另外一个好处在于,您可以更新命名的集合而不必替换使用集合的规则。
当您创建一个命名集时,必须指定集合包含的元素类型。您可以设置以下类型:
  • 包含 IPv4 地址或范围的集合的 ipv4_addr,如 192.0.2.1192.0.2.0/24
  • 包含 IPv6 地址或范围的集合的 ipv6_addr,如 2001:db8:1::12001:db8:1::1/64
  • 包含介质访问控制(MAC)地址列表的集合的 ether_addr,如 52:54:00:6b:66:42
  • 包含互联网协议类型列表的集合的 inet_proto ,如 tcp
  • 包含互联网服务列表的集合的 inet_service ,如 ssh
  • 包含数据包标记列表的集合的 mark。数据包标记可以是任意正 32 位整数值(02147483647)。

先决条件

  • example_chain 链和 example_table 表存在。

过程 6.14. 在 nftables 中使用命名集

  1. 创建一个空集。以下示例为 IPv4 地址创建一个集合:

    1. 要创建可存储多个独立 IPv4 地址的集合:
      # nft add set inet example_table example_set { type ipv4_addr \; }
    2. 要创建可存储 IPv4 地址范围的集合:
      # nft add set inet example_table example_set { type ipv4_addr \; flags interval \; }
    重要
    要避免 shell 认为分号作为命令结尾,您必须用反斜杠转义分号。
  2. 另外,还可创建使用该集合的规则。例如,以下命令向 example_table 中的 example_chain 添加一条规则,该规则将丢弃 example_set 中来自 IPv4 地址的所有数据包。
    # nft add rule inet example_table example_chain ip saddr @example_set drop
    由于 example_set 仍为空,所以该规则目前不起作用。
  3. example_set 中添加 IPv4 地址:

    1. 如果您创建存储单个 IPv4 地址的集合,请输入:
      # nft add element inet example_table example_set { 192.0.2.1, 192.0.2.2 }
    2. 如果您创建存储 IPv4 范围的集合,请输入:
      # nft add element inet example_table example_set { 192.0.2.0-192.0.2.255 }
    当您指定 IP 地址范围时,您也可以使用无类别域间路由(CIDR)标记,如上例中的 192.0.2.0/24
Red Hat logoGithubRedditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

通过我们的产品和服务,以及可以信赖的内容,帮助红帽用户创新并实现他们的目标。

让开源更具包容性

红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。欲了解更多详情,请参阅红帽博客.

關於紅帽

我们提供强化的解决方案,使企业能够更轻松地跨平台和环境(从核心数据中心到网络边缘)工作。

© 2024 Red Hat, Inc.