答案1
正如您从 GCP 防火墙规则页面的屏幕截图中看到的,出于安全考虑,我是否应该从防火墙规则中删除 ICMP 协议?会降低被攻击的几率吗?
对此有不同的看法,但通常不认为接受 ICMP 数据包存在安全风险。
我使用的是 CentOS 7。我将 net.ipv4.icmp_echo_ignore_all=1 添加到 /etc/sysctl.d 中。这与从 GCP 防火墙规则页面删除 ICMP 协议具有相同的效果吗?
不。ICMP 请求有多种类型。 Ping 或 echo 请求只是其中之一。该设置icmp_echo_ignore_all
仅禁用 ping 响应,而在防火墙中阻止 ICMP 将阻止所有 ICMP 流量、ping 和所有其他流量。这会导致问题,因为有时需要 ICMP 数据包才能正常运行。
答案2
关于允许泄漏类型消息的 ICMP 有很多讨论。然而,它在 ICMPv6 中得到了加强,这意味着有关这些消息的所有 CVE 可能已过时(请参阅关于 ping 的 CVE和关于时间戳的CVE)。
ping 实用程序提供有关您的系统的信息。主要是它已经起来了。如果您有任何其他服务,例如网站,黑客无论如何都知道您的系统已启动。
时间戳返回您计算机的当前时间。这被认为是一种不好的做法,因为许多系统使用当前时间来生成随机数。我认为大多数此类系统不面向客户端可访问的服务(即我仍在time_t now = time(nullptr); srand(now);
单元测试中使用,它是完全安全的)。
同样,尝试通过阻止 ICMP 消息来隐藏时间戳不太可能有帮助。当您访问同一服务器上的网页时,您会看到一个Date: ...
包含当前时间的字段。通过足够的点击次数,您可以确定任何网络服务器的日期和时间的非常接近的近似值。
对于那些感兴趣的人,以下是阻止 ping 和时间戳的规则:
-A INPUT --ipv4 -i eth0 -p icmp -m icmp --icmp-type echo-request -j DROP
-A INPUT --ipv4 -i eth0 -p icmp -m icmp --icmp-type timestamp-request -j DROP
如上所述,您可能不想使用它们。 ping 实际上对您测试系统是否正常工作很有用,阻止它并不是最好的主意。
要获取支持的 ICMP 类型的完整列表,请使用:
$ iptables -p icmp -h
$ ip6tables -p icmpv6 -h