簡體   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