编辑我认为,过多的“拒绝”线路混淆了Apache阻止未列出的IPv4地址。 但@Ladadadada的评论让我指出确切的问题。 你可以阅读我以前的问题。 问题是,下面这行:
deny from 42.1.0.0/19
阻止IPv6地址
2a01:4f8:120:8201::2 2a01:1e8:e100:ce::2
这怎么可能?
我有一个非常长的阻塞IP地址列表,由Directory指令块中的Include指令激活。
该文件只包含IPv4地址,但是我的服务器也阻塞了有限数量的IPv6地址。 它不阻止所有的IPv6stream量。 如果我删除块,这些IPv6地址可以很好地访问服务器。
最初的块文件有一个单独的“拒绝”行上的每个IP块。 我尝试将其中每40个组合,以减less规则数量和文件大小。 它仍然没有帮助。 但是,当我将规则截断为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/
我如何列出大量的“拒绝”指令? 我无法控制机器的防火墙,所以这是不可能的。
直接进入细节,让我们将42.1.0.0和2a01:1e8转换为二进制(你会明白为什么我只select了最初的部分)。
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:...也匹配。
这导致我相信这是一个错误,因为这正是他们的文档中显示的用法。