我想了解来自 Iptables 的 FirewallD。
我的区域是默认drop
区域,没有任何服务。
drop (active)
target: DROP
icmp-block-inversion: no
interfaces: enp9s0u2u1u2c2
sources:
services:
ports:
protocols:
masquerade: no
forward-ports:
source-ports:
icmp-blocks:
rich rules:
添加源ip到这个区域有什么意义?
- 我添加了所有本地IP
firewall-cmd --add-source=192.168.0.0/16
即使来自该源 IP 之一,它仍然会丢弃所有数据包。
向此区域添加服务将允许任何人访问此服务,无论我设置什么源 IP。
如何限制服务并只允许单个IP(或范围)访问该服务?
与 iptables 相比,firewalld 的行为根本不是很清楚。有太多的假设和未知的默认行为。
答案1
我添加了所有本地IP firewall-cmd --add-source=192.168.0.0/16
即使来自该源 IP 之一,它仍然会丢弃所有数据包。
将源绑定到区域意味着该区域设置将用于限制来自该源的流量。
因此,您告诉 FirewallD 该drop
区域现在将专门应用于来自 192.168.0.0/16 的流量,而不应用于其他任何流量。我不确定来自该 IP 范围之外的任何流量会发生什么情况。 (像这样修改默认drop
区域可能不是一个好主意。)
将服务添加到区域通常意味着指定的服务始终允许配置到该区域的任何接口、任何源 IP 地址。如果某个区域没有启用任何服务,它将禁止所有流量。我没有尝试将源 IP 地址添加到区域,因此我不知道正常行为如何与之交互。
为了实现您想要的,您可能应该创建一个新区域,并为您想要的服务添加丰富的规则:
firewall-cmd --permanent --new-zone="allow-limited-<service>"
firewall-cmd --permanent --zone="allow-limited-<service>" --add-rich-rule="rule source address=192.168.0.0/16 service name=<service> accept"
现在,如果您向该区域分配一个网络接口allow-limited-<service>
,它将仅允许来自 192.168.0.0/16 的服务<service>
(可能包括一个或多个 TCP 和/或 UDP 端口),并阻止其他所有服务。
区域实际上是一组预定义的防火墙规则,您可以轻松地将其应用于任何特定的网络接口。一个网络接口一次只能分配给一个区域。
FirewallD 逻辑似乎是为企业/ISP/托管提供商的使用而定制的,其中可能有单独的 VLAN 接口,并且如果企业从与之前的范围完全不同的 IP 范围获得新的 IP 块,则 IP 地址分配可能会发生巨大变化。在这种环境中,您可以将防火墙规则绑定到(VLAN 或物理)接口根据其目的,IP 地址不那么重要。