编辑 我认为过多的“拒绝”行会使 Apache 感到困惑,从而阻止未列出的 IPv4 地址。但 @Ladadadada 的评论让我找到了确切的问题。您可以在下面阅读我以前的问题。问题是,以下行:
deny from 42.1.0.0/19
阻止 IPv6 地址
2a01:4f8:120:8201::2
2a01:1e8:e100:ce::2
这怎么可能?
我有一个真的被阻止的 IP 地址的长列表,由阻止Include
内的指令激活Directory
。
此文件仅包含 IPv4 地址,但我的服务器还阻止了有限的IPv6 地址数。它不会阻止所有 IPv6 流量。如果我移除阻止,这些 IPv6 地址就可以正常访问服务器。
最初,阻止文件将每个 IP 阻止放在单独的“拒绝来自”行上。我尝试将每 40 个 IP 阻止合并在一起,以减少规则数量和文件大小。这仍然没有帮助。但是,当我将规则截断为 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)"
并从错误日志中
[Sun Mar 03 15:01:07 2013] [error] [client 2a01:4f8:120:8201::2] client denied by server configuration: /mirror/pub/tdf/
我怎样才能列出大量的“拒绝”指令?我无法控制机器的防火墙,所以这是不可能的。
答案1
直接进入细节,让我们将和都转换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
CIDR 符号的工作方式是匹配前/X
几位。在您的例子中,它将匹配第一个19
,这2a01:1e8:...
也匹配。
这让我相信这是一个错误,因为这正是他们的文档。