我在云提供商上有一个 Debian 11 VPS,启用了 IPv4 和 IPv6,并且 eth0 接口具有全局范围的 ipv6 地址(公共)和链接范围的 ipv6 地址(fe80::/10)。
服务器的唯一目的是托管一个公共网站。
我正在使用 iptables/ip6tables 在服务器上实现防火墙。我阅读了 RFC4890,但仍然不确定如何处理某些 ICMPv6 消息类型,以及我的用例是否真的需要它们。虽然我允许链接范围内的任何流量,但我不确定是否可以安全地阻止全局范围内的以下 ICMPv6 消息类型:
路由器请求(类型 133)
路由器广告(类型 134)
邻居招揽(135型)
邻居广告(136 型)
反向邻居发现请求(类型 141)
反向邻居发现广告(类型 142)
侦听器查询(类型 130)
听众报告(类型 131)
监听器完成(132 型)
侦听器报告 v2(类型 143)
证书路径请求(类型 148)
证书路径广告(类型 149)
多播路由器广告(类型 151)
组播路由器请求(类型 152)
组播路由器终端(153 型)
非常感谢您的帮助。
允许所有 ICMPv6 类型。尽可能限制每秒 ICMPv6 数据包的速率,以限制 IP 设备上的资源使用。这是一种简单的方法,并不像听起来那么不安全。
或者,您的研究方法是阅读RFC 4890 Recommendations for Filtering ICMPv6 Messages in Firewalls。注意缺少必须放弃的建议作为开始。
“链接全局”不是标准术语。我认为您的意思是(全球)单播。与链接本地或多播相反,它们在定义的范围内。此外,您将需要具有区域概念的防火墙。因为您可能希望在前缀与互联网上采用不同的策略,但两者都是全球单播范围。
RFC 解释说,许多这些本地范围的消息不需要特殊过滤。兼容的路由器不会转发本地来源的链接。接收邻居发现消息的兼容主机将确认它们没有通过路由器。许多防火墙都是路由器,因此您需要邻居发现(包括 RA)才能工作。
作为一个实际示例,让我们快速看一下自由路由器 OpenWrt 的默认 ICMPv6 处理。这个问题或多或少包含了默认的 ICMPv6 防火墙规则。
区域“lan”默认为全部接受。区域“wan”默认为仅传出。典型的简单防火墙。允许规则来自 wan:
大多数情况下不得丢弃类型,请参阅第 4.4.1 节。请注意,在“Allow-ICMPv6-Forward”中,错误类型和回显始终是允许的,无论是入站还是出站。
链路本地多播接收者通知消息。
总体而言,允许内部区域中的所有内容,并允许错误、回显、邻居发现和多播相关的 ICMP 来自 Internet。不允许 SEND 等其他内容穿越互联网。不是过滤这些东西的唯一方法,但至少不会破坏 IPv6。
根据我的研究,我最终得出了以下规则。在注释规则(即:禁用类型)中,对于 ICMPv6 类型的 LOG REJECT 规则,我的数据包计数为 0。
所以我的结论是网络服务器只需要类型 1,2,3,4,128,135,136