我想只允许一个国家/地区访问,但在此国家/地区内排除代理。
这就是我所拥有的(为方便起见缩短版本)
<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>
但我知道这不行。我该怎么做呢?
答案 0 :(得分:121)
更新:为新的apache 2.4直接跳到最后。
Order关键字及其与Deny
和Allow
指令的关系是一个真正的噩梦。理解我们如何最终得到这样的解决方案将是非常有趣的,至少可以说是非直观的解决方案。
Order
关键字会对Allow
和Deny
指令的使用方式产生重大影响。Deny
和Allow
指令不按其编写顺序应用,它们必须被视为两个不同的块(一个用于Deny
指令,一个用于{{ 1}})。您有两种主要模式:
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
您需要允许国家/地区网络的网络列表。在这个国家/地区,您希望排除某些代理的IP地址。
您已采用 allow-anyone-except-this-list-or-maybe-not 模式,因此默认任何人都可以访问您的服务器,但代理服务器除外Rule Allow
list of Allow rules
Except
list of Deny rules
Policy Deny (when no rule fired)
列表中列出的IP,但如果被拒绝,则仍允许国家/地区网络。这太宽泛了。不好。
通过反转为Deny
,您将处于 reject-everyone-except-this-list-or-maybe-not 模式。
因此,您将拒绝访问所有人,但允许国家/地区网络,然后您将拒绝代理。当然,你必须删除@Gerben和@Michael Slade所述的order allow,deny
(这个答案只能解释他们写的内容)。
Deny from all
通常会与Deny from all
一起删除允许默认访问,并生成简单易读的配置。例如,在此之后指定允许的IP列表。您不需要该规则,您的问题是三向访问模式的完美案例(默认策略,例外,异常例外)。
但设计这些设置的人肯定是疯了。
整个授权方案已在Apache 2.4 中使用RequireAll,RequireAny和RequireNone指令重构。请参阅示例this complex logic example。
因此旧的奇怪order deny,allow
逻辑成为遗物,并引用新文档:
过去控制授权的执行方式和顺序一直是个谜。
答案 1 :(得分:3)
只需使用order allow,deny
,然后移除deny from all
行。
答案 2 :(得分:3)
将您的代码更改为
<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..
规则轻松覆盖。
答案 3 :(得分:2)
不直接回答OP问题,但是对于发现此问题的人来说,要清楚allow,deny
和deny,allow
之间的差异:
将逗号读作&#34;但是&#34;。
allow but deny
:白名单,但例外情况。 deny but allow
:黑名单,但有例外。 仅允许一个国家/地区访问,但不包括此国家/地区内的代理
OP需要具有例外情况的白名单,因此allow,deny
代替deny,allow
答案 4 :(得分:1)
正如Gerben建议的那样,只需改变:
order deny,allow
deny from all
到
order allow,deny
这些限制将按照您的要求运作。
详情可在Apache's docs找到。
答案 5 :(得分:0)
在apache2中,Linux配置
要求所有已授予