我有一个包含两个区域的防火墙设置。
一个区域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
设置,可以轻松控制是在区域处理之前还是之后应用策略。