[英]htaccess “order” Deny, Allow, Deny
我只想允许一个国家/地区访问,但不包括该国家/地区内的代理。
这就是我所拥有的(为了方便起见,简化了版本)
<Limit GET POST>
order deny,allow
deny from all
allow from 139.82.0.0/16
allow from 143.54.0.0/16
allow from 186.192.0.0/11
allow from 186.224.0.0/11
.
deny from 186.201.27.66
deny from 186.201.196.1
deny from 186.214.51.231
deny from 186.237.225.26
</Limit>
但是我知道这行不通。 我该怎么做呢?
更新:对于新的Apache 2.4,直接跳到最后。
Order关键字及其与Deny
和“ Allow
指令”的关系确实是一场噩梦。 了解我们如何最终得到这样的解决方案,至少可以说是一种非直觉的解决方案,将是非常有趣的。
Order
关键字将对如何使用Allow
和Deny
伪指令产生重大影响。 Deny
和Allow
指令未按其写入的顺序应用,必须将它们视为两个不同的块(一个用于Deny
指令,一个用于Allow
)。 您有两种主要模式:
Order Deny,Allow
Deny
规则。 Deny
规则拒绝了一些请求。 Allow
他们返回。 我将其改写为:
Rule Deny
list of Deny rules
Except
list of Allow rules
Policy Allow (when no rule fired)
Order Allow,Deny
Allow
规则。 Allow
规则。 Allow
,您仍然可以拒绝Deny
。 以简化形式:
Rule Allow
list of Allow rules
Except
list of Deny rules
Policy Deny (when no rule fired)
您需要允许列出作为国家/地区网络的网络。 在这个国家/地区,您要排除某些代理的IP地址。
您已采用“ 除此列表外”或“也许不是 ”以外的任何人 ,因此默认情况下, 任何人都可以访问您的服务器,但“ Deny
列表中列出的代理IP除外,但是如果他们被拒绝,您仍然允许该国家/地区网络。 太广泛了。 不好。
通过反转order allow,deny
您将处于拒绝所有人(除了此列表,或者可能不是)模式。 因此,您将拒绝所有人访问,但允许使用国家/地区网络,然后您将拒绝代理。 当然,您必须按照@Gerben和@Michael Slade的说法Deny from all
删除“ Deny from all
(此答案仅说明了他们的所作所为)。
通常, Deny from all
order deny,allow
看到“ order deny,allow
默认情况下 order deny,allow
删除允许访问并进行简单易读的配置。 例如,在此之后指定允许的IP列表。 您不需要该规则,您的问题就是三向访问模式(默认策略,例外,例外的例外)的完美案例。
但是设计这些设置的人肯定是疯了。
整个授权方案已在Apache 2.4中使用RequireAll , RequireAny和RequireNone指令进行了重构 。 参见例如这个复杂的逻辑例子 。
因此,旧的奇怪的Order
逻辑变成了遗物,并引用了新的文档:
过去,控制授权的方式和应用顺序一直是个谜
只需使用order allow,deny
代替,然后deny from all
行中删除deny from all
。
将您的代码更改为
<Limit GET POST>
deny from all
allow from 139.82.0.0/16
allow from 143.54.0.0/16
allow from 186.192.0.0/11
allow from 186.224.0.0/11
</Limit>
这样,您的htaccess会拒绝除您明确允许的内容之外的所有内容allow from..
允许范围内的代理可以轻松地被其他deny from..
规则所覆盖。
正如Gerben所建议的,只需更改:
order deny,allow
deny from all
至
order allow,deny
这些限制将按您希望的那样起作用。
可以在Apache的docs中找到详细信息。
不是直接回答OP的问题,而是为了找到这个问题的人们,以便清楚地了解allow,deny
和deny,allow
之间的区别是什么:
将逗号读为“ but”。
allow but deny
:白名单例外。 deny but allow
:带有例外的黑名单。 仅允许一个国家/地区访问,但排除该国家/地区内的代理
OP需要有例外的白名单,因此allow,deny
而不是deny,allow
在apache2中,linux配置
要求所有授予
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.