Apache 2.4 需要排除 IP 范围

Dmi*_*kih 3 apache-2.4

我有一个 apache 2.4 服务器,为本地网络用户提供 Kerberos 身份验证。现在我需要允许公众在没有身份验证的情况下访问它,但仍然需要本地网络的身份验证。

如果我只是删除“需要有效用户”指令,则本地用户不会进行身份验证。

如果我允许一个公共 IP,一切都会完美运行,本地用户将获得身份验证,来自该 IP 的远程用户将获得访问权限:

<RequireAny>
   Require ip 11.22.33.44
   Require valid-user
</RequireAny>
Run Code Online (Sandbox Code Playgroud)

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

<RequireAny>
   Require ip not 192.168
   Require valid-user
</RequireAny>
Run Code Online (Sandbox Code Playgroud)

然后我得到“语法错误:负 Require 指令对指令没有影响”

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

<RequireAny>
   <RequireAll>
      Require ip not 192.168
   <RequireAll>
   Require valid-user
</RequireAny>
Run Code Online (Sandbox Code Playgroud)

然后我收到错误“RequireAll 指令仅包含否定授权指令”。

同样,添加

<RequireAny>
   <RequireNone>
      Require ip 192.168
   <RequireNone>
   Require valid-user
</RequireAny>
Run Code Online (Sandbox Code Playgroud)

给出错误“RequireNone 指令对指令没有影响”。

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

HBr*_*ijn 5

not在指令中使用 来否定匹配时的一个微妙细节Require 是,它本身不能用于允许或拒绝请求,因为“not true”并不构成“false”

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

要创建 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> 
Run Code Online (Sandbox Code Playgroud)

要允许公共访问而无需身份验证,但仍需要本地网络身份验证,您将获得一个授权容器,例如:

<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>
Run Code Online (Sandbox Code Playgroud)