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