即使提供了身份验证,也拒绝访问某个位置

即使提供了身份验证,也拒绝访问某个位置

我们有一些 Apache 服务器包含不同级别的密码保护。例如,对于测试/登台系统,我们有/密码保护并要求使用特定的用户名:

<Location />
  AuthType Basic
  AuthName "By Invitation Only"
  AuthUserFile /etc/httpd/conf/passwd
  Require user staging demo test
</Location>

在相同的设置中,我们还保护其他位置:

<Location /api/billing>
  AuthType Basic
  AuthName "Billing"
  AuthUserFile /etc/httpd/conf/billingpasswd
  Require user billing 
</Location>

现在我被要求根据 IP 地址限制另一个位置。在这种情况下,所有以前的密码都应该像以前一样有效,但即使提供了密码,我们也希望仅根据 IP 拒绝对新位置的访问。

<Location /newlocation>
    Order Deny,Allow
    Deny From All
    Allow From 1.2.3.4/24
</Location>

如果此新Location指令包含,Satisfy All那么即使我尝试连接,即使我从允许的子网之一进行连接,也会收到 403(禁止)错误。如果我将其更改为,Satisfy Any那么我可以从任何 IP 地址连接到 /newlocation,无论它是否被列为允许。

无论其他身份验证是否成功,基于 IP 限制对新位置的访问的正确方法是什么?

这些 Apache 服务器只是 Tomcat 应用程序的前端,因此没有可供我放入 .htaccess 文件的实际目录结构。

答案1

我实际上需要做几件事,因为我已经定义了这一点,正如原始问题中提到的那样:

<Location />
  AuthType Basic
  AuthName "By Invitation Only"
  AuthUserFile /etc/httpd/conf/passwd
  Require user staging demo test
</Location>

为了限制/newlocation通过 IP 进行的访问,即使提供了有效的密码,我也需要包含上述内容以及 IP 范围并指定Satisfy All

<Location /newlocation>
    AuthType Basic
    AuthName "By Invitation Only"
    AuthUserFile /etc/httpd/conf/passwd
    Require user staging demo test
    Order Allow,Deny
    Allow From 1.2.3.4/24
    Satisfy All
</Location>

答案2

指令Order参数顺序很重要。你可以设置Order Deny,Allow而不是Order Allow,Deny

这是您正在寻找的配置:

<Location /newlocation>
  Order Allow,Deny
  Allow From 1.2.3.4/24
  Satisfy any
</Location>

仅允许 IP 范围 1.2.3.4/24 显示 /newlocation 路径

相关内容