在 apache 2.4 中结合子文件夹的 ip 和用户身份验证限制

Posted

技术标签:

【中文标题】在 apache 2.4 中结合子文件夹的 ip 和用户身份验证限制【英文标题】:Combine ip and user auth restriction for subfolder in apache 2.4 【发布时间】:2015-01-18 12:44:24 【问题描述】:

我想限制对特定 IP 的完整网站 (apache 2.4) 的访问。最重要的是,我想通过用户身份验证限制对某些子文件夹的访问。用户身份验证不起作用。这是我得到的:

在我的虚拟主机配置中

<Location />
    # Localhost
    Require ip 127.0.0.1i
    # some other IP
    Require ip 1.2.3.4
<Location>

现在我希望子文件夹 /secure/ 需要有效的用户登录

&lt;webroot&gt;/secure/.htaccess 看起来像

<RequireAll>
    Require all granted
    Require user user1 user2 user3
    AuthBasicProvider file
    AuthType Basic
    AuthName "Secure Folder Login"
    AuthUserFile /securePath/userAuth
</RequireAll>

无需用户身份验证,我仍然可以从 IP 1.2.3.4 访问 /secure。感觉 apache 与 IP 匹配 Require ip 1.2.3.4 指令(在隐式 RequireAny 内)并且不关心可能的额外限制。

【问题讨论】:

这里是somewhat of a solution - 如果您的服务器启用了mod_access_compat,您可以使用旧的 Apache 语法使其按预期工作。链接中的代码具有IfModule 检查,因此当模块不存在时,它将恢复为较新的语法和忽略身份验证的行为。不幸的是,还没有找到最终的答案。 【参考方案1】:

至少 Location(在 Location、Directory、File 和 .htaccess 指令之外)似乎是单独评估的,最后以相反的顺序进行评估。我没有完全检查,也找不到关于它的文档。

长话短说

我可以通过放置来实现我想要的

<Location /secure/>
    Require all denied
    <RequireAll>
        Require user user1 user2 user3
        AuthBasicProvider file
        AuthType Basic
        AuthName "Secure Folder Login"
        AuthUserFile /securePath/userAuth
    </RequireAll>
</Location>

低于&lt;Location /&gt;Require ip 1.2.3.4&lt;/Location&gt;在虚拟主机配置中(以上不起作用)。使用 &lt;Directory&gt; 块或 .htaccess 均无效。

【讨论】:

【参考方案2】:

如果您希望阻止任何 IP,但只阻止列表中的一个,并为允许的 IP 提供基本登录提示,您可以执行以下操作(在您的 .htaccess 中):

Require all denied
<RequireAll>
    Require valid-user
    Require ip 100.04.04.04
    AuthBasicProvider file
    AuthType Basic
    AuthName "Secure Folder Login"
    AuthUserFile /htdocs/www/web_projects/.htpasswd
</RequireAll>

对于多个 IP,如下所示应该可以:

Require all denied    
<RequireAll>
    <RequireAny>
        Require ip 78.53.160.0/19
        Require ip 80.171.1.0/24
        Require ip 80.171.2.0/23
        Require ip 80.171.4.0/22
        Require ip 80.171.8.0/21
        Require ip 80.171.16.0/20
        Require ip 80.171.32.0/19
        Require ip 80.171.64.0/18
    </RequireAny>
    <RequireAll>
        Require valid-user
        AuthBasicProvider file
        AuthType Basic
        AuthName "Secure Folder Login"
        AuthUserFile /htdocs/www/web_projects/.htpasswd
    </RequireAll>
</RequireAll>

【讨论】:

由于某种原因,这也会在 ip 匹配时忽略身份验证。

以上是关于在 apache 2.4 中结合子文件夹的 ip 和用户身份验证限制的主要内容,如果未能解决你的问题,请参考以下文章

Apache 2.4 重定向直接 IP 访问

apache 2.4 配置httpd:添加域名禁止IP访问网站

限制对 Apache 2.4 虚拟主机 (WAMP) 的访问

详解Apache 2.4web服务器

仅限 Apache 2.4 白名单 Cloudflare

Apache 2.4 访问控制;