Linux的firewalld区逻辑和优先级

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

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

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

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

    iptables -L

  2. 其中firewalld匹配包的顺序是:

    • 直接规则
    • 根据源IP路由到区域
    • 路由到基于接口数据包的区域来自于

这基本上意味着,如果数据包的最终目的地不是由直接规则决定的话,它们将进入某个区域。 第一个firewalld试图根据源IP路由它们。 如果没有匹配的话,firewalld将尝试根据它们进入的接口进行路由。如果这也失败,则进入默认区域。 如果你有更多的区域与源IP设置和这些IP范围重叠区域源规则添加为首先将赢,因为它的规则将首先检查匹配。

例子:

让系统具有接口:

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

Firewalld设置1:

firewall-cmd --zone=home --add-interface=eth0 firewall-cmd --zone=internal --add-source=192.168.0.0/16 

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

Firewalld设置2:

 firewall-cmd --zone=internal --add-source=192.168.0.0/16 firewall-cmd --zone=home --add-source=192.168.0.2/32 

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