Apache 2.4 需要排除 IP 范围

Apache 2.4 需要排除 IP 范围

我有一台 apache 2.4 服务器,为本地网络用户提供 Kerberos 身份验证。现在我需要允许公众无需身份验证即可访问它,但仍然需要本地网络身份验证。

如果我简单地删除“需要有效用户”指令,那么本地用户就无需进行身份验证。

如果我允许一个公共 IP,则一切都会正常运行,本地用户将通过身份验证,来自该 IP 的远程用户可以访问:

<RequireAny>
   Require ip 11.22.33.44
   Require valid-user
</RequireAny>

但如果尝试允许除 locallet 之外的所有人:

<RequireAny>
   Require ip not 192.168
   Require valid-user
</RequireAny>

然后我得到“语法错误:负 Require 指令在指令中无效”

如果我将排除嵌入到 RequireAll 中:

<RequireAny>
   <RequireAll>
      Require ip not 192.168
   <RequireAll>
   Require valid-user
</RequireAny>

然后我收到一个错误“RequireAll 指令仅包含负面授权指令”。

类似地,添加

<RequireAny>
   <RequireNone>
      Require ip 192.168
   <RequireNone>
   Require valid-user
</RequireAny>

给出错误“RequireNone 指令在指令中无效”。

那么应该如何进行排除呢?

答案1

使用时的一个微妙的细节not指令中Require 否定匹配的原因是,它不能单独用于允许或拒绝请求,因为“不对”并不构成“错误的”

因此,要使用否定来拒绝访问,块必须有一个可评估为真或假的元素。

要创建 IP 地址黑名单(而不是白名单),请使用以下构造:

<RequireAll>
  # Block IP-addresses from 192.168.2.1 and the 193.37.0.0/16 and 10.9.8.0/24 networks 
  Require not ip 192.168.2.1 193.37 10.9.8

  # Allow all other IP's
  Require all granted
</RequireAll> 

为了允许公共访问而无需身份验证但仍需要对 localnet 进行身份验证,您可以获得一个授权容器,例如:

<RequireAny>
   # users from the ip-range localnet must be authenticated 
   <RequireAll>
      Require ip "localnet"
      Require valid-user
   </RequireAll>
   # users not from the ip-range localnet are allowed anonymous access
   <RequireAll> 
       Require not ip "localnet"
       Require all granted
   <RequireAll>
</RequireAny>

相关内容