当向 等目标地址发送 ICMPv4 回显请求时224.0.0.1
,接收请求的 Linux 主机会忽略该请求。使用的目标 MAC 地址是01:00:5e:00:00:01
。
让这些 Linux 主机应答的唯一方法是将内核参数设置net.ipv4.icmp_echo_ignore_broadcasts
为值0
。这将指示内核应答多播和广播 ICMPv4 请求,并为广播安全威胁打开大门。
为什么多播流量会通过此参数进行过滤?是否存在任何攻击可以证明这一点?
使用 ICMPv6 和等效目标地址(如)ff02::1
,Linux 主机不会过滤流量。将来是否存在也被过滤的风险?ICMPv4 是否存在 ICMPv6 不存在的威胁?
Linux 主机:
- Linux 发行版:Ubuntu 20.04.1 LTS Focal
- Linux 内核:5.4.0
答案1
我理解您的问题,因此您希望阻止广播处理,但不会阻止多播处理,因为可能存在广播安全威胁。
这就引出了一个问题:为什么你认为广播比多播更危险。毕竟,多播地址224.0.0.1
表示“此子网上的所有主机”(参考)。这与广播这些命令也会发送到子网内的所有主机。
更进一步说,你甚至可以说多播比广播更危险,因为它是可路由的。至少,部分多播地址范围是可路由的(有关不完整的快速概述,请参阅这里),这意味着您子网之外的某个人可以向您子网内的所有主机发送多播流量。 (注意:通常只有您子网内感兴趣的主机才会处理此类数据,但这不会改变问题的本质)。
为了避免误解,该地址224.0.0.1
不可路由,因此不存在来自外部的危险。但它仍可寻址子网中的所有主机。
鉴于此,Linux 在内核层面没有提供单独的参数来忽略 IPv4 的广播和多播,这并非完全不合理。
出于上述原因,我在内核级别启用了广播和多播处理,但在防火墙级别阻止了多播。我不需要它,也永远不需要它,而且我对基于它的“零配置”废话深感怀疑。顺便提一下,Windows 中的情况也一样(我在防火墙级别阻止了它)。
答案2
除了时间戳请求(使用相同的标志控制,仅限 v4 icmp)之外,区别在于系统控制对于 IPv6 允许的接收者组来说,v6 的命名更为恰当:
/proc/sys/net/ipv4/icmp_echo_ignore_broadcasts
工作原理非常类似
/proc/sys/net/ipv6/icmp/echo_ignore_anycast
/proc/sys/net/ipv6/icmp/echo_ignore_multicast
可用的控件描述如下Documentation/networking/ip-sysctl
攻击只是流量倍增 - 您不会希望网络因响应小数据包而饱和。一般来说,没有必要对 IPv6 中的流量应用如此广泛的过滤器,因为 IPv6 中没有广播。