在 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/ 需要有效的用户登录
<webroot>/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>
低于<Location />Require ip 1.2.3.4</Location>
块在虚拟主机配置中(以上不起作用)。使用 <Directory>
块或 .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 配置httpd:添加域名禁止IP访问网站