我一直在尝试将 iptables 设置转换为新服务器上的 firewalld。现有规则阻止 ICMP,但来自 IP 子集的除外。只有来自我们 IT 子网 (192.168.10.0/24) 和我们的监控服务器 (10.10.10.10) 的人应该能够 ping 服务器。在某些情况下,额外的服务器会启用额外的 IP 来获得 ping 响应。
iptables -I INPUT -p ICMP -j DROP
iptables -I INPUT -p ICMP -s 192.168.10.0/24 -j ACCEPT
iptables -I INPUT -p ICMP -s 10.10.10.10 -j ACCEPT
iptables -I INPUT -p ICMP -s N.N.N.N -j ACCEPT
然后,当我尝试应用类似的规则时,使用 firewalld 丰富的规则,我可以创建一个规则来允许 IT 子网或监控服务器,但不能同时允许两者。我似乎遇到了与此问题中描述的相同的问题。我已经看到其他几个页面提出了解决方案,但都以某种方式失败了。我已经将我的测试框恢复为默认值。
更新此 ICMP 规则后,我将需要编写更严格的 SSH 访问列表,它允许 IT 范围的较小子集访问这些机器。此时在此过程中添加 SSH 规则会产生意想不到的结果。
rich rules:
rule family="ipv4" source address="192.168.10.0/24" accept
rule family="ipv4" source address="10.10.10.10" accept
rule family="ipv4" source NOT address="192.168.10.0/24" drop
这些规则的结果是:
- 阻止所有流量,而不仅仅是 ICMP
- 如果没有“NOT address drop”行,我可以在我不应该能够ping通的设备上ping服务器
- 使用“NOT address drop”行,我无法从位于 10.10.10.10 的监控服务器 ping
- 使用上面的命令将规则添加到 iptables 确实有效,但在重新启动时会被删除
更新 1 我按照建议重新审视了多区域方法。问题似乎是我的“ssh”人员正在赶上我的 ITsubnet 区域。这会阻止他们进行 SSH 访问。
# firewall-cmd --zone=ITsubnet --list-all
ITsubnet (active)
target: default
icmp-block-inversion: no
interfaces:
sources: 192.168.10.0/24
services:
ports:
protocols:
masquerade: no
forward-ports:
source-ports:
icmp-blocks:
rich rules:
# firewall-cmd --zone=MonitoringSRV --list-all
MonitoringSRV (active)
target: default
icmp-block-inversion: no
interfaces:
sources: 10.10.10.10
services:
ports:
protocols:
masquerade: no
forward-ports:
source-ports:
icmp-blocks:
rich rules:
# firewall-cmd --zone=SSH_Access --list-all
SSH_Access (active)
target: default
icmp-block-inversion: no
interfaces:
sources: 192.168.10.10
services: ssh
ports:
protocols:
masquerade: no
forward-ports:
source-ports:
icmp-blocks:
rich rules:
# firewall-cmd --zone=public --list-all
public (active)
target: DROP
icmp-block-inversion: no
interfaces: eno16777984
sources:
services:
ports:
protocols:
masquerade: no
forward-ports:
source-ports:
icmp-blocks:
rich rules:
PS发现这个解释器有帮助。
用于在UPDATE 1中进行更改的命令
甚至从 192.168.10.10 阻止所有 ssh 访问。
用于在UPDATE 2中进行更改的命令
区域名称似乎会影响顺序,因此在 SSH_access 之前处理 ITsubnet。这得到了证实:
或者
因此,更改区域名称以获得更具体的规则以首先处理此问题。