Linux firewalld 区域逻辑和优先级

ko6*_*ko6 5 linux zones firewalld

我试图了解 Linux firewalld 区域背后的逻辑,以及它们的评估方式。

  1. 据我了解,区域被定义为接口和 IP 范围的列表,可以应用允许/拒绝规则。这样对吗?对于包含接口和附加 IP 范围的区域。即使流量将从该范围内的 IP 到达机器,但通过不同的接口,该区域允许的服务是否也将被允许用于 IP 范围?

  2. 以什么顺序评估区域?与两个(可能相互矛盾的)区域匹配的传入流量会发生什么情况?例如,区域“Z1”允许从给定接口到机器的 nfs,区域“Z2”拒绝来自 IP 的所有传入流量。通过“Z1”中定义的接口但从“Z2”中定义的 IP 到达机器的 NFS 流量会发生什么?

小智 5

  1. Zone只是基于netfilter的一个抽象层。在 netfilter 的语言中,规则了它的一组链,这些链给您作为防火墙的最终用户的感觉,您的数据包位于某个“区域”内。您始终可以检查区域运行的确切行为:

    iptables-L

  2. firewalld匹配数据包的顺序是:

    • 直接规则
    • 根据源 IP 路由到区域
    • 根据接口数据包路由到区域

这基本上意味着,如果数据包的最终目的地不是由直接规则决定的,它们将进入某个区域。首先,firewalld 尝试根据源 IP 路由它们。如果没有匹配,firewalld 将尝试根据它们进入的接口来路由它们。如果这也失败,它们将进入默认区域。如果您使用源 IP 设置了更多区域,并且这些 IP 范围与区域重叠,则首先添加的源规则将获胜,因为将首先检查其规则是否匹配。

例子:

让系统具有接口:

  • eth0 的 IP 地址为 192.168.0.1/24
  • IP 地址为 192.168.100.1/24 的 eth1

防火墙设置 1:

firewall-cmd --zone=home --add-interface=eth0
firewall-cmd --zone=internal --add-source=192.168.0.0/16
Run Code Online (Sandbox Code Playgroud)

通过 eth0 来自地址 192.168.0.2 的数据包将被路由到内部区域。

防火墙设置 2:

firewall-cmd --zone=internal --add-source=192.168.0.0/16
firewall-cmd --zone=home --add-source=192.168.0.2/32
Run Code Online (Sandbox Code Playgroud)

来自 192.168.0.2 的数据包将再次路由到内部区域。它以这种方式工作,因为firewalld正在逐一添加路由区域的源规则,以便我们运行相关命令。