我试图理解Linux firwalld区域背后的逻辑,以及它们被评估的方式。
据我了解,区域被定义为接口和IP范围的列表,允许/拒绝规则可以被应用。 它是否正确? 对于包含接口和附加IP范围的区域。 即使stream量将从该范围内的IP到达机器,但是通过不同的接口,是否允许为该区域允许的服务?
按什么顺序评估区域? 与两个(可能相互矛盾的)区域相匹配的传入stream量会发生什么情况? 例如,允许nfs从给定接口连接到机器的区域Z1和拒绝来自IP的所有传入stream量的区域Z2。 通过Z1定义的接口到达机器的NFSstream量会发生什么,但是z2中定义的IP会发生什么?
Zone只是一个基于netfilter的抽象层。 在netfilter规则的语言中,它的链条给了你这种感觉,作为firewalld的最终用户,你的数据包在一些“区域”内。 您可以随时检查运行区域的确切行为:
iptables -L
其中firewalld匹配包的顺序是:
这基本上意味着,如果数据包的最终目的地不是由直接规则决定的话,它们将进入某个区域。 第一个firewalld试图根据源IP路由它们。 如果没有匹配的话,firewalld将尝试根据它们进入的接口进行路由。如果这也失败,则进入默认区域。 如果你有更多的区域与源IP设置和这些IP范围重叠区域源规则添加为首先将赢,因为它的规则将首先检查匹配。
让系统具有接口:
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正在逐个添加路由区域的源规则,以便我们运行相关的命令。