阻止仅提供白名单的 IPv6 地址

阻止仅提供白名单的 IPv6 地址

遇到一个用例,我需要阻止 IPv6 地址访问网站。通过跳过白名单范围内的特定地址来阻止 IPv4 地址相当简单。有人知道如何对 IPv6 地址做类似的事情吗?或者这是否可行?

PS:白名单是我唯一的选择,没有黑名单选项。我不太了解 IPv6 地址的网络概念,所以请将这个问题视为新手问题。我可以编辑问题以包含更多细节,使问题更易于理解。我正在使用 Salesforce 体验云网站为问题设置更多背景。

答案1

这可能是可行的,但可能需要大约 64 条白名单规则来阻止某个地址。

因此,在您去那里之前,我会问自己是否有更好的方法来做到这一点,例如 - 在沿途的其他地方实现这种过滤。如果您可以控制沿途的代理或服务本身,并向服务添加一些特定的逻辑。

假设您必须这样做,我首先要说的是,通过阻止被阻止的 IP 所属的整个 /64 子网,您可能是安全的,因此,如果您被阻止的 IPv6 地址是 2001:4860:4860::8888,您可以安全地阻止 2001:4860:4860:0000/64(通常写为 2001:4860:4860::/64)原因是 /64 子网通常是用于表示物理站点的最小子网(IPv6 不需要 NAT),因此该站点内的任何其他内容都可以安全地阻止。

您还可以减少问题,只允许 2000::/3(以十六进制数字 2 或 3 开头的所有内容),因为这些都是全球单播地址(点击此处了解 GUA 地址

因此,基本上你想允许 2000::/3 中的所有内容,除了 2001:4860:4860::/64

剩下的问题与 IPv6 无关,更多的是二进制算术。您需要执行如下操作:为简单起见,假设我们有一个 8 位地址 0x34,我们想要阻止它但允许剩余的地址空间,0x34 是二进制 0011:0100b。因此,这里有一个执行此操作的过程:

我们将整个 8 位空间标记为 xxxx:xxxx 我们将其分成两部分:

  1. 0xxx:xxx
  2. 1xxx:xxxx

0011:0100 属于 (1),因此我们可以允许完整的 1xxx:xxxx

现在我们有一个 0xxx:xxxx 的问题,将其拆分为

  1. 00xx:xxxx << 屏蔽号码在此
  2. 01xx:xxxx

所以我们也可以允许 01xx:xxxx

再次,问题不是 00xx:xxxx,将其拆分为

  1. 000x:xxx
  2. 001x:xxxx << 屏蔽号码在此

所以我们可以允许 000x:xxxxx

依此类推,直到剩下确切的被阻止的地址。

相关内容