在 ipset 区域匹配后,firewalld 应用接口区域

在 ipset 区域匹配后,firewalld 应用接口区域

我有一个包含两个区域的防火墙设置。

一个区域some-ips-allowed用于允许某些端口上来自特定 IP 网络的流量:

some-ips-allowed (active)
  target: default
  icmp-block-inversion: no
  interfaces:
  sources: ipset:some-ip-set
  services:
  ports: 22/tcp 80/tcp 443/tcp
  ...

包含some-ip-set一些网络,比如说10.0.0.0/8

另一个区域已分配一些接口(由于 而列入白名单target: ACCEPT):

something-trusted (active)
  target: ACCEPT
  icmp-block-inversion: no
  interfaces: eth123
  sources:
  services:
  ports:
  ...

接口eth123具有与 同一网络的 IP:10.0.0.1

现在出现了一个棘手的情况:如果我尝试通过eth123端口 ex. 上的接口访问计算机123,则会被拒绝。这是由于优先级问题:firewalld 设置了 nftables,以便在接口之前处理 ipset,而区域some-ips-allowed不允许端口123

以下是摘录nft list ruleset,请注意goto指令:

chain filter_INPUT_ZONES {
    ip saddr @some-ip-set goto filter_IN_some-ip-set
    iifname "eth123" goto filter_IN_something-trusted
    ...

简单来说,逻辑是,如果连接的 IP 匹配,则使用 ipset 区域,就是这样。

我想要实现的是:如果连接的IP匹配,并且没有明确处理,那么它将被处理下一个匹配的区域(接口区域)。

这在firewalld中可行吗,最好不要直接干预nft命令?

编辑: 根据这个:https://wiki.nftables.org/wiki-nftables/index.php/Jumping_to_chain,我可以看到我在 nft 规则中有一个jump而不是。goto

再次,这可以用 -level 命令来完成吗firewall-cmd?如果不行,直接使用命令是否安全(即不会引起不可预测的冲突和副作用)nft,即使其余配置由 管理firewall-cmd

答案1

看来仅使用 就无法做到这一点firewall-cmd

但是,使用firewalld的政策代替区域

考虑以下政策:

some-ips-allowed-policy (active)
  priority: -1
  target: CONTINUE
  ingress-zones: ANY
  egress-zones: HOST
  services:
  ports:
  protocols:
  masquerade: no
  forward-ports:
  source-ports:
  icmp-blocks:
  rich rules:
        rule family="ipv4" source ipset="some-ip-set" port port="22" protocol="tcp" accept

它将应用于所有传入流量(感谢ANY入口HOST/出口区域),并将accept来自提供的 ipset 中的 IP 的连接。

现在,如果策略与 IP 不匹配,它将继续处理区域(注意目标CONTINUE)。nft显示策略生成jump语句 - 正是所需要的。

此外,使用该priority设置,可以轻松控制是在区域处理之前还是之后应用策略。

相关内容