用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相關文檔

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章