防火墙阻止来自预分配 IP 的 ICMP 流量摘录

防火墙阻止来自预分配 IP 的 ICMP 流量摘录

我一直在尝试将 iptables 设置转换为新服务器上的防火墙。现有规则阻止除 IP 子集之外的 ICMP。只有来自我们的 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

然后,当我尝试使用防火墙的丰富规则应用类似的规则时,我可以创建一条规则来允许 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

这些规则的结果是:

  1. 阻止所有流量,而不仅仅是 ICMP
  2. 如果没有“NOT address drop”行,我可以在无法 ping 的设备上 ping 服务器
  3. 使用“NOT address drop”行,我无法从位于 10.10.10.10 的监控服务器 ping 通
  4. 使用上述命令将规则添加到 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 发现这个解释器这有帮助。

答案1

用于更改的命令更新 1

firewall-cmd --permanent --new-zone=ITsubnet
firewall-cmd --permanent --new-zone=MonitoringSRV
firewall-cmd --permanent --new-zone=SSH_access
firewall-cmd --reload
firewall-cmd --permanent --zone=ITsubnet --add-source=192.168.10.0/24
firewall-cmd --permanent --zone=MonitoringSRV --add-source=10.10.10.10
firewall-cmd --permanent --zone=SSH_access --add-source=192.168.10.10
firewall-cmd --permanent --zone=public --remove-service=ssh
firewall-cmd --permanent --zone=SSH_access --add-service=ssh
firewall-cmd --permanent --zone=public --set-target=DROP
firewall-cmd --reload

阻止所有 ssh 访问,甚至阻止来自 192.168.10.10 的访问。

用于更改的命令更新2

区域名称似乎会影响顺序,因此 ITsubnet 在 SSH_access 之前处理。这可以通过以下方式确认:

iptables -S

或者

iptables -vnL

因此,更改区域名称以首先获得更具体的规则来处理可以解决此问题。

firewall-cmd --permanent --delete-zone=SSH_Access
firewall-cmd --permanent --new-zone=A1_First010
firewall-cmd --permanent --zone=A1_First010 --add-source=192.168.10.10
firewall-cmd --permanent --zone=A1_First010 --add-service=ssh

相关内容