假设我的 IPv6 是 1111:2222:3333:4444:5555:6666:7777:8888
我可以在 Apache .htaccess 中写入以下任何一行:
Require ip 1111:2222:3333:4444:0000:0000:0000:0000
Require ip 1111:2222:3333:0000::/64
Require ip 1111:2222:0000:0000::/64
Require ip 1111:2222:0000:0000:
我仍然可以访问该网站。Apache 似乎只测试了 IPv6 的前 2 个块。我是不是漏掉了什么?我如何才能真正限制到我的 IP?
答案1
您的示例 IP 均不位于同一个 /64 子网中,因此它们不可能全部与您的 IP 匹配。比较第 3 位和第 4 位数字组。
从 IP 地址开始,截掉最低有效位的数字。使用 CIDR 斜线表示法中剩余的位数。使用以下代码写出建议格式::: 压缩尽可能多的零。
例如,取 IP 地址2001:db8:1622:c7bb:5919:8f34:f78e:aadd
将其减半,剩下 64 个有效位,因此:
Require ip 2001:db8:1622:c7bb::/64
这个 /64 应该是您的,就像您的众多子网之一一样。只有一个 IP 地址的允许列表没有充分利用地址空间。相反,将主机放在与其用途或安全区域一致的 /64 中。
当然,mod_authz_host 能够处理单个 IP 允许列表。如果您确实想要一个 IP 地址,它可以做到。