天天看點

用apache實作禁止IP段或者主機對某個目錄的通路

Allow 指令

說明: 控制哪些主機能夠通路伺服器的一個區域

文法: Allow from all|host|env=env-variable [host|env=env-variable] ...

上下文: 目錄, .htaccess

覆寫項: Limit

狀态: Base

子產品: mod_access

Allow指令影響哪些主機可以通路伺服器的一個區域。可以用主機名、IP位址、 IP位址範圍或者其他環境變量中捕獲的用戶端請求特性來對通路進行控制。

這 個指令的第一個參數總是from。随後的參數可以有三種不同形式。 如果指定Allow from all,則允許所有主機通路,需要 Deny和Order指令像下面讨論的那樣配置。 要隻允許特定一部分主機或主機群通路伺服器,host可以用下面任何一種格式來指定:

一個域名(部分)

例子:Allow from apache.org

允 許名字與給定字元串比對或者以該字元串結尾的主機通路。 隻有完整的名字組成部分才被比對,是以上述例子将比對foo.apache.org而不能比對fooapache.org。 這樣的配置将引起伺服器執行一個對客戶IP位址的反查域名操作而不管HostnameLookups指令是否設定

完整的IP位址

例子:Allow from 10.1.2.3

允許一個主機的一個IP位址通路。

部分IP位址

例子:Allow from 10.1

IP位址的開始1到3個位元組,用于子網限制。

網絡/掩碼對

例子:Allow from 10.1.0.0/255.255.0.0

一個網絡a.b.c.d,和一個掩碼w.x.y.z。用于更精确的子網限制。

網絡/nnn 無内别域間路由規格

例子:Allow from 10.1.0.0/16

同前一種情況相似,除了掩碼由nnn個高位位元組構成。

注意以上後三個例子完全比對同一組主機。

IPv6位址和IPv6子網可以像下面這樣指定:

Allow from fe80::a00:20ff:fea7:ccea

Allow from fe80::a00:20ff:fea7:ccea/10

Allow 指令的第三種參數格式允許對伺服器的通路由 環境變量的一個擴充指定。指定 Allow from env=env-variable時,如果環境變量env-variable存在則通路請求被允許。 使用由mod_setenvif提供的指令,伺服器用一種基于用戶端請求的彈性方式提供了設定環境變量的能力。 是以,這條指令可以用于允許基于像User-Agent(浏覽器類型)、Referer或者其他Http請求頭字段 的通路。

例子:

SetEnvIf User-Agent ^KnockKnock/2.0 let_me_in

<Directory /docroot>

Order Deny,Allow

Deny from all

Allow from env=let_me_in

</Directory>

這種情況下,發送以KnockKnock/2.0開頭的使用者代理标示的浏覽器将被允許通路,而所有其他浏覽器将被禁止通路。

Deny 指令

說明: 控制哪些主機被禁止通路伺服器

文法: Deny from all|host|env=env-variable [host|env=env-variable] ...

上下文: 目錄, .htaccess

覆寫項: Limit

狀态: Base

子產品: mod_access

這條指令允許基于主機名、IP位址或者環境變量限制對伺服器的通路。 Deny指令的參數設定和Allow指令完全相同。

Order 指令

說明: 控制預設的通路狀态和Allow與Deny指令被評估的順序。

文法: Order ordering

預設值: Order Deny,Allow

上下文: 目錄, .htaccess

覆寫項: Limit

狀态: Base

子產品: mod_access

Order指令控制預設的通路狀态和 Allow與Deny指令被評估的順序。 Ordering是以下幾種範例之一:

Deny,Allow

Deny指令在 Allow指令之前被評估。預設允許所有通路。 任何不比對Deny指令或者比對 Allow指令的客戶都被允許通路伺服器。

Allow,Deny

Allow指令在 Deny指令之前被評估。預設禁止所有通路。 任何不比對Allow指令或者比對 Deny指令的客戶都将被禁止通路伺服器。

Mutual-failure

隻有出現在Allow清單并且不出現在 Deny清單中的主機才被允許通路。 這種順序與Order Allow,Deny具有同樣效果,不贊成使用,它包括了哪一種配置。

關鍵字隻能用逗号分隔;它們之間不能有空格。注意在所有情況下每個Allow和Deny指令語句都将被評估。

在下面的例子中,apache.org域中所有主機都允許通路,而其他任何主機通路都被拒絕。

Order Deny,Allow

Deny from all

Allow from apache.org

下面例子中,apache.org域中所有主機,除了foo.apache.org子域包含的主機被拒絕通路以外,都允許通路。 而所有不在apache.org域中的主機都不允許通路,因為預設狀态是拒絕對伺服器的通路。

Order Allow,Deny

Allow from apache.org

Deny from foo.apache.org

另 一方面,如果上個例子中的Order指令改變為Deny,Allow, 将允許所有主機的通路。這是因為,不管配置檔案中指令的實際順序如何, Allow from apache.org指令會最後被評估到并覆寫之前的 Deny from foo.apache.org。所有不在apache.org 域中的主機也允許通路是因為預設狀态被改變到了允許。

即使沒有伴随Allow和Deny指令,一個Order 指令的存在也會影響到伺服器上某一個部分的通路, 這是由于他對預設通路狀态的影響。例如,

<Directory /www>

Order Allow,Deny

</Directory>

這樣将會禁止所有對/www目錄的通路,因為預設狀态将被設定為拒絕.

Order 指令隻在伺服器配置的每個段内部控制通路指令的處理。 這暗示着,例如,一個在<Location>段出現的 Allow或者Deny指令總是将會在一個<Directory>段或者 .htaccess檔案中出現的 Allow或Deny 指令之後被評估,而不管Order指令中的設定為何。要了解配置段落合并的詳細資訊, 參看How Directory, Location and Files sections work相關文檔