Apache IPv4 拒绝指令阻止 IPv6 地址

hay*_*lci 4 blocking apache-2.2

编辑 我认为过多的“拒绝”行会混淆 apache 以阻止未列出的 IPv4 地址。但是@Ladadadada 的评论让我指出了确切的问题。您可以在下面阅读我的旧问题。问题是,以下行:

deny from 42.1.0.0/19
Run Code Online (Sandbox Code Playgroud)

阻止 IPv6 地址

2a01:4f8:120:8201::2
2a01:1e8:e100:ce::2
Run Code Online (Sandbox Code Playgroud)

这怎么可能?


我有一个非常长的被阻止 IP 地址列表,由块Include内的指令激活Directory

此文件仅包含 IPv4 地址,但我的服务器也阻止了有限数量的 IPv6 地址。它不会阻止所有 IPv6 流量。如果我删除这些块,这些 IPv6 地址可以很好地访问服务器。

最初,块文件将每个 IP 块放在单独的“拒绝”行上。我尝试将它们中的每 40 个组合起来以减少规则数量和文件大小。它仍然没有帮助。但是当我将规则截断为 4-5 条拒绝行时,它按预期工作并且没有阻止 IPv6 地址。

这些是来自访问日志的示例日志。

2a01:4f8:120:8201::2 - - [03/Mar/2013:15:01:07 +0200] "GET /tdf/ HTTP/1.1" 403 387 "-" "MirrorBrain Probe (see http://mirrorbrain.org/probe_info)"
Run Code Online (Sandbox Code Playgroud)

并从错误日志

[Sun Mar 03 15:01:07 2013] [error] [client 2a01:4f8:120:8201::2] client denied by server configuration: /mirror/pub/tdf/
Run Code Online (Sandbox Code Playgroud)

如何列出大量“拒绝”指令?我无法控制机器的防火墙,所以这是不可能的。

Jay*_*Jay 8

直接进入细节,让我们将42.1.0.0和都转换2a01:1e8为二进制(你会明白为什么我只选择了初始部分。)

0010 1010 . 0000 0001 . 000 |
   42     .     1     . 0   |

0010 1010   0000 0001 : 000 | 0 0001 1110 1000
         2a01         :     |  1e8
                            |
                            ^ cut here
Run Code Online (Sandbox Code Playgroud)

CIDR 表示的工作方式是它会匹配第一位/X。在你的情况下,它会匹配第一个19,它2a01:1e8:...也匹配。

这让我相信这是一个错误,因为这正是他们文档中演示的用法。