nftables ip 设置多个表

nftables ip 设置多个表

使用案例:我今天有一个使用 iptables 的家庭路由器。我正在研究转换为 nftables,因为它对于很多规则来说看起来更易于管理。

我今天在 iptables 下设置的一件事是“国家块”ipset,其中包含国家 CIDR 块,涵盖了大多数随机端口探测/黑客尝试。不幸的是,nftables 无法直接使用我现有的 ipset,但将其转换为 nftables ip 集相当简单。

问题:为了避免出现一个巨大的 nftables 文件,我选择将“国家/地区”集分离到一个单独的文件中。 nftables 可以轻松包含其他文件,因此这似乎完全符合 nftables 的预期行为。我将我的国家/地区定义如下:

table ip country-block {
  set country-block {
    type ipv4_addr;
    flags interval;
    elements = { /* CIDR blocks here */ }
  }
}

这加载得很好。现在我想在我的防火墙过滤器中使用它。我在主配置文件“table inet filter”中定义了一个表。这里我想添加规则:

ip saddr @country-block drop

在我用谷歌搜索答案之后,这是我找到的引用 ip 集的唯一方法。不幸的是,这会引发错误:

Error: Could not process rule: Set 'country-block' does not exist

我尝试引用“country-block@country-block”,希望它可以解析为我创建的国家块命名空间,但这不起作用:

Error: syntax error, unexpected drop
   ip saddr country-block@country-block drop
                                        ^^^^

有谁知道如何引用不同表中的集合?我不想将所有集合折叠到我的单个“过滤器”表中并将它们全部维护在一个文件中 - 这将是多么丑陋的一团糟。

附注我尝试标记此“nftables”,但显然这是一个新标签,而且我没有创建新标签所需的代表。具有所需代表的好心人可以适当标记此吗?

答案1

在询问 nftables 开发人员的邮件列表后,我收到了回复。简短的回答是不可能引用另一个表中的集。

然而,我至少能够将我的集合存储在一个单独的文件中,并通过 @include 将它们引入。这使得我的 ipset 更易于管理,而不必将它们全部放入一个庞大的配置文件中。语法如下:

# nftables.conf
include "/etc/nftables.country-block"
table inet filter {
  set country-block {
    type ipv4_addr; flags interval;
    elements = $country_block_list
  }
}

# nftables.country-block
define country_block_list = {
          # comma-separated CIDR blocks here
    }

但值得注意的是,截至撰写本文时(2016 年 12 月 21 日),这需要一个从 nftables 最新源代码构建的 nft 命令行实用程序,因为此时可用的最新版本 (nftables v0.6) 将使用上述配置会引发错误。 nftables 有一个相当不错的维基概述如何从源代码构建和安装,尽管我预计几个月后一旦新版本发布并进入所有不同的发行版,这将不再是必要的。

相关内容