繁体   English   中英

htaccess“命令”拒绝,允许,拒绝

[英]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关键字将对如何使用AllowDeny伪指令产生重大影响。
  • 其次, DenyAllow指令未按其写入的顺序应用,必须将它们视为两个不同的块(一个用于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-mode拒绝除此列表以外的其他任何人 ,或者可能不

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不推荐使用所有这些功能

整个授权方案已在Apache 2.4中使用RequireAllRequireAnyRequireNone指令进行了重构 参见例如这个复杂的逻辑例子

因此,旧的奇怪的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,denydeny,allow之间的区别是什么:

将逗号读为“ but”。

  • allow but deny :白名单例外。
    除了允许列表中的项目,拒绝列表中的项目,所有内容都被拒绝
  • deny but allow :带有例外的黑名单。
    允许所有内容,除了拒绝列表中的项目,允许列表中的项目除外

仅允许一个国家/地区访问,但排除该国家/地区内的代理

OP需要有例外的白名单,因此allow,deny而不是deny,allow

在apache2中,linux配置

要求所有授予

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM